
/**
 * Client
**/

import * as runtime from './runtime/library.js';
import $Types = runtime.Types // general types
import $Public = runtime.Types.Public
import $Utils = runtime.Types.Utils
import $Extensions = runtime.Types.Extensions
import $Result = runtime.Types.Result

export type PrismaPromise<T> = $Public.PrismaPromise<T>


/**
 * Model Session
 * 
 */
export type Session = $Result.DefaultSelection<Prisma.$SessionPayload>
/**
 * Model School
 * 
 */
export type School = $Result.DefaultSelection<Prisma.$SchoolPayload>
/**
 * Model Branch
 * 
 */
export type Branch = $Result.DefaultSelection<Prisma.$BranchPayload>
/**
 * Model BranchLevel
 * 
 */
export type BranchLevel = $Result.DefaultSelection<Prisma.$BranchLevelPayload>
/**
 * Model ClassTemplate
 * 
 */
export type ClassTemplate = $Result.DefaultSelection<Prisma.$ClassTemplatePayload>
/**
 * Model SubjectSetup
 * 
 */
export type SubjectSetup = $Result.DefaultSelection<Prisma.$SubjectSetupPayload>
/**
 * Model SchoolSubject
 * 
 */
export type SchoolSubject = $Result.DefaultSelection<Prisma.$SchoolSubjectPayload>
/**
 * Model BranchSession
 * 
 */
export type BranchSession = $Result.DefaultSelection<Prisma.$BranchSessionPayload>
/**
 * Model SchoolSetting
 * 
 */
export type SchoolSetting = $Result.DefaultSelection<Prisma.$SchoolSettingPayload>
/**
 * Model MultimediaGroup
 * 
 */
export type MultimediaGroup = $Result.DefaultSelection<Prisma.$MultimediaGroupPayload>
/**
 * Model Multimedia
 * 
 */
export type Multimedia = $Result.DefaultSelection<Prisma.$MultimediaPayload>
/**
 * Model LibraryBook
 * 
 */
export type LibraryBook = $Result.DefaultSelection<Prisma.$LibraryBookPayload>
/**
 * Model IdCard
 * 
 */
export type IdCard = $Result.DefaultSelection<Prisma.$IdCardPayload>
/**
 * Model LibraryCard
 * 
 */
export type LibraryCard = $Result.DefaultSelection<Prisma.$LibraryCardPayload>
/**
 * Model ResultSerialNumbers
 * 
 */
export type ResultSerialNumbers = $Result.DefaultSelection<Prisma.$ResultSerialNumbersPayload>
/**
 * Model SessionTerm
 * 
 */
export type SessionTerm = $Result.DefaultSelection<Prisma.$SessionTermPayload>
/**
 * Model UserLevel
 * 
 */
export type UserLevel = $Result.DefaultSelection<Prisma.$UserLevelPayload>
/**
 * Model UserTracking
 * 
 */
export type UserTracking = $Result.DefaultSelection<Prisma.$UserTrackingPayload>
/**
 * Model UserTrackingSubject
 * 
 */
export type UserTrackingSubject = $Result.DefaultSelection<Prisma.$UserTrackingSubjectPayload>
/**
 * Model AllUser
 * 
 */
export type AllUser = $Result.DefaultSelection<Prisma.$AllUserPayload>
/**
 * Model User
 * 
 */
export type User = $Result.DefaultSelection<Prisma.$UserPayload>
/**
 * Model Student
 * 
 */
export type Student = $Result.DefaultSelection<Prisma.$StudentPayload>
/**
 * Model Guardian
 * 
 */
export type Guardian = $Result.DefaultSelection<Prisma.$GuardianPayload>
/**
 * Model StudentGuardian
 * 
 */
export type StudentGuardian = $Result.DefaultSelection<Prisma.$StudentGuardianPayload>
/**
 * Model Permission
 * 
 */
export type Permission = $Result.DefaultSelection<Prisma.$PermissionPayload>
/**
 * Model RoleCrudPermission
 * 
 */
export type RoleCrudPermission = $Result.DefaultSelection<Prisma.$RoleCrudPermissionPayload>
/**
 * Model RoleMaxCrudPermissions
 * 
 */
export type RoleMaxCrudPermissions = $Result.DefaultSelection<Prisma.$RoleMaxCrudPermissionsPayload>
/**
 * Model RoleMaxPermission
 * 
 */
export type RoleMaxPermission = $Result.DefaultSelection<Prisma.$RoleMaxPermissionPayload>
/**
 * Model RolePermission
 * 
 */
export type RolePermission = $Result.DefaultSelection<Prisma.$RolePermissionPayload>
/**
 * Model Role
 * 
 */
export type Role = $Result.DefaultSelection<Prisma.$RolePayload>
/**
 * Model UserCrudPermission
 * 
 */
export type UserCrudPermission = $Result.DefaultSelection<Prisma.$UserCrudPermissionPayload>
/**
 * Model UserPermission
 * 
 */
export type UserPermission = $Result.DefaultSelection<Prisma.$UserPermissionPayload>
/**
 * Model UsertypeMaxCrudPermission
 * 
 */
export type UsertypeMaxCrudPermission = $Result.DefaultSelection<Prisma.$UsertypeMaxCrudPermissionPayload>
/**
 * Model UsertypeMaxPermission
 * 
 */
export type UsertypeMaxPermission = $Result.DefaultSelection<Prisma.$UsertypeMaxPermissionPayload>
/**
 * Model Qualification
 * 
 */
export type Qualification = $Result.DefaultSelection<Prisma.$QualificationPayload>
/**
 * Model Gender
 * 
 */
export type Gender = $Result.DefaultSelection<Prisma.$GenderPayload>
/**
 * Model Term
 * 
 */
export type Term = $Result.DefaultSelection<Prisma.$TermPayload>
/**
 * Model Religion
 * 
 */
export type Religion = $Result.DefaultSelection<Prisma.$ReligionPayload>
/**
 * Model ComplainFromTeacher
 * /*********************************************************************************************************************
 * /*********************************************************************************************************************
 */
export type ComplainFromTeacher = $Result.DefaultSelection<Prisma.$ComplainFromTeacherPayload>
/**
 * Model Attendance
 * 
 */
export type Attendance = $Result.DefaultSelection<Prisma.$AttendancePayload>
/**
 * Model SchoolNote
 * 
 */
export type SchoolNote = $Result.DefaultSelection<Prisma.$SchoolNotePayload>
/**
 * Model Fee
 * 
 */
export type Fee = $Result.DefaultSelection<Prisma.$FeePayload>
/**
 * Model PaymentType
 * 
 */
export type PaymentType = $Result.DefaultSelection<Prisma.$PaymentTypePayload>
/**
 * Model PaymentDuration
 * 
 */
export type PaymentDuration = $Result.DefaultSelection<Prisma.$PaymentDurationPayload>
/**
 * Model Payment
 * 
 */
export type Payment = $Result.DefaultSelection<Prisma.$PaymentPayload>
/**
 * Model PaymentMade
 * 
 */
export type PaymentMade = $Result.DefaultSelection<Prisma.$PaymentMadePayload>
/**
 * Model PaymentPartMade
 * 
 */
export type PaymentPartMade = $Result.DefaultSelection<Prisma.$PaymentPartMadePayload>
/**
 * Model PaymentAttempt
 * 
 */
export type PaymentAttempt = $Result.DefaultSelection<Prisma.$PaymentAttemptPayload>
/**
 * Model ClassSubjectTemplate
 * /*********************************************************************************************************************
 * /*********************************************************************************************************************
 */
export type ClassSubjectTemplate = $Result.DefaultSelection<Prisma.$ClassSubjectTemplatePayload>
/**
 * Model SessionClass
 * 
 */
export type SessionClass = $Result.DefaultSelection<Prisma.$SessionClassPayload>
/**
 * Model SessionClassSubject
 * 
 */
export type SessionClassSubject = $Result.DefaultSelection<Prisma.$SessionClassSubjectPayload>
/**
 * Model SessionClassStudentSubject
 * 
 */
export type SessionClassStudentSubject = $Result.DefaultSelection<Prisma.$SessionClassStudentSubjectPayload>
/**
 * Model ClassSpecialization
 * 
 */
export type ClassSpecialization = $Result.DefaultSelection<Prisma.$ClassSpecializationPayload>
/**
 * Model ClassGroup
 * 
 */
export type ClassGroup = $Result.DefaultSelection<Prisma.$ClassGroupPayload>
/**
 * Model ScoreType
 * 
 */
export type ScoreType = $Result.DefaultSelection<Prisma.$ScoreTypePayload>
/**
 * Model ScoreDisplayType
 * 
 */
export type ScoreDisplayType = $Result.DefaultSelection<Prisma.$ScoreDisplayTypePayload>
/**
 * Model StudentScore
 * 
 */
export type StudentScore = $Result.DefaultSelection<Prisma.$StudentScorePayload>
/**
 * Model StudentTotalScore
 * 
 */
export type StudentTotalScore = $Result.DefaultSelection<Prisma.$StudentTotalScorePayload>
/**
 * Model StudentTracking
 * 
 */
export type StudentTracking = $Result.DefaultSelection<Prisma.$StudentTrackingPayload>
/**
 * Model ReportCardSetting
 * 
 */
export type ReportCardSetting = $Result.DefaultSelection<Prisma.$ReportCardSettingPayload>
/**
 * Model ClassScoreSetupTemplate
 * 
 */
export type ClassScoreSetupTemplate = $Result.DefaultSelection<Prisma.$ClassScoreSetupTemplatePayload>
/**
 * Model SessionClassScoreSetup
 * 
 */
export type SessionClassScoreSetup = $Result.DefaultSelection<Prisma.$SessionClassScoreSetupPayload>
/**
 * Model ExamType
 * 
 */
export type ExamType = $Result.DefaultSelection<Prisma.$ExamTypePayload>
/**
 * Model ExamCategory
 * 
 */
export type ExamCategory = $Result.DefaultSelection<Prisma.$ExamCategoryPayload>
/**
 * Model ExamQuestionMarker
 * 
 */
export type ExamQuestionMarker = $Result.DefaultSelection<Prisma.$ExamQuestionMarkerPayload>
/**
 * Model QuestionTemplate
 * 
 */
export type QuestionTemplate = $Result.DefaultSelection<Prisma.$QuestionTemplatePayload>
/**
 * Model Question
 * 
 */
export type Question = $Result.DefaultSelection<Prisma.$QuestionPayload>
/**
 * Model ExamVisibility
 * 
 */
export type ExamVisibility = $Result.DefaultSelection<Prisma.$ExamVisibilityPayload>
/**
 * Model Exam
 * 
 */
export type Exam = $Result.DefaultSelection<Prisma.$ExamPayload>
/**
 * Model ExamQuestion
 * 
 */
export type ExamQuestion = $Result.DefaultSelection<Prisma.$ExamQuestionPayload>
/**
 * Model ExamScoreSetupLink
 * 
 */
export type ExamScoreSetupLink = $Result.DefaultSelection<Prisma.$ExamScoreSetupLinkPayload>
/**
 * Model ExamAttempt
 * 
 */
export type ExamAttempt = $Result.DefaultSelection<Prisma.$ExamAttemptPayload>
/**
 * Model ExamQuestionAnswer
 * 
 */
export type ExamQuestionAnswer = $Result.DefaultSelection<Prisma.$ExamQuestionAnswerPayload>
/**
 * Model ExamGift
 * 
 */
export type ExamGift = $Result.DefaultSelection<Prisma.$ExamGiftPayload>
/**
 * Model SchoolRecord
 * 
 */
export type SchoolRecord = $Result.DefaultSelection<Prisma.$SchoolRecordPayload>
/**
 * Model ComponentGroup
 * 
 */
export type ComponentGroup = $Result.DefaultSelection<Prisma.$ComponentGroupPayload>
/**
 * Model Component
 * 
 */
export type Component = $Result.DefaultSelection<Prisma.$ComponentPayload>
/**
 * Model CrudPage
 * 
 */
export type CrudPage = $Result.DefaultSelection<Prisma.$CrudPagePayload>
/**
 * Model AppUserType
 * 
 */
export type AppUserType = $Result.DefaultSelection<Prisma.$AppUserTypePayload>
/**
 * Model MenuGroup
 * 
 */
export type MenuGroup = $Result.DefaultSelection<Prisma.$MenuGroupPayload>
/**
 * Model SystemConfiguration
 * 
 */
export type SystemConfiguration = $Result.DefaultSelection<Prisma.$SystemConfigurationPayload>
/**
 * Model CrudFront
 * 
 */
export type CrudFront = $Result.DefaultSelection<Prisma.$CrudFrontPayload>
/**
 * Model CrudUtil
 * 
 */
export type CrudUtil = $Result.DefaultSelection<Prisma.$CrudUtilPayload>
/**
 * Model Region
 * 
 */
export type Region = $Result.DefaultSelection<Prisma.$RegionPayload>
/**
 * Model Subregion
 * 
 */
export type Subregion = $Result.DefaultSelection<Prisma.$SubregionPayload>
/**
 * Model Country
 * 
 */
export type Country = $Result.DefaultSelection<Prisma.$CountryPayload>
/**
 * Model State
 * 
 */
export type State = $Result.DefaultSelection<Prisma.$StatePayload>
/**
 * Model City
 * 
 */
export type City = $Result.DefaultSelection<Prisma.$CityPayload>
/**
 * Model TableLog
 * 
 */
export type TableLog = $Result.DefaultSelection<Prisma.$TableLogPayload>

/**
 * Enums
 */
export namespace $Enums {
  export const users_staff_dept: {
  teaching: 'teaching',
  grading: 'grading',
  office: 'office',
  store: 'store',
  security: 'security',
  invisible: 'invisible'
};

export type users_staff_dept = (typeof users_staff_dept)[keyof typeof users_staff_dept]


export const users_type: {
  user: 'user',
  student: 'student',
  guardian: 'guardian'
};

export type users_type = (typeof users_type)[keyof typeof users_type]


export const book_type: {
  physical: 'physical',
  pdf: 'pdf'
};

export type book_type = (typeof book_type)[keyof typeof book_type]

}

export type users_staff_dept = $Enums.users_staff_dept

export const users_staff_dept: typeof $Enums.users_staff_dept

export type users_type = $Enums.users_type

export const users_type: typeof $Enums.users_type

export type book_type = $Enums.book_type

export const book_type: typeof $Enums.book_type

/**
 * ##  Prisma Client ʲˢ
 *
 * Type-safe database client for TypeScript & Node.js
 * @example
 * ```
 * const prisma = new PrismaClient()
 * // Fetch zero or more Sessions
 * const sessions = await prisma.session.findMany()
 * ```
 *
 *
 * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
 */
export class PrismaClient<
  ClientOptions extends Prisma.PrismaClientOptions = Prisma.PrismaClientOptions,
  U = 'log' extends keyof ClientOptions ? ClientOptions['log'] extends Array<Prisma.LogLevel | Prisma.LogDefinition> ? Prisma.GetEvents<ClientOptions['log']> : never : never,
  ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs
> {
  [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['other'] }

    /**
   * ##  Prisma Client ʲˢ
   *
   * Type-safe database client for TypeScript & Node.js
   * @example
   * ```
   * const prisma = new PrismaClient()
   * // Fetch zero or more Sessions
   * const sessions = await prisma.session.findMany()
   * ```
   *
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client).
   */

  constructor(optionsArg ?: Prisma.Subset<ClientOptions, Prisma.PrismaClientOptions>);
  $on<V extends U>(eventType: V, callback: (event: V extends 'query' ? Prisma.QueryEvent : Prisma.LogEvent) => void): PrismaClient;

  /**
   * Connect with the database
   */
  $connect(): $Utils.JsPromise<void>;

  /**
   * Disconnect from the database
   */
  $disconnect(): $Utils.JsPromise<void>;

  /**
   * Add a middleware
   * @deprecated since 4.16.0. For new code, prefer client extensions instead.
   * @see https://pris.ly/d/extensions
   */
  $use(cb: Prisma.Middleware): void

/**
   * Executes a prepared raw query and returns the number of affected rows.
   * @example
   * ```
   * const result = await prisma.$executeRaw`UPDATE User SET cool = ${true} WHERE email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $executeRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Executes a raw query and returns the number of affected rows.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$executeRawUnsafe('UPDATE User SET cool = $1 WHERE email = $2 ;', true, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $executeRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<number>;

  /**
   * Performs a prepared raw query and returns the `SELECT` data.
   * @example
   * ```
   * const result = await prisma.$queryRaw`SELECT * FROM User WHERE id = ${1} OR email = ${'user@email.com'};`
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $queryRaw<T = unknown>(query: TemplateStringsArray | Prisma.Sql, ...values: any[]): Prisma.PrismaPromise<T>;

  /**
   * Performs a raw query and returns the `SELECT` data.
   * Susceptible to SQL injections, see documentation.
   * @example
   * ```
   * const result = await prisma.$queryRawUnsafe('SELECT * FROM User WHERE id = $1 OR email = $2;', 1, 'user@email.com')
   * ```
   *
   * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/raw-database-access).
   */
  $queryRawUnsafe<T = unknown>(query: string, ...values: any[]): Prisma.PrismaPromise<T>;


  /**
   * Allows the running of a sequence of read/write operations that are guaranteed to either succeed or fail as a whole.
   * @example
   * ```
   * const [george, bob, alice] = await prisma.$transaction([
   *   prisma.user.create({ data: { name: 'George' } }),
   *   prisma.user.create({ data: { name: 'Bob' } }),
   *   prisma.user.create({ data: { name: 'Alice' } }),
   * ])
   * ```
   * 
   * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions).
   */
  $transaction<P extends Prisma.PrismaPromise<any>[]>(arg: [...P], options?: { isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<runtime.Types.Utils.UnwrapTuple<P>>

  $transaction<R>(fn: (prisma: Omit<PrismaClient, runtime.ITXClientDenyList>) => $Utils.JsPromise<R>, options?: { maxWait?: number, timeout?: number, isolationLevel?: Prisma.TransactionIsolationLevel }): $Utils.JsPromise<R>


  $extends: $Extensions.ExtendsHook<"extends", Prisma.TypeMapCb<ClientOptions>, ExtArgs, $Utils.Call<Prisma.TypeMapCb<ClientOptions>, {
    extArgs: ExtArgs
  }>>

      /**
   * `prisma.session`: Exposes CRUD operations for the **Session** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Sessions
    * const sessions = await prisma.session.findMany()
    * ```
    */
  get session(): Prisma.SessionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.school`: Exposes CRUD operations for the **School** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Schools
    * const schools = await prisma.school.findMany()
    * ```
    */
  get school(): Prisma.SchoolDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.branch`: Exposes CRUD operations for the **Branch** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Branches
    * const branches = await prisma.branch.findMany()
    * ```
    */
  get branch(): Prisma.BranchDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.branchLevel`: Exposes CRUD operations for the **BranchLevel** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more BranchLevels
    * const branchLevels = await prisma.branchLevel.findMany()
    * ```
    */
  get branchLevel(): Prisma.BranchLevelDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.classTemplate`: Exposes CRUD operations for the **ClassTemplate** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ClassTemplates
    * const classTemplates = await prisma.classTemplate.findMany()
    * ```
    */
  get classTemplate(): Prisma.ClassTemplateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.subjectSetup`: Exposes CRUD operations for the **SubjectSetup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SubjectSetups
    * const subjectSetups = await prisma.subjectSetup.findMany()
    * ```
    */
  get subjectSetup(): Prisma.SubjectSetupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.schoolSubject`: Exposes CRUD operations for the **SchoolSubject** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SchoolSubjects
    * const schoolSubjects = await prisma.schoolSubject.findMany()
    * ```
    */
  get schoolSubject(): Prisma.SchoolSubjectDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.branchSession`: Exposes CRUD operations for the **BranchSession** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more BranchSessions
    * const branchSessions = await prisma.branchSession.findMany()
    * ```
    */
  get branchSession(): Prisma.BranchSessionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.schoolSetting`: Exposes CRUD operations for the **SchoolSetting** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SchoolSettings
    * const schoolSettings = await prisma.schoolSetting.findMany()
    * ```
    */
  get schoolSetting(): Prisma.SchoolSettingDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.multimediaGroup`: Exposes CRUD operations for the **MultimediaGroup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more MultimediaGroups
    * const multimediaGroups = await prisma.multimediaGroup.findMany()
    * ```
    */
  get multimediaGroup(): Prisma.MultimediaGroupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.multimedia`: Exposes CRUD operations for the **Multimedia** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Multimedias
    * const multimedias = await prisma.multimedia.findMany()
    * ```
    */
  get multimedia(): Prisma.MultimediaDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.libraryBook`: Exposes CRUD operations for the **LibraryBook** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more LibraryBooks
    * const libraryBooks = await prisma.libraryBook.findMany()
    * ```
    */
  get libraryBook(): Prisma.LibraryBookDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.idCard`: Exposes CRUD operations for the **IdCard** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more IdCards
    * const idCards = await prisma.idCard.findMany()
    * ```
    */
  get idCard(): Prisma.IdCardDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.libraryCard`: Exposes CRUD operations for the **LibraryCard** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more LibraryCards
    * const libraryCards = await prisma.libraryCard.findMany()
    * ```
    */
  get libraryCard(): Prisma.LibraryCardDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.resultSerialNumbers`: Exposes CRUD operations for the **ResultSerialNumbers** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ResultSerialNumbers
    * const resultSerialNumbers = await prisma.resultSerialNumbers.findMany()
    * ```
    */
  get resultSerialNumbers(): Prisma.ResultSerialNumbersDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.sessionTerm`: Exposes CRUD operations for the **SessionTerm** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SessionTerms
    * const sessionTerms = await prisma.sessionTerm.findMany()
    * ```
    */
  get sessionTerm(): Prisma.SessionTermDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userLevel`: Exposes CRUD operations for the **UserLevel** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserLevels
    * const userLevels = await prisma.userLevel.findMany()
    * ```
    */
  get userLevel(): Prisma.UserLevelDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userTracking`: Exposes CRUD operations for the **UserTracking** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserTrackings
    * const userTrackings = await prisma.userTracking.findMany()
    * ```
    */
  get userTracking(): Prisma.UserTrackingDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userTrackingSubject`: Exposes CRUD operations for the **UserTrackingSubject** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserTrackingSubjects
    * const userTrackingSubjects = await prisma.userTrackingSubject.findMany()
    * ```
    */
  get userTrackingSubject(): Prisma.UserTrackingSubjectDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.allUser`: Exposes CRUD operations for the **AllUser** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more AllUsers
    * const allUsers = await prisma.allUser.findMany()
    * ```
    */
  get allUser(): Prisma.AllUserDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.user`: Exposes CRUD operations for the **User** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Users
    * const users = await prisma.user.findMany()
    * ```
    */
  get user(): Prisma.UserDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.student`: Exposes CRUD operations for the **Student** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Students
    * const students = await prisma.student.findMany()
    * ```
    */
  get student(): Prisma.StudentDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.guardian`: Exposes CRUD operations for the **Guardian** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Guardians
    * const guardians = await prisma.guardian.findMany()
    * ```
    */
  get guardian(): Prisma.GuardianDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.studentGuardian`: Exposes CRUD operations for the **StudentGuardian** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more StudentGuardians
    * const studentGuardians = await prisma.studentGuardian.findMany()
    * ```
    */
  get studentGuardian(): Prisma.StudentGuardianDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.permission`: Exposes CRUD operations for the **Permission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Permissions
    * const permissions = await prisma.permission.findMany()
    * ```
    */
  get permission(): Prisma.PermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.roleCrudPermission`: Exposes CRUD operations for the **RoleCrudPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more RoleCrudPermissions
    * const roleCrudPermissions = await prisma.roleCrudPermission.findMany()
    * ```
    */
  get roleCrudPermission(): Prisma.RoleCrudPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.roleMaxCrudPermissions`: Exposes CRUD operations for the **RoleMaxCrudPermissions** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more RoleMaxCrudPermissions
    * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findMany()
    * ```
    */
  get roleMaxCrudPermissions(): Prisma.RoleMaxCrudPermissionsDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.roleMaxPermission`: Exposes CRUD operations for the **RoleMaxPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more RoleMaxPermissions
    * const roleMaxPermissions = await prisma.roleMaxPermission.findMany()
    * ```
    */
  get roleMaxPermission(): Prisma.RoleMaxPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.rolePermission`: Exposes CRUD operations for the **RolePermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more RolePermissions
    * const rolePermissions = await prisma.rolePermission.findMany()
    * ```
    */
  get rolePermission(): Prisma.RolePermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.role`: Exposes CRUD operations for the **Role** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Roles
    * const roles = await prisma.role.findMany()
    * ```
    */
  get role(): Prisma.RoleDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userCrudPermission`: Exposes CRUD operations for the **UserCrudPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserCrudPermissions
    * const userCrudPermissions = await prisma.userCrudPermission.findMany()
    * ```
    */
  get userCrudPermission(): Prisma.UserCrudPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.userPermission`: Exposes CRUD operations for the **UserPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UserPermissions
    * const userPermissions = await prisma.userPermission.findMany()
    * ```
    */
  get userPermission(): Prisma.UserPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.usertypeMaxCrudPermission`: Exposes CRUD operations for the **UsertypeMaxCrudPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UsertypeMaxCrudPermissions
    * const usertypeMaxCrudPermissions = await prisma.usertypeMaxCrudPermission.findMany()
    * ```
    */
  get usertypeMaxCrudPermission(): Prisma.UsertypeMaxCrudPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.usertypeMaxPermission`: Exposes CRUD operations for the **UsertypeMaxPermission** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more UsertypeMaxPermissions
    * const usertypeMaxPermissions = await prisma.usertypeMaxPermission.findMany()
    * ```
    */
  get usertypeMaxPermission(): Prisma.UsertypeMaxPermissionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.qualification`: Exposes CRUD operations for the **Qualification** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Qualifications
    * const qualifications = await prisma.qualification.findMany()
    * ```
    */
  get qualification(): Prisma.QualificationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.gender`: Exposes CRUD operations for the **Gender** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Genders
    * const genders = await prisma.gender.findMany()
    * ```
    */
  get gender(): Prisma.GenderDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.term`: Exposes CRUD operations for the **Term** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Terms
    * const terms = await prisma.term.findMany()
    * ```
    */
  get term(): Prisma.TermDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.religion`: Exposes CRUD operations for the **Religion** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Religions
    * const religions = await prisma.religion.findMany()
    * ```
    */
  get religion(): Prisma.ReligionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.complainFromTeacher`: Exposes CRUD operations for the **ComplainFromTeacher** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ComplainFromTeachers
    * const complainFromTeachers = await prisma.complainFromTeacher.findMany()
    * ```
    */
  get complainFromTeacher(): Prisma.ComplainFromTeacherDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.attendance`: Exposes CRUD operations for the **Attendance** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Attendances
    * const attendances = await prisma.attendance.findMany()
    * ```
    */
  get attendance(): Prisma.AttendanceDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.schoolNote`: Exposes CRUD operations for the **SchoolNote** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SchoolNotes
    * const schoolNotes = await prisma.schoolNote.findMany()
    * ```
    */
  get schoolNote(): Prisma.SchoolNoteDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.fee`: Exposes CRUD operations for the **Fee** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Fees
    * const fees = await prisma.fee.findMany()
    * ```
    */
  get fee(): Prisma.FeeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.paymentType`: Exposes CRUD operations for the **PaymentType** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more PaymentTypes
    * const paymentTypes = await prisma.paymentType.findMany()
    * ```
    */
  get paymentType(): Prisma.PaymentTypeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.paymentDuration`: Exposes CRUD operations for the **PaymentDuration** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more PaymentDurations
    * const paymentDurations = await prisma.paymentDuration.findMany()
    * ```
    */
  get paymentDuration(): Prisma.PaymentDurationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.payment`: Exposes CRUD operations for the **Payment** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Payments
    * const payments = await prisma.payment.findMany()
    * ```
    */
  get payment(): Prisma.PaymentDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.paymentMade`: Exposes CRUD operations for the **PaymentMade** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more PaymentMades
    * const paymentMades = await prisma.paymentMade.findMany()
    * ```
    */
  get paymentMade(): Prisma.PaymentMadeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.paymentPartMade`: Exposes CRUD operations for the **PaymentPartMade** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more PaymentPartMades
    * const paymentPartMades = await prisma.paymentPartMade.findMany()
    * ```
    */
  get paymentPartMade(): Prisma.PaymentPartMadeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.paymentAttempt`: Exposes CRUD operations for the **PaymentAttempt** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more PaymentAttempts
    * const paymentAttempts = await prisma.paymentAttempt.findMany()
    * ```
    */
  get paymentAttempt(): Prisma.PaymentAttemptDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.classSubjectTemplate`: Exposes CRUD operations for the **ClassSubjectTemplate** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ClassSubjectTemplates
    * const classSubjectTemplates = await prisma.classSubjectTemplate.findMany()
    * ```
    */
  get classSubjectTemplate(): Prisma.ClassSubjectTemplateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.sessionClass`: Exposes CRUD operations for the **SessionClass** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SessionClasses
    * const sessionClasses = await prisma.sessionClass.findMany()
    * ```
    */
  get sessionClass(): Prisma.SessionClassDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.sessionClassSubject`: Exposes CRUD operations for the **SessionClassSubject** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SessionClassSubjects
    * const sessionClassSubjects = await prisma.sessionClassSubject.findMany()
    * ```
    */
  get sessionClassSubject(): Prisma.SessionClassSubjectDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.sessionClassStudentSubject`: Exposes CRUD operations for the **SessionClassStudentSubject** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SessionClassStudentSubjects
    * const sessionClassStudentSubjects = await prisma.sessionClassStudentSubject.findMany()
    * ```
    */
  get sessionClassStudentSubject(): Prisma.SessionClassStudentSubjectDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.classSpecialization`: Exposes CRUD operations for the **ClassSpecialization** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ClassSpecializations
    * const classSpecializations = await prisma.classSpecialization.findMany()
    * ```
    */
  get classSpecialization(): Prisma.ClassSpecializationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.classGroup`: Exposes CRUD operations for the **ClassGroup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ClassGroups
    * const classGroups = await prisma.classGroup.findMany()
    * ```
    */
  get classGroup(): Prisma.ClassGroupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.scoreType`: Exposes CRUD operations for the **ScoreType** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ScoreTypes
    * const scoreTypes = await prisma.scoreType.findMany()
    * ```
    */
  get scoreType(): Prisma.ScoreTypeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.scoreDisplayType`: Exposes CRUD operations for the **ScoreDisplayType** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ScoreDisplayTypes
    * const scoreDisplayTypes = await prisma.scoreDisplayType.findMany()
    * ```
    */
  get scoreDisplayType(): Prisma.ScoreDisplayTypeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.studentScore`: Exposes CRUD operations for the **StudentScore** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more StudentScores
    * const studentScores = await prisma.studentScore.findMany()
    * ```
    */
  get studentScore(): Prisma.StudentScoreDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.studentTotalScore`: Exposes CRUD operations for the **StudentTotalScore** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more StudentTotalScores
    * const studentTotalScores = await prisma.studentTotalScore.findMany()
    * ```
    */
  get studentTotalScore(): Prisma.StudentTotalScoreDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.studentTracking`: Exposes CRUD operations for the **StudentTracking** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more StudentTrackings
    * const studentTrackings = await prisma.studentTracking.findMany()
    * ```
    */
  get studentTracking(): Prisma.StudentTrackingDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.reportCardSetting`: Exposes CRUD operations for the **ReportCardSetting** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ReportCardSettings
    * const reportCardSettings = await prisma.reportCardSetting.findMany()
    * ```
    */
  get reportCardSetting(): Prisma.ReportCardSettingDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.classScoreSetupTemplate`: Exposes CRUD operations for the **ClassScoreSetupTemplate** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ClassScoreSetupTemplates
    * const classScoreSetupTemplates = await prisma.classScoreSetupTemplate.findMany()
    * ```
    */
  get classScoreSetupTemplate(): Prisma.ClassScoreSetupTemplateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.sessionClassScoreSetup`: Exposes CRUD operations for the **SessionClassScoreSetup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SessionClassScoreSetups
    * const sessionClassScoreSetups = await prisma.sessionClassScoreSetup.findMany()
    * ```
    */
  get sessionClassScoreSetup(): Prisma.SessionClassScoreSetupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examType`: Exposes CRUD operations for the **ExamType** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamTypes
    * const examTypes = await prisma.examType.findMany()
    * ```
    */
  get examType(): Prisma.ExamTypeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examCategory`: Exposes CRUD operations for the **ExamCategory** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamCategories
    * const examCategories = await prisma.examCategory.findMany()
    * ```
    */
  get examCategory(): Prisma.ExamCategoryDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examQuestionMarker`: Exposes CRUD operations for the **ExamQuestionMarker** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamQuestionMarkers
    * const examQuestionMarkers = await prisma.examQuestionMarker.findMany()
    * ```
    */
  get examQuestionMarker(): Prisma.ExamQuestionMarkerDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.questionTemplate`: Exposes CRUD operations for the **QuestionTemplate** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more QuestionTemplates
    * const questionTemplates = await prisma.questionTemplate.findMany()
    * ```
    */
  get questionTemplate(): Prisma.QuestionTemplateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.question`: Exposes CRUD operations for the **Question** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Questions
    * const questions = await prisma.question.findMany()
    * ```
    */
  get question(): Prisma.QuestionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examVisibility`: Exposes CRUD operations for the **ExamVisibility** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamVisibilities
    * const examVisibilities = await prisma.examVisibility.findMany()
    * ```
    */
  get examVisibility(): Prisma.ExamVisibilityDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.exam`: Exposes CRUD operations for the **Exam** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Exams
    * const exams = await prisma.exam.findMany()
    * ```
    */
  get exam(): Prisma.ExamDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examQuestion`: Exposes CRUD operations for the **ExamQuestion** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamQuestions
    * const examQuestions = await prisma.examQuestion.findMany()
    * ```
    */
  get examQuestion(): Prisma.ExamQuestionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examScoreSetupLink`: Exposes CRUD operations for the **ExamScoreSetupLink** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamScoreSetupLinks
    * const examScoreSetupLinks = await prisma.examScoreSetupLink.findMany()
    * ```
    */
  get examScoreSetupLink(): Prisma.ExamScoreSetupLinkDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examAttempt`: Exposes CRUD operations for the **ExamAttempt** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamAttempts
    * const examAttempts = await prisma.examAttempt.findMany()
    * ```
    */
  get examAttempt(): Prisma.ExamAttemptDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examQuestionAnswer`: Exposes CRUD operations for the **ExamQuestionAnswer** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamQuestionAnswers
    * const examQuestionAnswers = await prisma.examQuestionAnswer.findMany()
    * ```
    */
  get examQuestionAnswer(): Prisma.ExamQuestionAnswerDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.examGift`: Exposes CRUD operations for the **ExamGift** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ExamGifts
    * const examGifts = await prisma.examGift.findMany()
    * ```
    */
  get examGift(): Prisma.ExamGiftDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.schoolRecord`: Exposes CRUD operations for the **SchoolRecord** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SchoolRecords
    * const schoolRecords = await prisma.schoolRecord.findMany()
    * ```
    */
  get schoolRecord(): Prisma.SchoolRecordDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.componentGroup`: Exposes CRUD operations for the **ComponentGroup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more ComponentGroups
    * const componentGroups = await prisma.componentGroup.findMany()
    * ```
    */
  get componentGroup(): Prisma.ComponentGroupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.component`: Exposes CRUD operations for the **Component** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Components
    * const components = await prisma.component.findMany()
    * ```
    */
  get component(): Prisma.ComponentDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.crudPage`: Exposes CRUD operations for the **CrudPage** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more CrudPages
    * const crudPages = await prisma.crudPage.findMany()
    * ```
    */
  get crudPage(): Prisma.CrudPageDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.appUserType`: Exposes CRUD operations for the **AppUserType** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more AppUserTypes
    * const appUserTypes = await prisma.appUserType.findMany()
    * ```
    */
  get appUserType(): Prisma.AppUserTypeDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.menuGroup`: Exposes CRUD operations for the **MenuGroup** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more MenuGroups
    * const menuGroups = await prisma.menuGroup.findMany()
    * ```
    */
  get menuGroup(): Prisma.MenuGroupDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.systemConfiguration`: Exposes CRUD operations for the **SystemConfiguration** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more SystemConfigurations
    * const systemConfigurations = await prisma.systemConfiguration.findMany()
    * ```
    */
  get systemConfiguration(): Prisma.SystemConfigurationDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.crudFront`: Exposes CRUD operations for the **CrudFront** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more CrudFronts
    * const crudFronts = await prisma.crudFront.findMany()
    * ```
    */
  get crudFront(): Prisma.CrudFrontDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.crudUtil`: Exposes CRUD operations for the **CrudUtil** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more CrudUtils
    * const crudUtils = await prisma.crudUtil.findMany()
    * ```
    */
  get crudUtil(): Prisma.CrudUtilDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.region`: Exposes CRUD operations for the **Region** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Regions
    * const regions = await prisma.region.findMany()
    * ```
    */
  get region(): Prisma.RegionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.subregion`: Exposes CRUD operations for the **Subregion** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Subregions
    * const subregions = await prisma.subregion.findMany()
    * ```
    */
  get subregion(): Prisma.SubregionDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.country`: Exposes CRUD operations for the **Country** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Countries
    * const countries = await prisma.country.findMany()
    * ```
    */
  get country(): Prisma.CountryDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.state`: Exposes CRUD operations for the **State** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more States
    * const states = await prisma.state.findMany()
    * ```
    */
  get state(): Prisma.StateDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.city`: Exposes CRUD operations for the **City** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more Cities
    * const cities = await prisma.city.findMany()
    * ```
    */
  get city(): Prisma.CityDelegate<ExtArgs, ClientOptions>;

  /**
   * `prisma.tableLog`: Exposes CRUD operations for the **TableLog** model.
    * Example usage:
    * ```ts
    * // Fetch zero or more TableLogs
    * const tableLogs = await prisma.tableLog.findMany()
    * ```
    */
  get tableLog(): Prisma.TableLogDelegate<ExtArgs, ClientOptions>;
}

export namespace Prisma {
  export import DMMF = runtime.DMMF

  export type PrismaPromise<T> = $Public.PrismaPromise<T>

  /**
   * Validator
   */
  export import validator = runtime.Public.validator

  /**
   * Prisma Errors
   */
  export import PrismaClientKnownRequestError = runtime.PrismaClientKnownRequestError
  export import PrismaClientUnknownRequestError = runtime.PrismaClientUnknownRequestError
  export import PrismaClientRustPanicError = runtime.PrismaClientRustPanicError
  export import PrismaClientInitializationError = runtime.PrismaClientInitializationError
  export import PrismaClientValidationError = runtime.PrismaClientValidationError

  /**
   * Re-export of sql-template-tag
   */
  export import sql = runtime.sqltag
  export import empty = runtime.empty
  export import join = runtime.join
  export import raw = runtime.raw
  export import Sql = runtime.Sql



  /**
   * Decimal.js
   */
  export import Decimal = runtime.Decimal

  export type DecimalJsLike = runtime.DecimalJsLike

  /**
   * Metrics
   */
  export type Metrics = runtime.Metrics
  export type Metric<T> = runtime.Metric<T>
  export type MetricHistogram = runtime.MetricHistogram
  export type MetricHistogramBucket = runtime.MetricHistogramBucket

  /**
  * Extensions
  */
  export import Extension = $Extensions.UserArgs
  export import getExtensionContext = runtime.Extensions.getExtensionContext
  export import Args = $Public.Args
  export import Payload = $Public.Payload
  export import Result = $Public.Result
  export import Exact = $Public.Exact

  /**
   * Prisma Client JS version: 6.7.0
   * Query Engine version: 3cff47a7f5d65c3ea74883f1d736e41d68ce91ed
   */
  export type PrismaVersion = {
    client: string
  }

  export const prismaVersion: PrismaVersion

  /**
   * Utility Types
   */


  export import JsonObject = runtime.JsonObject
  export import JsonArray = runtime.JsonArray
  export import JsonValue = runtime.JsonValue
  export import InputJsonObject = runtime.InputJsonObject
  export import InputJsonArray = runtime.InputJsonArray
  export import InputJsonValue = runtime.InputJsonValue

  /**
   * Types of the values used to represent different kinds of `null` values when working with JSON fields.
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  namespace NullTypes {
    /**
    * Type of `Prisma.DbNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.DbNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class DbNull {
      private DbNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.JsonNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.JsonNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class JsonNull {
      private JsonNull: never
      private constructor()
    }

    /**
    * Type of `Prisma.AnyNull`.
    *
    * You cannot use other instances of this class. Please use the `Prisma.AnyNull` value.
    *
    * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
    */
    class AnyNull {
      private AnyNull: never
      private constructor()
    }
  }

  /**
   * Helper for filtering JSON entries that have `null` on the database (empty on the db)
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const DbNull: NullTypes.DbNull

  /**
   * Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const JsonNull: NullTypes.JsonNull

  /**
   * Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
   *
   * @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
   */
  export const AnyNull: NullTypes.AnyNull

  type SelectAndInclude = {
    select: any
    include: any
  }

  type SelectAndOmit = {
    select: any
    omit: any
  }

  /**
   * Get the type of the value, that the Promise holds.
   */
  export type PromiseType<T extends PromiseLike<any>> = T extends PromiseLike<infer U> ? U : T;

  /**
   * Get the return type of a function which returns a Promise.
   */
  export type PromiseReturnType<T extends (...args: any) => $Utils.JsPromise<any>> = PromiseType<ReturnType<T>>

  /**
   * From T, pick a set of properties whose keys are in the union K
   */
  type Prisma__Pick<T, K extends keyof T> = {
      [P in K]: T[P];
  };


  export type Enumerable<T> = T | Array<T>;

  export type RequiredKeys<T> = {
    [K in keyof T]-?: {} extends Prisma__Pick<T, K> ? never : K
  }[keyof T]

  export type TruthyKeys<T> = keyof {
    [K in keyof T as T[K] extends false | undefined | null ? never : K]: K
  }

  export type TrueKeys<T> = TruthyKeys<Prisma__Pick<T, RequiredKeys<T>>>

  /**
   * Subset
   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection
   */
  export type Subset<T, U> = {
    [key in keyof T]: key extends keyof U ? T[key] : never;
  };

  /**
   * SelectSubset
   * @desc From `T` pick properties that exist in `U`. Simple version of Intersection.
   * Additionally, it validates, if both select and include are present. If the case, it errors.
   */
  export type SelectSubset<T, U> = {
    [key in keyof T]: key extends keyof U ? T[key] : never
  } &
    (T extends SelectAndInclude
      ? 'Please either choose `select` or `include`.'
      : T extends SelectAndOmit
        ? 'Please either choose `select` or `omit`.'
        : {})

  /**
   * Subset + Intersection
   * @desc From `T` pick properties that exist in `U` and intersect `K`
   */
  export type SubsetIntersection<T, U, K> = {
    [key in keyof T]: key extends keyof U ? T[key] : never
  } &
    K

  type Without<T, U> = { [P in Exclude<keyof T, keyof U>]?: never };

  /**
   * XOR is needed to have a real mutually exclusive union type
   * https://stackoverflow.com/questions/42123407/does-typescript-support-mutually-exclusive-types
   */
  type XOR<T, U> =
    T extends object ?
    U extends object ?
      (Without<T, U> & U) | (Without<U, T> & T)
    : U : T


  /**
   * Is T a Record?
   */
  type IsObject<T extends any> = T extends Array<any>
  ? False
  : T extends Date
  ? False
  : T extends Uint8Array
  ? False
  : T extends BigInt
  ? False
  : T extends object
  ? True
  : False


  /**
   * If it's T[], return T
   */
  export type UnEnumerate<T extends unknown> = T extends Array<infer U> ? U : T

  /**
   * From ts-toolbelt
   */

  type __Either<O extends object, K extends Key> = Omit<O, K> &
    {
      // Merge all but K
      [P in K]: Prisma__Pick<O, P & keyof O> // With K possibilities
    }[K]

  type EitherStrict<O extends object, K extends Key> = Strict<__Either<O, K>>

  type EitherLoose<O extends object, K extends Key> = ComputeRaw<__Either<O, K>>

  type _Either<
    O extends object,
    K extends Key,
    strict extends Boolean
  > = {
    1: EitherStrict<O, K>
    0: EitherLoose<O, K>
  }[strict]

  type Either<
    O extends object,
    K extends Key,
    strict extends Boolean = 1
  > = O extends unknown ? _Either<O, K, strict> : never

  export type Union = any

  type PatchUndefined<O extends object, O1 extends object> = {
    [K in keyof O]: O[K] extends undefined ? At<O1, K> : O[K]
  } & {}

  /** Helper Types for "Merge" **/
  export type IntersectOf<U extends Union> = (
    U extends unknown ? (k: U) => void : never
  ) extends (k: infer I) => void
    ? I
    : never

  export type Overwrite<O extends object, O1 extends object> = {
      [K in keyof O]: K extends keyof O1 ? O1[K] : O[K];
  } & {};

  type _Merge<U extends object> = IntersectOf<Overwrite<U, {
      [K in keyof U]-?: At<U, K>;
  }>>;

  type Key = string | number | symbol;
  type AtBasic<O extends object, K extends Key> = K extends keyof O ? O[K] : never;
  type AtStrict<O extends object, K extends Key> = O[K & keyof O];
  type AtLoose<O extends object, K extends Key> = O extends unknown ? AtStrict<O, K> : never;
  export type At<O extends object, K extends Key, strict extends Boolean = 1> = {
      1: AtStrict<O, K>;
      0: AtLoose<O, K>;
  }[strict];

  export type ComputeRaw<A extends any> = A extends Function ? A : {
    [K in keyof A]: A[K];
  } & {};

  export type OptionalFlat<O> = {
    [K in keyof O]?: O[K];
  } & {};

  type _Record<K extends keyof any, T> = {
    [P in K]: T;
  };

  // cause typescript not to expand types and preserve names
  type NoExpand<T> = T extends unknown ? T : never;

  // this type assumes the passed object is entirely optional
  type AtLeast<O extends object, K extends string> = NoExpand<
    O extends unknown
    ? | (K extends keyof O ? { [P in K]: O[P] } & O : O)
      | {[P in keyof O as P extends K ? P : never]-?: O[P]} & O
    : never>;

  type _Strict<U, _U = U> = U extends unknown ? U & OptionalFlat<_Record<Exclude<Keys<_U>, keyof U>, never>> : never;

  export type Strict<U extends object> = ComputeRaw<_Strict<U>>;
  /** End Helper Types for "Merge" **/

  export type Merge<U extends object> = ComputeRaw<_Merge<Strict<U>>>;

  /**
  A [[Boolean]]
  */
  export type Boolean = True | False

  // /**
  // 1
  // */
  export type True = 1

  /**
  0
  */
  export type False = 0

  export type Not<B extends Boolean> = {
    0: 1
    1: 0
  }[B]

  export type Extends<A1 extends any, A2 extends any> = [A1] extends [never]
    ? 0 // anything `never` is false
    : A1 extends A2
    ? 1
    : 0

  export type Has<U extends Union, U1 extends Union> = Not<
    Extends<Exclude<U1, U>, U1>
  >

  export type Or<B1 extends Boolean, B2 extends Boolean> = {
    0: {
      0: 0
      1: 1
    }
    1: {
      0: 1
      1: 1
    }
  }[B1][B2]

  export type Keys<U extends Union> = U extends unknown ? keyof U : never

  type Cast<A, B> = A extends B ? A : B;

  export const type: unique symbol;



  /**
   * Used by group by
   */

  export type GetScalarType<T, O> = O extends object ? {
    [P in keyof T]: P extends keyof O
      ? O[P]
      : never
  } : never

  type FieldPaths<
    T,
    U = Omit<T, '_avg' | '_sum' | '_count' | '_min' | '_max'>
  > = IsObject<T> extends True ? U : T

  type GetHavingFields<T> = {
    [K in keyof T]: Or<
      Or<Extends<'OR', K>, Extends<'AND', K>>,
      Extends<'NOT', K>
    > extends True
      ? // infer is only needed to not hit TS limit
        // based on the brilliant idea of Pierre-Antoine Mills
        // https://github.com/microsoft/TypeScript/issues/30188#issuecomment-478938437
        T[K] extends infer TK
        ? GetHavingFields<UnEnumerate<TK> extends object ? Merge<UnEnumerate<TK>> : never>
        : never
      : {} extends FieldPaths<T[K]>
      ? never
      : K
  }[keyof T]

  /**
   * Convert tuple to union
   */
  type _TupleToUnion<T> = T extends (infer E)[] ? E : never
  type TupleToUnion<K extends readonly any[]> = _TupleToUnion<K>
  type MaybeTupleToUnion<T> = T extends any[] ? TupleToUnion<T> : T

  /**
   * Like `Pick`, but additionally can also accept an array of keys
   */
  type PickEnumerable<T, K extends Enumerable<keyof T> | keyof T> = Prisma__Pick<T, MaybeTupleToUnion<K>>

  /**
   * Exclude all keys with underscores
   */
  type ExcludeUnderscoreKeys<T extends string> = T extends `_${string}` ? never : T


  export type FieldRef<Model, FieldType> = runtime.FieldRef<Model, FieldType>

  type FieldRefInputType<Model, FieldType> = Model extends never ? never : FieldRef<Model, FieldType>


  export const ModelName: {
    Session: 'Session',
    School: 'School',
    Branch: 'Branch',
    BranchLevel: 'BranchLevel',
    ClassTemplate: 'ClassTemplate',
    SubjectSetup: 'SubjectSetup',
    SchoolSubject: 'SchoolSubject',
    BranchSession: 'BranchSession',
    SchoolSetting: 'SchoolSetting',
    MultimediaGroup: 'MultimediaGroup',
    Multimedia: 'Multimedia',
    LibraryBook: 'LibraryBook',
    IdCard: 'IdCard',
    LibraryCard: 'LibraryCard',
    ResultSerialNumbers: 'ResultSerialNumbers',
    SessionTerm: 'SessionTerm',
    UserLevel: 'UserLevel',
    UserTracking: 'UserTracking',
    UserTrackingSubject: 'UserTrackingSubject',
    AllUser: 'AllUser',
    User: 'User',
    Student: 'Student',
    Guardian: 'Guardian',
    StudentGuardian: 'StudentGuardian',
    Permission: 'Permission',
    RoleCrudPermission: 'RoleCrudPermission',
    RoleMaxCrudPermissions: 'RoleMaxCrudPermissions',
    RoleMaxPermission: 'RoleMaxPermission',
    RolePermission: 'RolePermission',
    Role: 'Role',
    UserCrudPermission: 'UserCrudPermission',
    UserPermission: 'UserPermission',
    UsertypeMaxCrudPermission: 'UsertypeMaxCrudPermission',
    UsertypeMaxPermission: 'UsertypeMaxPermission',
    Qualification: 'Qualification',
    Gender: 'Gender',
    Term: 'Term',
    Religion: 'Religion',
    ComplainFromTeacher: 'ComplainFromTeacher',
    Attendance: 'Attendance',
    SchoolNote: 'SchoolNote',
    Fee: 'Fee',
    PaymentType: 'PaymentType',
    PaymentDuration: 'PaymentDuration',
    Payment: 'Payment',
    PaymentMade: 'PaymentMade',
    PaymentPartMade: 'PaymentPartMade',
    PaymentAttempt: 'PaymentAttempt',
    ClassSubjectTemplate: 'ClassSubjectTemplate',
    SessionClass: 'SessionClass',
    SessionClassSubject: 'SessionClassSubject',
    SessionClassStudentSubject: 'SessionClassStudentSubject',
    ClassSpecialization: 'ClassSpecialization',
    ClassGroup: 'ClassGroup',
    ScoreType: 'ScoreType',
    ScoreDisplayType: 'ScoreDisplayType',
    StudentScore: 'StudentScore',
    StudentTotalScore: 'StudentTotalScore',
    StudentTracking: 'StudentTracking',
    ReportCardSetting: 'ReportCardSetting',
    ClassScoreSetupTemplate: 'ClassScoreSetupTemplate',
    SessionClassScoreSetup: 'SessionClassScoreSetup',
    ExamType: 'ExamType',
    ExamCategory: 'ExamCategory',
    ExamQuestionMarker: 'ExamQuestionMarker',
    QuestionTemplate: 'QuestionTemplate',
    Question: 'Question',
    ExamVisibility: 'ExamVisibility',
    Exam: 'Exam',
    ExamQuestion: 'ExamQuestion',
    ExamScoreSetupLink: 'ExamScoreSetupLink',
    ExamAttempt: 'ExamAttempt',
    ExamQuestionAnswer: 'ExamQuestionAnswer',
    ExamGift: 'ExamGift',
    SchoolRecord: 'SchoolRecord',
    ComponentGroup: 'ComponentGroup',
    Component: 'Component',
    CrudPage: 'CrudPage',
    AppUserType: 'AppUserType',
    MenuGroup: 'MenuGroup',
    SystemConfiguration: 'SystemConfiguration',
    CrudFront: 'CrudFront',
    CrudUtil: 'CrudUtil',
    Region: 'Region',
    Subregion: 'Subregion',
    Country: 'Country',
    State: 'State',
    City: 'City',
    TableLog: 'TableLog'
  };

  export type ModelName = (typeof ModelName)[keyof typeof ModelName]


  export type Datasources = {
    db?: Datasource
  }

  interface TypeMapCb<ClientOptions = {}> extends $Utils.Fn<{extArgs: $Extensions.InternalArgs }, $Utils.Record<string, any>> {
    returns: Prisma.TypeMap<this['params']['extArgs'], ClientOptions extends { omit: infer OmitOptions } ? OmitOptions : {}>
  }

  export type TypeMap<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> = {
    globalOmitOptions: {
      omit: GlobalOmitOptions
    }
    meta: {
      modelProps: "session" | "school" | "branch" | "branchLevel" | "classTemplate" | "subjectSetup" | "schoolSubject" | "branchSession" | "schoolSetting" | "multimediaGroup" | "multimedia" | "libraryBook" | "idCard" | "libraryCard" | "resultSerialNumbers" | "sessionTerm" | "userLevel" | "userTracking" | "userTrackingSubject" | "allUser" | "user" | "student" | "guardian" | "studentGuardian" | "permission" | "roleCrudPermission" | "roleMaxCrudPermissions" | "roleMaxPermission" | "rolePermission" | "role" | "userCrudPermission" | "userPermission" | "usertypeMaxCrudPermission" | "usertypeMaxPermission" | "qualification" | "gender" | "term" | "religion" | "complainFromTeacher" | "attendance" | "schoolNote" | "fee" | "paymentType" | "paymentDuration" | "payment" | "paymentMade" | "paymentPartMade" | "paymentAttempt" | "classSubjectTemplate" | "sessionClass" | "sessionClassSubject" | "sessionClassStudentSubject" | "classSpecialization" | "classGroup" | "scoreType" | "scoreDisplayType" | "studentScore" | "studentTotalScore" | "studentTracking" | "reportCardSetting" | "classScoreSetupTemplate" | "sessionClassScoreSetup" | "examType" | "examCategory" | "examQuestionMarker" | "questionTemplate" | "question" | "examVisibility" | "exam" | "examQuestion" | "examScoreSetupLink" | "examAttempt" | "examQuestionAnswer" | "examGift" | "schoolRecord" | "componentGroup" | "component" | "crudPage" | "appUserType" | "menuGroup" | "systemConfiguration" | "crudFront" | "crudUtil" | "region" | "subregion" | "country" | "state" | "city" | "tableLog"
      txIsolationLevel: Prisma.TransactionIsolationLevel
    }
    model: {
      Session: {
        payload: Prisma.$SessionPayload<ExtArgs>
        fields: Prisma.SessionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          findFirst: {
            args: Prisma.SessionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          findMany: {
            args: Prisma.SessionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>[]
          }
          create: {
            args: Prisma.SessionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          createMany: {
            args: Prisma.SessionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          update: {
            args: Prisma.SessionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          deleteMany: {
            args: Prisma.SessionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionPayload>
          }
          aggregate: {
            args: Prisma.SessionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSession>
          }
          groupBy: {
            args: Prisma.SessionGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionCountArgs<ExtArgs>
            result: $Utils.Optional<SessionCountAggregateOutputType> | number
          }
        }
      }
      School: {
        payload: Prisma.$SchoolPayload<ExtArgs>
        fields: Prisma.SchoolFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SchoolFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SchoolFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          findFirst: {
            args: Prisma.SchoolFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SchoolFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          findMany: {
            args: Prisma.SchoolFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>[]
          }
          create: {
            args: Prisma.SchoolCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          createMany: {
            args: Prisma.SchoolCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SchoolDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          update: {
            args: Prisma.SchoolUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          deleteMany: {
            args: Prisma.SchoolDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SchoolUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SchoolUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolPayload>
          }
          aggregate: {
            args: Prisma.SchoolAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSchool>
          }
          groupBy: {
            args: Prisma.SchoolGroupByArgs<ExtArgs>
            result: $Utils.Optional<SchoolGroupByOutputType>[]
          }
          count: {
            args: Prisma.SchoolCountArgs<ExtArgs>
            result: $Utils.Optional<SchoolCountAggregateOutputType> | number
          }
        }
      }
      Branch: {
        payload: Prisma.$BranchPayload<ExtArgs>
        fields: Prisma.BranchFieldRefs
        operations: {
          findUnique: {
            args: Prisma.BranchFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.BranchFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          findFirst: {
            args: Prisma.BranchFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.BranchFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          findMany: {
            args: Prisma.BranchFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>[]
          }
          create: {
            args: Prisma.BranchCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          createMany: {
            args: Prisma.BranchCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.BranchDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          update: {
            args: Prisma.BranchUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          deleteMany: {
            args: Prisma.BranchDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.BranchUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.BranchUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchPayload>
          }
          aggregate: {
            args: Prisma.BranchAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateBranch>
          }
          groupBy: {
            args: Prisma.BranchGroupByArgs<ExtArgs>
            result: $Utils.Optional<BranchGroupByOutputType>[]
          }
          count: {
            args: Prisma.BranchCountArgs<ExtArgs>
            result: $Utils.Optional<BranchCountAggregateOutputType> | number
          }
        }
      }
      BranchLevel: {
        payload: Prisma.$BranchLevelPayload<ExtArgs>
        fields: Prisma.BranchLevelFieldRefs
        operations: {
          findUnique: {
            args: Prisma.BranchLevelFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.BranchLevelFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          findFirst: {
            args: Prisma.BranchLevelFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.BranchLevelFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          findMany: {
            args: Prisma.BranchLevelFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>[]
          }
          create: {
            args: Prisma.BranchLevelCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          createMany: {
            args: Prisma.BranchLevelCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.BranchLevelDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          update: {
            args: Prisma.BranchLevelUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          deleteMany: {
            args: Prisma.BranchLevelDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.BranchLevelUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.BranchLevelUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchLevelPayload>
          }
          aggregate: {
            args: Prisma.BranchLevelAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateBranchLevel>
          }
          groupBy: {
            args: Prisma.BranchLevelGroupByArgs<ExtArgs>
            result: $Utils.Optional<BranchLevelGroupByOutputType>[]
          }
          count: {
            args: Prisma.BranchLevelCountArgs<ExtArgs>
            result: $Utils.Optional<BranchLevelCountAggregateOutputType> | number
          }
        }
      }
      ClassTemplate: {
        payload: Prisma.$ClassTemplatePayload<ExtArgs>
        fields: Prisma.ClassTemplateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ClassTemplateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ClassTemplateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          findFirst: {
            args: Prisma.ClassTemplateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ClassTemplateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          findMany: {
            args: Prisma.ClassTemplateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>[]
          }
          create: {
            args: Prisma.ClassTemplateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          createMany: {
            args: Prisma.ClassTemplateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ClassTemplateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          update: {
            args: Prisma.ClassTemplateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          deleteMany: {
            args: Prisma.ClassTemplateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ClassTemplateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ClassTemplateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassTemplatePayload>
          }
          aggregate: {
            args: Prisma.ClassTemplateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateClassTemplate>
          }
          groupBy: {
            args: Prisma.ClassTemplateGroupByArgs<ExtArgs>
            result: $Utils.Optional<ClassTemplateGroupByOutputType>[]
          }
          count: {
            args: Prisma.ClassTemplateCountArgs<ExtArgs>
            result: $Utils.Optional<ClassTemplateCountAggregateOutputType> | number
          }
        }
      }
      SubjectSetup: {
        payload: Prisma.$SubjectSetupPayload<ExtArgs>
        fields: Prisma.SubjectSetupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SubjectSetupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SubjectSetupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          findFirst: {
            args: Prisma.SubjectSetupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SubjectSetupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          findMany: {
            args: Prisma.SubjectSetupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>[]
          }
          create: {
            args: Prisma.SubjectSetupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          createMany: {
            args: Prisma.SubjectSetupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SubjectSetupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          update: {
            args: Prisma.SubjectSetupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          deleteMany: {
            args: Prisma.SubjectSetupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SubjectSetupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SubjectSetupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubjectSetupPayload>
          }
          aggregate: {
            args: Prisma.SubjectSetupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSubjectSetup>
          }
          groupBy: {
            args: Prisma.SubjectSetupGroupByArgs<ExtArgs>
            result: $Utils.Optional<SubjectSetupGroupByOutputType>[]
          }
          count: {
            args: Prisma.SubjectSetupCountArgs<ExtArgs>
            result: $Utils.Optional<SubjectSetupCountAggregateOutputType> | number
          }
        }
      }
      SchoolSubject: {
        payload: Prisma.$SchoolSubjectPayload<ExtArgs>
        fields: Prisma.SchoolSubjectFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SchoolSubjectFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SchoolSubjectFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          findFirst: {
            args: Prisma.SchoolSubjectFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SchoolSubjectFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          findMany: {
            args: Prisma.SchoolSubjectFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>[]
          }
          create: {
            args: Prisma.SchoolSubjectCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          createMany: {
            args: Prisma.SchoolSubjectCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SchoolSubjectDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          update: {
            args: Prisma.SchoolSubjectUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          deleteMany: {
            args: Prisma.SchoolSubjectDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SchoolSubjectUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SchoolSubjectUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSubjectPayload>
          }
          aggregate: {
            args: Prisma.SchoolSubjectAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSchoolSubject>
          }
          groupBy: {
            args: Prisma.SchoolSubjectGroupByArgs<ExtArgs>
            result: $Utils.Optional<SchoolSubjectGroupByOutputType>[]
          }
          count: {
            args: Prisma.SchoolSubjectCountArgs<ExtArgs>
            result: $Utils.Optional<SchoolSubjectCountAggregateOutputType> | number
          }
        }
      }
      BranchSession: {
        payload: Prisma.$BranchSessionPayload<ExtArgs>
        fields: Prisma.BranchSessionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.BranchSessionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.BranchSessionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          findFirst: {
            args: Prisma.BranchSessionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.BranchSessionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          findMany: {
            args: Prisma.BranchSessionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>[]
          }
          create: {
            args: Prisma.BranchSessionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          createMany: {
            args: Prisma.BranchSessionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.BranchSessionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          update: {
            args: Prisma.BranchSessionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          deleteMany: {
            args: Prisma.BranchSessionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.BranchSessionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.BranchSessionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$BranchSessionPayload>
          }
          aggregate: {
            args: Prisma.BranchSessionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateBranchSession>
          }
          groupBy: {
            args: Prisma.BranchSessionGroupByArgs<ExtArgs>
            result: $Utils.Optional<BranchSessionGroupByOutputType>[]
          }
          count: {
            args: Prisma.BranchSessionCountArgs<ExtArgs>
            result: $Utils.Optional<BranchSessionCountAggregateOutputType> | number
          }
        }
      }
      SchoolSetting: {
        payload: Prisma.$SchoolSettingPayload<ExtArgs>
        fields: Prisma.SchoolSettingFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SchoolSettingFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SchoolSettingFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          findFirst: {
            args: Prisma.SchoolSettingFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SchoolSettingFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          findMany: {
            args: Prisma.SchoolSettingFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>[]
          }
          create: {
            args: Prisma.SchoolSettingCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          createMany: {
            args: Prisma.SchoolSettingCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SchoolSettingDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          update: {
            args: Prisma.SchoolSettingUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          deleteMany: {
            args: Prisma.SchoolSettingDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SchoolSettingUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SchoolSettingUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolSettingPayload>
          }
          aggregate: {
            args: Prisma.SchoolSettingAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSchoolSetting>
          }
          groupBy: {
            args: Prisma.SchoolSettingGroupByArgs<ExtArgs>
            result: $Utils.Optional<SchoolSettingGroupByOutputType>[]
          }
          count: {
            args: Prisma.SchoolSettingCountArgs<ExtArgs>
            result: $Utils.Optional<SchoolSettingCountAggregateOutputType> | number
          }
        }
      }
      MultimediaGroup: {
        payload: Prisma.$MultimediaGroupPayload<ExtArgs>
        fields: Prisma.MultimediaGroupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.MultimediaGroupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.MultimediaGroupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          findFirst: {
            args: Prisma.MultimediaGroupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.MultimediaGroupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          findMany: {
            args: Prisma.MultimediaGroupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>[]
          }
          create: {
            args: Prisma.MultimediaGroupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          createMany: {
            args: Prisma.MultimediaGroupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.MultimediaGroupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          update: {
            args: Prisma.MultimediaGroupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          deleteMany: {
            args: Prisma.MultimediaGroupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.MultimediaGroupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.MultimediaGroupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaGroupPayload>
          }
          aggregate: {
            args: Prisma.MultimediaGroupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateMultimediaGroup>
          }
          groupBy: {
            args: Prisma.MultimediaGroupGroupByArgs<ExtArgs>
            result: $Utils.Optional<MultimediaGroupGroupByOutputType>[]
          }
          count: {
            args: Prisma.MultimediaGroupCountArgs<ExtArgs>
            result: $Utils.Optional<MultimediaGroupCountAggregateOutputType> | number
          }
        }
      }
      Multimedia: {
        payload: Prisma.$MultimediaPayload<ExtArgs>
        fields: Prisma.MultimediaFieldRefs
        operations: {
          findUnique: {
            args: Prisma.MultimediaFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.MultimediaFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          findFirst: {
            args: Prisma.MultimediaFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.MultimediaFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          findMany: {
            args: Prisma.MultimediaFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>[]
          }
          create: {
            args: Prisma.MultimediaCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          createMany: {
            args: Prisma.MultimediaCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.MultimediaDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          update: {
            args: Prisma.MultimediaUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          deleteMany: {
            args: Prisma.MultimediaDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.MultimediaUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.MultimediaUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MultimediaPayload>
          }
          aggregate: {
            args: Prisma.MultimediaAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateMultimedia>
          }
          groupBy: {
            args: Prisma.MultimediaGroupByArgs<ExtArgs>
            result: $Utils.Optional<MultimediaGroupByOutputType>[]
          }
          count: {
            args: Prisma.MultimediaCountArgs<ExtArgs>
            result: $Utils.Optional<MultimediaCountAggregateOutputType> | number
          }
        }
      }
      LibraryBook: {
        payload: Prisma.$LibraryBookPayload<ExtArgs>
        fields: Prisma.LibraryBookFieldRefs
        operations: {
          findUnique: {
            args: Prisma.LibraryBookFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.LibraryBookFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          findFirst: {
            args: Prisma.LibraryBookFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.LibraryBookFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          findMany: {
            args: Prisma.LibraryBookFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>[]
          }
          create: {
            args: Prisma.LibraryBookCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          createMany: {
            args: Prisma.LibraryBookCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.LibraryBookDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          update: {
            args: Prisma.LibraryBookUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          deleteMany: {
            args: Prisma.LibraryBookDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.LibraryBookUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.LibraryBookUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryBookPayload>
          }
          aggregate: {
            args: Prisma.LibraryBookAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateLibraryBook>
          }
          groupBy: {
            args: Prisma.LibraryBookGroupByArgs<ExtArgs>
            result: $Utils.Optional<LibraryBookGroupByOutputType>[]
          }
          count: {
            args: Prisma.LibraryBookCountArgs<ExtArgs>
            result: $Utils.Optional<LibraryBookCountAggregateOutputType> | number
          }
        }
      }
      IdCard: {
        payload: Prisma.$IdCardPayload<ExtArgs>
        fields: Prisma.IdCardFieldRefs
        operations: {
          findUnique: {
            args: Prisma.IdCardFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.IdCardFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          findFirst: {
            args: Prisma.IdCardFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.IdCardFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          findMany: {
            args: Prisma.IdCardFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>[]
          }
          create: {
            args: Prisma.IdCardCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          createMany: {
            args: Prisma.IdCardCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.IdCardDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          update: {
            args: Prisma.IdCardUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          deleteMany: {
            args: Prisma.IdCardDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.IdCardUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.IdCardUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$IdCardPayload>
          }
          aggregate: {
            args: Prisma.IdCardAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateIdCard>
          }
          groupBy: {
            args: Prisma.IdCardGroupByArgs<ExtArgs>
            result: $Utils.Optional<IdCardGroupByOutputType>[]
          }
          count: {
            args: Prisma.IdCardCountArgs<ExtArgs>
            result: $Utils.Optional<IdCardCountAggregateOutputType> | number
          }
        }
      }
      LibraryCard: {
        payload: Prisma.$LibraryCardPayload<ExtArgs>
        fields: Prisma.LibraryCardFieldRefs
        operations: {
          findUnique: {
            args: Prisma.LibraryCardFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.LibraryCardFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          findFirst: {
            args: Prisma.LibraryCardFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.LibraryCardFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          findMany: {
            args: Prisma.LibraryCardFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>[]
          }
          create: {
            args: Prisma.LibraryCardCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          createMany: {
            args: Prisma.LibraryCardCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.LibraryCardDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          update: {
            args: Prisma.LibraryCardUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          deleteMany: {
            args: Prisma.LibraryCardDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.LibraryCardUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.LibraryCardUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$LibraryCardPayload>
          }
          aggregate: {
            args: Prisma.LibraryCardAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateLibraryCard>
          }
          groupBy: {
            args: Prisma.LibraryCardGroupByArgs<ExtArgs>
            result: $Utils.Optional<LibraryCardGroupByOutputType>[]
          }
          count: {
            args: Prisma.LibraryCardCountArgs<ExtArgs>
            result: $Utils.Optional<LibraryCardCountAggregateOutputType> | number
          }
        }
      }
      ResultSerialNumbers: {
        payload: Prisma.$ResultSerialNumbersPayload<ExtArgs>
        fields: Prisma.ResultSerialNumbersFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ResultSerialNumbersFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ResultSerialNumbersFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          findFirst: {
            args: Prisma.ResultSerialNumbersFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ResultSerialNumbersFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          findMany: {
            args: Prisma.ResultSerialNumbersFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>[]
          }
          create: {
            args: Prisma.ResultSerialNumbersCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          createMany: {
            args: Prisma.ResultSerialNumbersCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ResultSerialNumbersDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          update: {
            args: Prisma.ResultSerialNumbersUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          deleteMany: {
            args: Prisma.ResultSerialNumbersDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ResultSerialNumbersUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ResultSerialNumbersUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ResultSerialNumbersPayload>
          }
          aggregate: {
            args: Prisma.ResultSerialNumbersAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateResultSerialNumbers>
          }
          groupBy: {
            args: Prisma.ResultSerialNumbersGroupByArgs<ExtArgs>
            result: $Utils.Optional<ResultSerialNumbersGroupByOutputType>[]
          }
          count: {
            args: Prisma.ResultSerialNumbersCountArgs<ExtArgs>
            result: $Utils.Optional<ResultSerialNumbersCountAggregateOutputType> | number
          }
        }
      }
      SessionTerm: {
        payload: Prisma.$SessionTermPayload<ExtArgs>
        fields: Prisma.SessionTermFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionTermFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionTermFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          findFirst: {
            args: Prisma.SessionTermFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionTermFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          findMany: {
            args: Prisma.SessionTermFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>[]
          }
          create: {
            args: Prisma.SessionTermCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          createMany: {
            args: Prisma.SessionTermCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionTermDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          update: {
            args: Prisma.SessionTermUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          deleteMany: {
            args: Prisma.SessionTermDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionTermUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionTermUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionTermPayload>
          }
          aggregate: {
            args: Prisma.SessionTermAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSessionTerm>
          }
          groupBy: {
            args: Prisma.SessionTermGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionTermGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionTermCountArgs<ExtArgs>
            result: $Utils.Optional<SessionTermCountAggregateOutputType> | number
          }
        }
      }
      UserLevel: {
        payload: Prisma.$UserLevelPayload<ExtArgs>
        fields: Prisma.UserLevelFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserLevelFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserLevelFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          findFirst: {
            args: Prisma.UserLevelFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserLevelFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          findMany: {
            args: Prisma.UserLevelFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>[]
          }
          create: {
            args: Prisma.UserLevelCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          createMany: {
            args: Prisma.UserLevelCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserLevelDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          update: {
            args: Prisma.UserLevelUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          deleteMany: {
            args: Prisma.UserLevelDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserLevelUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserLevelUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserLevelPayload>
          }
          aggregate: {
            args: Prisma.UserLevelAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserLevel>
          }
          groupBy: {
            args: Prisma.UserLevelGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserLevelGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserLevelCountArgs<ExtArgs>
            result: $Utils.Optional<UserLevelCountAggregateOutputType> | number
          }
        }
      }
      UserTracking: {
        payload: Prisma.$UserTrackingPayload<ExtArgs>
        fields: Prisma.UserTrackingFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserTrackingFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserTrackingFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          findFirst: {
            args: Prisma.UserTrackingFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserTrackingFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          findMany: {
            args: Prisma.UserTrackingFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>[]
          }
          create: {
            args: Prisma.UserTrackingCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          createMany: {
            args: Prisma.UserTrackingCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserTrackingDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          update: {
            args: Prisma.UserTrackingUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          deleteMany: {
            args: Prisma.UserTrackingDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserTrackingUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserTrackingUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingPayload>
          }
          aggregate: {
            args: Prisma.UserTrackingAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserTracking>
          }
          groupBy: {
            args: Prisma.UserTrackingGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserTrackingGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserTrackingCountArgs<ExtArgs>
            result: $Utils.Optional<UserTrackingCountAggregateOutputType> | number
          }
        }
      }
      UserTrackingSubject: {
        payload: Prisma.$UserTrackingSubjectPayload<ExtArgs>
        fields: Prisma.UserTrackingSubjectFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserTrackingSubjectFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserTrackingSubjectFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          findFirst: {
            args: Prisma.UserTrackingSubjectFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserTrackingSubjectFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          findMany: {
            args: Prisma.UserTrackingSubjectFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>[]
          }
          create: {
            args: Prisma.UserTrackingSubjectCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          createMany: {
            args: Prisma.UserTrackingSubjectCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserTrackingSubjectDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          update: {
            args: Prisma.UserTrackingSubjectUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          deleteMany: {
            args: Prisma.UserTrackingSubjectDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserTrackingSubjectUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserTrackingSubjectUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserTrackingSubjectPayload>
          }
          aggregate: {
            args: Prisma.UserTrackingSubjectAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserTrackingSubject>
          }
          groupBy: {
            args: Prisma.UserTrackingSubjectGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserTrackingSubjectGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserTrackingSubjectCountArgs<ExtArgs>
            result: $Utils.Optional<UserTrackingSubjectCountAggregateOutputType> | number
          }
        }
      }
      AllUser: {
        payload: Prisma.$AllUserPayload<ExtArgs>
        fields: Prisma.AllUserFieldRefs
        operations: {
          findUnique: {
            args: Prisma.AllUserFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.AllUserFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          findFirst: {
            args: Prisma.AllUserFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.AllUserFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          findMany: {
            args: Prisma.AllUserFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>[]
          }
          create: {
            args: Prisma.AllUserCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          createMany: {
            args: Prisma.AllUserCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.AllUserDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          update: {
            args: Prisma.AllUserUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          deleteMany: {
            args: Prisma.AllUserDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.AllUserUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.AllUserUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AllUserPayload>
          }
          aggregate: {
            args: Prisma.AllUserAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateAllUser>
          }
          groupBy: {
            args: Prisma.AllUserGroupByArgs<ExtArgs>
            result: $Utils.Optional<AllUserGroupByOutputType>[]
          }
          count: {
            args: Prisma.AllUserCountArgs<ExtArgs>
            result: $Utils.Optional<AllUserCountAggregateOutputType> | number
          }
        }
      }
      User: {
        payload: Prisma.$UserPayload<ExtArgs>
        fields: Prisma.UserFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          findFirst: {
            args: Prisma.UserFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          findMany: {
            args: Prisma.UserFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>[]
          }
          create: {
            args: Prisma.UserCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          createMany: {
            args: Prisma.UserCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          update: {
            args: Prisma.UserUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          deleteMany: {
            args: Prisma.UserDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPayload>
          }
          aggregate: {
            args: Prisma.UserAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUser>
          }
          groupBy: {
            args: Prisma.UserGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserCountArgs<ExtArgs>
            result: $Utils.Optional<UserCountAggregateOutputType> | number
          }
        }
      }
      Student: {
        payload: Prisma.$StudentPayload<ExtArgs>
        fields: Prisma.StudentFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StudentFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StudentFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          findFirst: {
            args: Prisma.StudentFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StudentFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          findMany: {
            args: Prisma.StudentFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>[]
          }
          create: {
            args: Prisma.StudentCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          createMany: {
            args: Prisma.StudentCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StudentDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          update: {
            args: Prisma.StudentUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          deleteMany: {
            args: Prisma.StudentDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StudentUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StudentUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentPayload>
          }
          aggregate: {
            args: Prisma.StudentAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStudent>
          }
          groupBy: {
            args: Prisma.StudentGroupByArgs<ExtArgs>
            result: $Utils.Optional<StudentGroupByOutputType>[]
          }
          count: {
            args: Prisma.StudentCountArgs<ExtArgs>
            result: $Utils.Optional<StudentCountAggregateOutputType> | number
          }
        }
      }
      Guardian: {
        payload: Prisma.$GuardianPayload<ExtArgs>
        fields: Prisma.GuardianFieldRefs
        operations: {
          findUnique: {
            args: Prisma.GuardianFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.GuardianFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          findFirst: {
            args: Prisma.GuardianFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.GuardianFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          findMany: {
            args: Prisma.GuardianFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>[]
          }
          create: {
            args: Prisma.GuardianCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          createMany: {
            args: Prisma.GuardianCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.GuardianDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          update: {
            args: Prisma.GuardianUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          deleteMany: {
            args: Prisma.GuardianDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.GuardianUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.GuardianUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GuardianPayload>
          }
          aggregate: {
            args: Prisma.GuardianAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateGuardian>
          }
          groupBy: {
            args: Prisma.GuardianGroupByArgs<ExtArgs>
            result: $Utils.Optional<GuardianGroupByOutputType>[]
          }
          count: {
            args: Prisma.GuardianCountArgs<ExtArgs>
            result: $Utils.Optional<GuardianCountAggregateOutputType> | number
          }
        }
      }
      StudentGuardian: {
        payload: Prisma.$StudentGuardianPayload<ExtArgs>
        fields: Prisma.StudentGuardianFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StudentGuardianFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StudentGuardianFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          findFirst: {
            args: Prisma.StudentGuardianFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StudentGuardianFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          findMany: {
            args: Prisma.StudentGuardianFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>[]
          }
          create: {
            args: Prisma.StudentGuardianCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          createMany: {
            args: Prisma.StudentGuardianCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StudentGuardianDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          update: {
            args: Prisma.StudentGuardianUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          deleteMany: {
            args: Prisma.StudentGuardianDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StudentGuardianUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StudentGuardianUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentGuardianPayload>
          }
          aggregate: {
            args: Prisma.StudentGuardianAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStudentGuardian>
          }
          groupBy: {
            args: Prisma.StudentGuardianGroupByArgs<ExtArgs>
            result: $Utils.Optional<StudentGuardianGroupByOutputType>[]
          }
          count: {
            args: Prisma.StudentGuardianCountArgs<ExtArgs>
            result: $Utils.Optional<StudentGuardianCountAggregateOutputType> | number
          }
        }
      }
      Permission: {
        payload: Prisma.$PermissionPayload<ExtArgs>
        fields: Prisma.PermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          findFirst: {
            args: Prisma.PermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          findMany: {
            args: Prisma.PermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>[]
          }
          create: {
            args: Prisma.PermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          createMany: {
            args: Prisma.PermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          update: {
            args: Prisma.PermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          deleteMany: {
            args: Prisma.PermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PermissionPayload>
          }
          aggregate: {
            args: Prisma.PermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePermission>
          }
          groupBy: {
            args: Prisma.PermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<PermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.PermissionCountArgs<ExtArgs>
            result: $Utils.Optional<PermissionCountAggregateOutputType> | number
          }
        }
      }
      RoleCrudPermission: {
        payload: Prisma.$RoleCrudPermissionPayload<ExtArgs>
        fields: Prisma.RoleCrudPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RoleCrudPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RoleCrudPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          findFirst: {
            args: Prisma.RoleCrudPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RoleCrudPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          findMany: {
            args: Prisma.RoleCrudPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>[]
          }
          create: {
            args: Prisma.RoleCrudPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          createMany: {
            args: Prisma.RoleCrudPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RoleCrudPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          update: {
            args: Prisma.RoleCrudPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          deleteMany: {
            args: Prisma.RoleCrudPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RoleCrudPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RoleCrudPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleCrudPermissionPayload>
          }
          aggregate: {
            args: Prisma.RoleCrudPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRoleCrudPermission>
          }
          groupBy: {
            args: Prisma.RoleCrudPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<RoleCrudPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.RoleCrudPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<RoleCrudPermissionCountAggregateOutputType> | number
          }
        }
      }
      RoleMaxCrudPermissions: {
        payload: Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>
        fields: Prisma.RoleMaxCrudPermissionsFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RoleMaxCrudPermissionsFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RoleMaxCrudPermissionsFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          findFirst: {
            args: Prisma.RoleMaxCrudPermissionsFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RoleMaxCrudPermissionsFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          findMany: {
            args: Prisma.RoleMaxCrudPermissionsFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>[]
          }
          create: {
            args: Prisma.RoleMaxCrudPermissionsCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          createMany: {
            args: Prisma.RoleMaxCrudPermissionsCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RoleMaxCrudPermissionsDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          update: {
            args: Prisma.RoleMaxCrudPermissionsUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          deleteMany: {
            args: Prisma.RoleMaxCrudPermissionsDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RoleMaxCrudPermissionsUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RoleMaxCrudPermissionsUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxCrudPermissionsPayload>
          }
          aggregate: {
            args: Prisma.RoleMaxCrudPermissionsAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRoleMaxCrudPermissions>
          }
          groupBy: {
            args: Prisma.RoleMaxCrudPermissionsGroupByArgs<ExtArgs>
            result: $Utils.Optional<RoleMaxCrudPermissionsGroupByOutputType>[]
          }
          count: {
            args: Prisma.RoleMaxCrudPermissionsCountArgs<ExtArgs>
            result: $Utils.Optional<RoleMaxCrudPermissionsCountAggregateOutputType> | number
          }
        }
      }
      RoleMaxPermission: {
        payload: Prisma.$RoleMaxPermissionPayload<ExtArgs>
        fields: Prisma.RoleMaxPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RoleMaxPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RoleMaxPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          findFirst: {
            args: Prisma.RoleMaxPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RoleMaxPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          findMany: {
            args: Prisma.RoleMaxPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>[]
          }
          create: {
            args: Prisma.RoleMaxPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          createMany: {
            args: Prisma.RoleMaxPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RoleMaxPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          update: {
            args: Prisma.RoleMaxPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          deleteMany: {
            args: Prisma.RoleMaxPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RoleMaxPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RoleMaxPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RoleMaxPermissionPayload>
          }
          aggregate: {
            args: Prisma.RoleMaxPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRoleMaxPermission>
          }
          groupBy: {
            args: Prisma.RoleMaxPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<RoleMaxPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.RoleMaxPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<RoleMaxPermissionCountAggregateOutputType> | number
          }
        }
      }
      RolePermission: {
        payload: Prisma.$RolePermissionPayload<ExtArgs>
        fields: Prisma.RolePermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RolePermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RolePermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          findFirst: {
            args: Prisma.RolePermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RolePermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          findMany: {
            args: Prisma.RolePermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>[]
          }
          create: {
            args: Prisma.RolePermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          createMany: {
            args: Prisma.RolePermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RolePermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          update: {
            args: Prisma.RolePermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          deleteMany: {
            args: Prisma.RolePermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RolePermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RolePermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePermissionPayload>
          }
          aggregate: {
            args: Prisma.RolePermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRolePermission>
          }
          groupBy: {
            args: Prisma.RolePermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<RolePermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.RolePermissionCountArgs<ExtArgs>
            result: $Utils.Optional<RolePermissionCountAggregateOutputType> | number
          }
        }
      }
      Role: {
        payload: Prisma.$RolePayload<ExtArgs>
        fields: Prisma.RoleFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RoleFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RoleFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          findFirst: {
            args: Prisma.RoleFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RoleFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          findMany: {
            args: Prisma.RoleFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>[]
          }
          create: {
            args: Prisma.RoleCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          createMany: {
            args: Prisma.RoleCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RoleDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          update: {
            args: Prisma.RoleUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          deleteMany: {
            args: Prisma.RoleDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RoleUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RoleUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RolePayload>
          }
          aggregate: {
            args: Prisma.RoleAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRole>
          }
          groupBy: {
            args: Prisma.RoleGroupByArgs<ExtArgs>
            result: $Utils.Optional<RoleGroupByOutputType>[]
          }
          count: {
            args: Prisma.RoleCountArgs<ExtArgs>
            result: $Utils.Optional<RoleCountAggregateOutputType> | number
          }
        }
      }
      UserCrudPermission: {
        payload: Prisma.$UserCrudPermissionPayload<ExtArgs>
        fields: Prisma.UserCrudPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserCrudPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserCrudPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          findFirst: {
            args: Prisma.UserCrudPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserCrudPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          findMany: {
            args: Prisma.UserCrudPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>[]
          }
          create: {
            args: Prisma.UserCrudPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          createMany: {
            args: Prisma.UserCrudPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserCrudPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          update: {
            args: Prisma.UserCrudPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          deleteMany: {
            args: Prisma.UserCrudPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserCrudPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserCrudPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserCrudPermissionPayload>
          }
          aggregate: {
            args: Prisma.UserCrudPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserCrudPermission>
          }
          groupBy: {
            args: Prisma.UserCrudPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserCrudPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserCrudPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<UserCrudPermissionCountAggregateOutputType> | number
          }
        }
      }
      UserPermission: {
        payload: Prisma.$UserPermissionPayload<ExtArgs>
        fields: Prisma.UserPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UserPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UserPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          findFirst: {
            args: Prisma.UserPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UserPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          findMany: {
            args: Prisma.UserPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>[]
          }
          create: {
            args: Prisma.UserPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          createMany: {
            args: Prisma.UserPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UserPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          update: {
            args: Prisma.UserPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          deleteMany: {
            args: Prisma.UserPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UserPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UserPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UserPermissionPayload>
          }
          aggregate: {
            args: Prisma.UserPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUserPermission>
          }
          groupBy: {
            args: Prisma.UserPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<UserPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.UserPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<UserPermissionCountAggregateOutputType> | number
          }
        }
      }
      UsertypeMaxCrudPermission: {
        payload: Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>
        fields: Prisma.UsertypeMaxCrudPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UsertypeMaxCrudPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UsertypeMaxCrudPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          findFirst: {
            args: Prisma.UsertypeMaxCrudPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UsertypeMaxCrudPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          findMany: {
            args: Prisma.UsertypeMaxCrudPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>[]
          }
          create: {
            args: Prisma.UsertypeMaxCrudPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          createMany: {
            args: Prisma.UsertypeMaxCrudPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UsertypeMaxCrudPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          update: {
            args: Prisma.UsertypeMaxCrudPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          deleteMany: {
            args: Prisma.UsertypeMaxCrudPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UsertypeMaxCrudPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UsertypeMaxCrudPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxCrudPermissionPayload>
          }
          aggregate: {
            args: Prisma.UsertypeMaxCrudPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUsertypeMaxCrudPermission>
          }
          groupBy: {
            args: Prisma.UsertypeMaxCrudPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<UsertypeMaxCrudPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.UsertypeMaxCrudPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<UsertypeMaxCrudPermissionCountAggregateOutputType> | number
          }
        }
      }
      UsertypeMaxPermission: {
        payload: Prisma.$UsertypeMaxPermissionPayload<ExtArgs>
        fields: Prisma.UsertypeMaxPermissionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.UsertypeMaxPermissionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.UsertypeMaxPermissionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          findFirst: {
            args: Prisma.UsertypeMaxPermissionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.UsertypeMaxPermissionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          findMany: {
            args: Prisma.UsertypeMaxPermissionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>[]
          }
          create: {
            args: Prisma.UsertypeMaxPermissionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          createMany: {
            args: Prisma.UsertypeMaxPermissionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.UsertypeMaxPermissionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          update: {
            args: Prisma.UsertypeMaxPermissionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          deleteMany: {
            args: Prisma.UsertypeMaxPermissionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.UsertypeMaxPermissionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.UsertypeMaxPermissionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$UsertypeMaxPermissionPayload>
          }
          aggregate: {
            args: Prisma.UsertypeMaxPermissionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateUsertypeMaxPermission>
          }
          groupBy: {
            args: Prisma.UsertypeMaxPermissionGroupByArgs<ExtArgs>
            result: $Utils.Optional<UsertypeMaxPermissionGroupByOutputType>[]
          }
          count: {
            args: Prisma.UsertypeMaxPermissionCountArgs<ExtArgs>
            result: $Utils.Optional<UsertypeMaxPermissionCountAggregateOutputType> | number
          }
        }
      }
      Qualification: {
        payload: Prisma.$QualificationPayload<ExtArgs>
        fields: Prisma.QualificationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.QualificationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.QualificationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          findFirst: {
            args: Prisma.QualificationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.QualificationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          findMany: {
            args: Prisma.QualificationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>[]
          }
          create: {
            args: Prisma.QualificationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          createMany: {
            args: Prisma.QualificationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.QualificationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          update: {
            args: Prisma.QualificationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          deleteMany: {
            args: Prisma.QualificationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.QualificationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.QualificationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QualificationPayload>
          }
          aggregate: {
            args: Prisma.QualificationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateQualification>
          }
          groupBy: {
            args: Prisma.QualificationGroupByArgs<ExtArgs>
            result: $Utils.Optional<QualificationGroupByOutputType>[]
          }
          count: {
            args: Prisma.QualificationCountArgs<ExtArgs>
            result: $Utils.Optional<QualificationCountAggregateOutputType> | number
          }
        }
      }
      Gender: {
        payload: Prisma.$GenderPayload<ExtArgs>
        fields: Prisma.GenderFieldRefs
        operations: {
          findUnique: {
            args: Prisma.GenderFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.GenderFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          findFirst: {
            args: Prisma.GenderFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.GenderFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          findMany: {
            args: Prisma.GenderFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>[]
          }
          create: {
            args: Prisma.GenderCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          createMany: {
            args: Prisma.GenderCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.GenderDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          update: {
            args: Prisma.GenderUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          deleteMany: {
            args: Prisma.GenderDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.GenderUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.GenderUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$GenderPayload>
          }
          aggregate: {
            args: Prisma.GenderAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateGender>
          }
          groupBy: {
            args: Prisma.GenderGroupByArgs<ExtArgs>
            result: $Utils.Optional<GenderGroupByOutputType>[]
          }
          count: {
            args: Prisma.GenderCountArgs<ExtArgs>
            result: $Utils.Optional<GenderCountAggregateOutputType> | number
          }
        }
      }
      Term: {
        payload: Prisma.$TermPayload<ExtArgs>
        fields: Prisma.TermFieldRefs
        operations: {
          findUnique: {
            args: Prisma.TermFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.TermFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          findFirst: {
            args: Prisma.TermFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.TermFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          findMany: {
            args: Prisma.TermFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>[]
          }
          create: {
            args: Prisma.TermCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          createMany: {
            args: Prisma.TermCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.TermDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          update: {
            args: Prisma.TermUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          deleteMany: {
            args: Prisma.TermDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.TermUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.TermUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TermPayload>
          }
          aggregate: {
            args: Prisma.TermAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateTerm>
          }
          groupBy: {
            args: Prisma.TermGroupByArgs<ExtArgs>
            result: $Utils.Optional<TermGroupByOutputType>[]
          }
          count: {
            args: Prisma.TermCountArgs<ExtArgs>
            result: $Utils.Optional<TermCountAggregateOutputType> | number
          }
        }
      }
      Religion: {
        payload: Prisma.$ReligionPayload<ExtArgs>
        fields: Prisma.ReligionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ReligionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ReligionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          findFirst: {
            args: Prisma.ReligionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ReligionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          findMany: {
            args: Prisma.ReligionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>[]
          }
          create: {
            args: Prisma.ReligionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          createMany: {
            args: Prisma.ReligionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ReligionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          update: {
            args: Prisma.ReligionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          deleteMany: {
            args: Prisma.ReligionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ReligionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ReligionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReligionPayload>
          }
          aggregate: {
            args: Prisma.ReligionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateReligion>
          }
          groupBy: {
            args: Prisma.ReligionGroupByArgs<ExtArgs>
            result: $Utils.Optional<ReligionGroupByOutputType>[]
          }
          count: {
            args: Prisma.ReligionCountArgs<ExtArgs>
            result: $Utils.Optional<ReligionCountAggregateOutputType> | number
          }
        }
      }
      ComplainFromTeacher: {
        payload: Prisma.$ComplainFromTeacherPayload<ExtArgs>
        fields: Prisma.ComplainFromTeacherFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ComplainFromTeacherFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ComplainFromTeacherFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          findFirst: {
            args: Prisma.ComplainFromTeacherFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ComplainFromTeacherFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          findMany: {
            args: Prisma.ComplainFromTeacherFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>[]
          }
          create: {
            args: Prisma.ComplainFromTeacherCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          createMany: {
            args: Prisma.ComplainFromTeacherCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ComplainFromTeacherDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          update: {
            args: Prisma.ComplainFromTeacherUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          deleteMany: {
            args: Prisma.ComplainFromTeacherDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ComplainFromTeacherUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ComplainFromTeacherUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComplainFromTeacherPayload>
          }
          aggregate: {
            args: Prisma.ComplainFromTeacherAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateComplainFromTeacher>
          }
          groupBy: {
            args: Prisma.ComplainFromTeacherGroupByArgs<ExtArgs>
            result: $Utils.Optional<ComplainFromTeacherGroupByOutputType>[]
          }
          count: {
            args: Prisma.ComplainFromTeacherCountArgs<ExtArgs>
            result: $Utils.Optional<ComplainFromTeacherCountAggregateOutputType> | number
          }
        }
      }
      Attendance: {
        payload: Prisma.$AttendancePayload<ExtArgs>
        fields: Prisma.AttendanceFieldRefs
        operations: {
          findUnique: {
            args: Prisma.AttendanceFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.AttendanceFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          findFirst: {
            args: Prisma.AttendanceFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.AttendanceFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          findMany: {
            args: Prisma.AttendanceFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>[]
          }
          create: {
            args: Prisma.AttendanceCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          createMany: {
            args: Prisma.AttendanceCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.AttendanceDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          update: {
            args: Prisma.AttendanceUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          deleteMany: {
            args: Prisma.AttendanceDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.AttendanceUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.AttendanceUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AttendancePayload>
          }
          aggregate: {
            args: Prisma.AttendanceAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateAttendance>
          }
          groupBy: {
            args: Prisma.AttendanceGroupByArgs<ExtArgs>
            result: $Utils.Optional<AttendanceGroupByOutputType>[]
          }
          count: {
            args: Prisma.AttendanceCountArgs<ExtArgs>
            result: $Utils.Optional<AttendanceCountAggregateOutputType> | number
          }
        }
      }
      SchoolNote: {
        payload: Prisma.$SchoolNotePayload<ExtArgs>
        fields: Prisma.SchoolNoteFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SchoolNoteFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SchoolNoteFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          findFirst: {
            args: Prisma.SchoolNoteFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SchoolNoteFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          findMany: {
            args: Prisma.SchoolNoteFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>[]
          }
          create: {
            args: Prisma.SchoolNoteCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          createMany: {
            args: Prisma.SchoolNoteCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SchoolNoteDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          update: {
            args: Prisma.SchoolNoteUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          deleteMany: {
            args: Prisma.SchoolNoteDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SchoolNoteUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SchoolNoteUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolNotePayload>
          }
          aggregate: {
            args: Prisma.SchoolNoteAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSchoolNote>
          }
          groupBy: {
            args: Prisma.SchoolNoteGroupByArgs<ExtArgs>
            result: $Utils.Optional<SchoolNoteGroupByOutputType>[]
          }
          count: {
            args: Prisma.SchoolNoteCountArgs<ExtArgs>
            result: $Utils.Optional<SchoolNoteCountAggregateOutputType> | number
          }
        }
      }
      Fee: {
        payload: Prisma.$FeePayload<ExtArgs>
        fields: Prisma.FeeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.FeeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.FeeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          findFirst: {
            args: Prisma.FeeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.FeeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          findMany: {
            args: Prisma.FeeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>[]
          }
          create: {
            args: Prisma.FeeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          createMany: {
            args: Prisma.FeeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.FeeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          update: {
            args: Prisma.FeeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          deleteMany: {
            args: Prisma.FeeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.FeeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.FeeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$FeePayload>
          }
          aggregate: {
            args: Prisma.FeeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateFee>
          }
          groupBy: {
            args: Prisma.FeeGroupByArgs<ExtArgs>
            result: $Utils.Optional<FeeGroupByOutputType>[]
          }
          count: {
            args: Prisma.FeeCountArgs<ExtArgs>
            result: $Utils.Optional<FeeCountAggregateOutputType> | number
          }
        }
      }
      PaymentType: {
        payload: Prisma.$PaymentTypePayload<ExtArgs>
        fields: Prisma.PaymentTypeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentTypeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentTypeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          findFirst: {
            args: Prisma.PaymentTypeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentTypeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          findMany: {
            args: Prisma.PaymentTypeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>[]
          }
          create: {
            args: Prisma.PaymentTypeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          createMany: {
            args: Prisma.PaymentTypeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentTypeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          update: {
            args: Prisma.PaymentTypeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          deleteMany: {
            args: Prisma.PaymentTypeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentTypeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentTypeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentTypePayload>
          }
          aggregate: {
            args: Prisma.PaymentTypeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePaymentType>
          }
          groupBy: {
            args: Prisma.PaymentTypeGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentTypeGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentTypeCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentTypeCountAggregateOutputType> | number
          }
        }
      }
      PaymentDuration: {
        payload: Prisma.$PaymentDurationPayload<ExtArgs>
        fields: Prisma.PaymentDurationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentDurationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentDurationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          findFirst: {
            args: Prisma.PaymentDurationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentDurationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          findMany: {
            args: Prisma.PaymentDurationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>[]
          }
          create: {
            args: Prisma.PaymentDurationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          createMany: {
            args: Prisma.PaymentDurationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentDurationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          update: {
            args: Prisma.PaymentDurationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          deleteMany: {
            args: Prisma.PaymentDurationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentDurationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentDurationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentDurationPayload>
          }
          aggregate: {
            args: Prisma.PaymentDurationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePaymentDuration>
          }
          groupBy: {
            args: Prisma.PaymentDurationGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentDurationGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentDurationCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentDurationCountAggregateOutputType> | number
          }
        }
      }
      Payment: {
        payload: Prisma.$PaymentPayload<ExtArgs>
        fields: Prisma.PaymentFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          findFirst: {
            args: Prisma.PaymentFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          findMany: {
            args: Prisma.PaymentFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>[]
          }
          create: {
            args: Prisma.PaymentCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          createMany: {
            args: Prisma.PaymentCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          update: {
            args: Prisma.PaymentUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          deleteMany: {
            args: Prisma.PaymentDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPayload>
          }
          aggregate: {
            args: Prisma.PaymentAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePayment>
          }
          groupBy: {
            args: Prisma.PaymentGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentCountAggregateOutputType> | number
          }
        }
      }
      PaymentMade: {
        payload: Prisma.$PaymentMadePayload<ExtArgs>
        fields: Prisma.PaymentMadeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentMadeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentMadeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          findFirst: {
            args: Prisma.PaymentMadeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentMadeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          findMany: {
            args: Prisma.PaymentMadeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>[]
          }
          create: {
            args: Prisma.PaymentMadeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          createMany: {
            args: Prisma.PaymentMadeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentMadeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          update: {
            args: Prisma.PaymentMadeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          deleteMany: {
            args: Prisma.PaymentMadeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentMadeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentMadeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentMadePayload>
          }
          aggregate: {
            args: Prisma.PaymentMadeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePaymentMade>
          }
          groupBy: {
            args: Prisma.PaymentMadeGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentMadeGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentMadeCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentMadeCountAggregateOutputType> | number
          }
        }
      }
      PaymentPartMade: {
        payload: Prisma.$PaymentPartMadePayload<ExtArgs>
        fields: Prisma.PaymentPartMadeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentPartMadeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentPartMadeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          findFirst: {
            args: Prisma.PaymentPartMadeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentPartMadeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          findMany: {
            args: Prisma.PaymentPartMadeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>[]
          }
          create: {
            args: Prisma.PaymentPartMadeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          createMany: {
            args: Prisma.PaymentPartMadeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentPartMadeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          update: {
            args: Prisma.PaymentPartMadeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          deleteMany: {
            args: Prisma.PaymentPartMadeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentPartMadeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentPartMadeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentPartMadePayload>
          }
          aggregate: {
            args: Prisma.PaymentPartMadeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePaymentPartMade>
          }
          groupBy: {
            args: Prisma.PaymentPartMadeGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentPartMadeGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentPartMadeCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentPartMadeCountAggregateOutputType> | number
          }
        }
      }
      PaymentAttempt: {
        payload: Prisma.$PaymentAttemptPayload<ExtArgs>
        fields: Prisma.PaymentAttemptFieldRefs
        operations: {
          findUnique: {
            args: Prisma.PaymentAttemptFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.PaymentAttemptFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          findFirst: {
            args: Prisma.PaymentAttemptFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.PaymentAttemptFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          findMany: {
            args: Prisma.PaymentAttemptFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>[]
          }
          create: {
            args: Prisma.PaymentAttemptCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          createMany: {
            args: Prisma.PaymentAttemptCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.PaymentAttemptDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          update: {
            args: Prisma.PaymentAttemptUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          deleteMany: {
            args: Prisma.PaymentAttemptDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.PaymentAttemptUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.PaymentAttemptUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$PaymentAttemptPayload>
          }
          aggregate: {
            args: Prisma.PaymentAttemptAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregatePaymentAttempt>
          }
          groupBy: {
            args: Prisma.PaymentAttemptGroupByArgs<ExtArgs>
            result: $Utils.Optional<PaymentAttemptGroupByOutputType>[]
          }
          count: {
            args: Prisma.PaymentAttemptCountArgs<ExtArgs>
            result: $Utils.Optional<PaymentAttemptCountAggregateOutputType> | number
          }
        }
      }
      ClassSubjectTemplate: {
        payload: Prisma.$ClassSubjectTemplatePayload<ExtArgs>
        fields: Prisma.ClassSubjectTemplateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ClassSubjectTemplateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ClassSubjectTemplateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          findFirst: {
            args: Prisma.ClassSubjectTemplateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ClassSubjectTemplateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          findMany: {
            args: Prisma.ClassSubjectTemplateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>[]
          }
          create: {
            args: Prisma.ClassSubjectTemplateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          createMany: {
            args: Prisma.ClassSubjectTemplateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ClassSubjectTemplateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          update: {
            args: Prisma.ClassSubjectTemplateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          deleteMany: {
            args: Prisma.ClassSubjectTemplateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ClassSubjectTemplateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ClassSubjectTemplateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSubjectTemplatePayload>
          }
          aggregate: {
            args: Prisma.ClassSubjectTemplateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateClassSubjectTemplate>
          }
          groupBy: {
            args: Prisma.ClassSubjectTemplateGroupByArgs<ExtArgs>
            result: $Utils.Optional<ClassSubjectTemplateGroupByOutputType>[]
          }
          count: {
            args: Prisma.ClassSubjectTemplateCountArgs<ExtArgs>
            result: $Utils.Optional<ClassSubjectTemplateCountAggregateOutputType> | number
          }
        }
      }
      SessionClass: {
        payload: Prisma.$SessionClassPayload<ExtArgs>
        fields: Prisma.SessionClassFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionClassFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionClassFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          findFirst: {
            args: Prisma.SessionClassFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionClassFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          findMany: {
            args: Prisma.SessionClassFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>[]
          }
          create: {
            args: Prisma.SessionClassCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          createMany: {
            args: Prisma.SessionClassCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionClassDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          update: {
            args: Prisma.SessionClassUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          deleteMany: {
            args: Prisma.SessionClassDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionClassUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionClassUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassPayload>
          }
          aggregate: {
            args: Prisma.SessionClassAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSessionClass>
          }
          groupBy: {
            args: Prisma.SessionClassGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionClassGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionClassCountArgs<ExtArgs>
            result: $Utils.Optional<SessionClassCountAggregateOutputType> | number
          }
        }
      }
      SessionClassSubject: {
        payload: Prisma.$SessionClassSubjectPayload<ExtArgs>
        fields: Prisma.SessionClassSubjectFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionClassSubjectFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionClassSubjectFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          findFirst: {
            args: Prisma.SessionClassSubjectFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionClassSubjectFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          findMany: {
            args: Prisma.SessionClassSubjectFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>[]
          }
          create: {
            args: Prisma.SessionClassSubjectCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          createMany: {
            args: Prisma.SessionClassSubjectCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionClassSubjectDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          update: {
            args: Prisma.SessionClassSubjectUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          deleteMany: {
            args: Prisma.SessionClassSubjectDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionClassSubjectUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionClassSubjectUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassSubjectPayload>
          }
          aggregate: {
            args: Prisma.SessionClassSubjectAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSessionClassSubject>
          }
          groupBy: {
            args: Prisma.SessionClassSubjectGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionClassSubjectGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionClassSubjectCountArgs<ExtArgs>
            result: $Utils.Optional<SessionClassSubjectCountAggregateOutputType> | number
          }
        }
      }
      SessionClassStudentSubject: {
        payload: Prisma.$SessionClassStudentSubjectPayload<ExtArgs>
        fields: Prisma.SessionClassStudentSubjectFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionClassStudentSubjectFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionClassStudentSubjectFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          findFirst: {
            args: Prisma.SessionClassStudentSubjectFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionClassStudentSubjectFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          findMany: {
            args: Prisma.SessionClassStudentSubjectFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>[]
          }
          create: {
            args: Prisma.SessionClassStudentSubjectCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          createMany: {
            args: Prisma.SessionClassStudentSubjectCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionClassStudentSubjectDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          update: {
            args: Prisma.SessionClassStudentSubjectUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          deleteMany: {
            args: Prisma.SessionClassStudentSubjectDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionClassStudentSubjectUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionClassStudentSubjectUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassStudentSubjectPayload>
          }
          aggregate: {
            args: Prisma.SessionClassStudentSubjectAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSessionClassStudentSubject>
          }
          groupBy: {
            args: Prisma.SessionClassStudentSubjectGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionClassStudentSubjectGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionClassStudentSubjectCountArgs<ExtArgs>
            result: $Utils.Optional<SessionClassStudentSubjectCountAggregateOutputType> | number
          }
        }
      }
      ClassSpecialization: {
        payload: Prisma.$ClassSpecializationPayload<ExtArgs>
        fields: Prisma.ClassSpecializationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ClassSpecializationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ClassSpecializationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          findFirst: {
            args: Prisma.ClassSpecializationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ClassSpecializationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          findMany: {
            args: Prisma.ClassSpecializationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>[]
          }
          create: {
            args: Prisma.ClassSpecializationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          createMany: {
            args: Prisma.ClassSpecializationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ClassSpecializationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          update: {
            args: Prisma.ClassSpecializationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          deleteMany: {
            args: Prisma.ClassSpecializationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ClassSpecializationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ClassSpecializationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassSpecializationPayload>
          }
          aggregate: {
            args: Prisma.ClassSpecializationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateClassSpecialization>
          }
          groupBy: {
            args: Prisma.ClassSpecializationGroupByArgs<ExtArgs>
            result: $Utils.Optional<ClassSpecializationGroupByOutputType>[]
          }
          count: {
            args: Prisma.ClassSpecializationCountArgs<ExtArgs>
            result: $Utils.Optional<ClassSpecializationCountAggregateOutputType> | number
          }
        }
      }
      ClassGroup: {
        payload: Prisma.$ClassGroupPayload<ExtArgs>
        fields: Prisma.ClassGroupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ClassGroupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ClassGroupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          findFirst: {
            args: Prisma.ClassGroupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ClassGroupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          findMany: {
            args: Prisma.ClassGroupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>[]
          }
          create: {
            args: Prisma.ClassGroupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          createMany: {
            args: Prisma.ClassGroupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ClassGroupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          update: {
            args: Prisma.ClassGroupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          deleteMany: {
            args: Prisma.ClassGroupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ClassGroupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ClassGroupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassGroupPayload>
          }
          aggregate: {
            args: Prisma.ClassGroupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateClassGroup>
          }
          groupBy: {
            args: Prisma.ClassGroupGroupByArgs<ExtArgs>
            result: $Utils.Optional<ClassGroupGroupByOutputType>[]
          }
          count: {
            args: Prisma.ClassGroupCountArgs<ExtArgs>
            result: $Utils.Optional<ClassGroupCountAggregateOutputType> | number
          }
        }
      }
      ScoreType: {
        payload: Prisma.$ScoreTypePayload<ExtArgs>
        fields: Prisma.ScoreTypeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ScoreTypeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ScoreTypeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          findFirst: {
            args: Prisma.ScoreTypeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ScoreTypeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          findMany: {
            args: Prisma.ScoreTypeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>[]
          }
          create: {
            args: Prisma.ScoreTypeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          createMany: {
            args: Prisma.ScoreTypeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ScoreTypeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          update: {
            args: Prisma.ScoreTypeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          deleteMany: {
            args: Prisma.ScoreTypeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ScoreTypeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ScoreTypeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreTypePayload>
          }
          aggregate: {
            args: Prisma.ScoreTypeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateScoreType>
          }
          groupBy: {
            args: Prisma.ScoreTypeGroupByArgs<ExtArgs>
            result: $Utils.Optional<ScoreTypeGroupByOutputType>[]
          }
          count: {
            args: Prisma.ScoreTypeCountArgs<ExtArgs>
            result: $Utils.Optional<ScoreTypeCountAggregateOutputType> | number
          }
        }
      }
      ScoreDisplayType: {
        payload: Prisma.$ScoreDisplayTypePayload<ExtArgs>
        fields: Prisma.ScoreDisplayTypeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ScoreDisplayTypeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ScoreDisplayTypeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          findFirst: {
            args: Prisma.ScoreDisplayTypeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ScoreDisplayTypeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          findMany: {
            args: Prisma.ScoreDisplayTypeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>[]
          }
          create: {
            args: Prisma.ScoreDisplayTypeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          createMany: {
            args: Prisma.ScoreDisplayTypeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ScoreDisplayTypeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          update: {
            args: Prisma.ScoreDisplayTypeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          deleteMany: {
            args: Prisma.ScoreDisplayTypeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ScoreDisplayTypeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ScoreDisplayTypeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ScoreDisplayTypePayload>
          }
          aggregate: {
            args: Prisma.ScoreDisplayTypeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateScoreDisplayType>
          }
          groupBy: {
            args: Prisma.ScoreDisplayTypeGroupByArgs<ExtArgs>
            result: $Utils.Optional<ScoreDisplayTypeGroupByOutputType>[]
          }
          count: {
            args: Prisma.ScoreDisplayTypeCountArgs<ExtArgs>
            result: $Utils.Optional<ScoreDisplayTypeCountAggregateOutputType> | number
          }
        }
      }
      StudentScore: {
        payload: Prisma.$StudentScorePayload<ExtArgs>
        fields: Prisma.StudentScoreFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StudentScoreFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StudentScoreFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          findFirst: {
            args: Prisma.StudentScoreFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StudentScoreFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          findMany: {
            args: Prisma.StudentScoreFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>[]
          }
          create: {
            args: Prisma.StudentScoreCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          createMany: {
            args: Prisma.StudentScoreCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StudentScoreDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          update: {
            args: Prisma.StudentScoreUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          deleteMany: {
            args: Prisma.StudentScoreDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StudentScoreUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StudentScoreUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentScorePayload>
          }
          aggregate: {
            args: Prisma.StudentScoreAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStudentScore>
          }
          groupBy: {
            args: Prisma.StudentScoreGroupByArgs<ExtArgs>
            result: $Utils.Optional<StudentScoreGroupByOutputType>[]
          }
          count: {
            args: Prisma.StudentScoreCountArgs<ExtArgs>
            result: $Utils.Optional<StudentScoreCountAggregateOutputType> | number
          }
        }
      }
      StudentTotalScore: {
        payload: Prisma.$StudentTotalScorePayload<ExtArgs>
        fields: Prisma.StudentTotalScoreFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StudentTotalScoreFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StudentTotalScoreFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          findFirst: {
            args: Prisma.StudentTotalScoreFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StudentTotalScoreFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          findMany: {
            args: Prisma.StudentTotalScoreFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>[]
          }
          create: {
            args: Prisma.StudentTotalScoreCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          createMany: {
            args: Prisma.StudentTotalScoreCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StudentTotalScoreDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          update: {
            args: Prisma.StudentTotalScoreUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          deleteMany: {
            args: Prisma.StudentTotalScoreDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StudentTotalScoreUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StudentTotalScoreUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTotalScorePayload>
          }
          aggregate: {
            args: Prisma.StudentTotalScoreAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStudentTotalScore>
          }
          groupBy: {
            args: Prisma.StudentTotalScoreGroupByArgs<ExtArgs>
            result: $Utils.Optional<StudentTotalScoreGroupByOutputType>[]
          }
          count: {
            args: Prisma.StudentTotalScoreCountArgs<ExtArgs>
            result: $Utils.Optional<StudentTotalScoreCountAggregateOutputType> | number
          }
        }
      }
      StudentTracking: {
        payload: Prisma.$StudentTrackingPayload<ExtArgs>
        fields: Prisma.StudentTrackingFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StudentTrackingFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StudentTrackingFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          findFirst: {
            args: Prisma.StudentTrackingFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StudentTrackingFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          findMany: {
            args: Prisma.StudentTrackingFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>[]
          }
          create: {
            args: Prisma.StudentTrackingCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          createMany: {
            args: Prisma.StudentTrackingCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StudentTrackingDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          update: {
            args: Prisma.StudentTrackingUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          deleteMany: {
            args: Prisma.StudentTrackingDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StudentTrackingUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StudentTrackingUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StudentTrackingPayload>
          }
          aggregate: {
            args: Prisma.StudentTrackingAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateStudentTracking>
          }
          groupBy: {
            args: Prisma.StudentTrackingGroupByArgs<ExtArgs>
            result: $Utils.Optional<StudentTrackingGroupByOutputType>[]
          }
          count: {
            args: Prisma.StudentTrackingCountArgs<ExtArgs>
            result: $Utils.Optional<StudentTrackingCountAggregateOutputType> | number
          }
        }
      }
      ReportCardSetting: {
        payload: Prisma.$ReportCardSettingPayload<ExtArgs>
        fields: Prisma.ReportCardSettingFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ReportCardSettingFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ReportCardSettingFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          findFirst: {
            args: Prisma.ReportCardSettingFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ReportCardSettingFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          findMany: {
            args: Prisma.ReportCardSettingFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>[]
          }
          create: {
            args: Prisma.ReportCardSettingCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          createMany: {
            args: Prisma.ReportCardSettingCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ReportCardSettingDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          update: {
            args: Prisma.ReportCardSettingUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          deleteMany: {
            args: Prisma.ReportCardSettingDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ReportCardSettingUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ReportCardSettingUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ReportCardSettingPayload>
          }
          aggregate: {
            args: Prisma.ReportCardSettingAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateReportCardSetting>
          }
          groupBy: {
            args: Prisma.ReportCardSettingGroupByArgs<ExtArgs>
            result: $Utils.Optional<ReportCardSettingGroupByOutputType>[]
          }
          count: {
            args: Prisma.ReportCardSettingCountArgs<ExtArgs>
            result: $Utils.Optional<ReportCardSettingCountAggregateOutputType> | number
          }
        }
      }
      ClassScoreSetupTemplate: {
        payload: Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>
        fields: Prisma.ClassScoreSetupTemplateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ClassScoreSetupTemplateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ClassScoreSetupTemplateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          findFirst: {
            args: Prisma.ClassScoreSetupTemplateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ClassScoreSetupTemplateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          findMany: {
            args: Prisma.ClassScoreSetupTemplateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>[]
          }
          create: {
            args: Prisma.ClassScoreSetupTemplateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          createMany: {
            args: Prisma.ClassScoreSetupTemplateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ClassScoreSetupTemplateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          update: {
            args: Prisma.ClassScoreSetupTemplateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          deleteMany: {
            args: Prisma.ClassScoreSetupTemplateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ClassScoreSetupTemplateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ClassScoreSetupTemplateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ClassScoreSetupTemplatePayload>
          }
          aggregate: {
            args: Prisma.ClassScoreSetupTemplateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateClassScoreSetupTemplate>
          }
          groupBy: {
            args: Prisma.ClassScoreSetupTemplateGroupByArgs<ExtArgs>
            result: $Utils.Optional<ClassScoreSetupTemplateGroupByOutputType>[]
          }
          count: {
            args: Prisma.ClassScoreSetupTemplateCountArgs<ExtArgs>
            result: $Utils.Optional<ClassScoreSetupTemplateCountAggregateOutputType> | number
          }
        }
      }
      SessionClassScoreSetup: {
        payload: Prisma.$SessionClassScoreSetupPayload<ExtArgs>
        fields: Prisma.SessionClassScoreSetupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SessionClassScoreSetupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SessionClassScoreSetupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          findFirst: {
            args: Prisma.SessionClassScoreSetupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SessionClassScoreSetupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          findMany: {
            args: Prisma.SessionClassScoreSetupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>[]
          }
          create: {
            args: Prisma.SessionClassScoreSetupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          createMany: {
            args: Prisma.SessionClassScoreSetupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SessionClassScoreSetupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          update: {
            args: Prisma.SessionClassScoreSetupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          deleteMany: {
            args: Prisma.SessionClassScoreSetupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SessionClassScoreSetupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SessionClassScoreSetupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SessionClassScoreSetupPayload>
          }
          aggregate: {
            args: Prisma.SessionClassScoreSetupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSessionClassScoreSetup>
          }
          groupBy: {
            args: Prisma.SessionClassScoreSetupGroupByArgs<ExtArgs>
            result: $Utils.Optional<SessionClassScoreSetupGroupByOutputType>[]
          }
          count: {
            args: Prisma.SessionClassScoreSetupCountArgs<ExtArgs>
            result: $Utils.Optional<SessionClassScoreSetupCountAggregateOutputType> | number
          }
        }
      }
      ExamType: {
        payload: Prisma.$ExamTypePayload<ExtArgs>
        fields: Prisma.ExamTypeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamTypeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamTypeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          findFirst: {
            args: Prisma.ExamTypeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamTypeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          findMany: {
            args: Prisma.ExamTypeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>[]
          }
          create: {
            args: Prisma.ExamTypeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          createMany: {
            args: Prisma.ExamTypeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamTypeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          update: {
            args: Prisma.ExamTypeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          deleteMany: {
            args: Prisma.ExamTypeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamTypeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamTypeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamTypePayload>
          }
          aggregate: {
            args: Prisma.ExamTypeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamType>
          }
          groupBy: {
            args: Prisma.ExamTypeGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamTypeGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamTypeCountArgs<ExtArgs>
            result: $Utils.Optional<ExamTypeCountAggregateOutputType> | number
          }
        }
      }
      ExamCategory: {
        payload: Prisma.$ExamCategoryPayload<ExtArgs>
        fields: Prisma.ExamCategoryFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamCategoryFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamCategoryFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          findFirst: {
            args: Prisma.ExamCategoryFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamCategoryFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          findMany: {
            args: Prisma.ExamCategoryFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>[]
          }
          create: {
            args: Prisma.ExamCategoryCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          createMany: {
            args: Prisma.ExamCategoryCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamCategoryDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          update: {
            args: Prisma.ExamCategoryUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          deleteMany: {
            args: Prisma.ExamCategoryDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamCategoryUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamCategoryUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamCategoryPayload>
          }
          aggregate: {
            args: Prisma.ExamCategoryAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamCategory>
          }
          groupBy: {
            args: Prisma.ExamCategoryGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamCategoryGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamCategoryCountArgs<ExtArgs>
            result: $Utils.Optional<ExamCategoryCountAggregateOutputType> | number
          }
        }
      }
      ExamQuestionMarker: {
        payload: Prisma.$ExamQuestionMarkerPayload<ExtArgs>
        fields: Prisma.ExamQuestionMarkerFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamQuestionMarkerFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamQuestionMarkerFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          findFirst: {
            args: Prisma.ExamQuestionMarkerFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamQuestionMarkerFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          findMany: {
            args: Prisma.ExamQuestionMarkerFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>[]
          }
          create: {
            args: Prisma.ExamQuestionMarkerCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          createMany: {
            args: Prisma.ExamQuestionMarkerCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamQuestionMarkerDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          update: {
            args: Prisma.ExamQuestionMarkerUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          deleteMany: {
            args: Prisma.ExamQuestionMarkerDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamQuestionMarkerUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamQuestionMarkerUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionMarkerPayload>
          }
          aggregate: {
            args: Prisma.ExamQuestionMarkerAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamQuestionMarker>
          }
          groupBy: {
            args: Prisma.ExamQuestionMarkerGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionMarkerGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamQuestionMarkerCountArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionMarkerCountAggregateOutputType> | number
          }
        }
      }
      QuestionTemplate: {
        payload: Prisma.$QuestionTemplatePayload<ExtArgs>
        fields: Prisma.QuestionTemplateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.QuestionTemplateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.QuestionTemplateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          findFirst: {
            args: Prisma.QuestionTemplateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.QuestionTemplateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          findMany: {
            args: Prisma.QuestionTemplateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>[]
          }
          create: {
            args: Prisma.QuestionTemplateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          createMany: {
            args: Prisma.QuestionTemplateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.QuestionTemplateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          update: {
            args: Prisma.QuestionTemplateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          deleteMany: {
            args: Prisma.QuestionTemplateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.QuestionTemplateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.QuestionTemplateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionTemplatePayload>
          }
          aggregate: {
            args: Prisma.QuestionTemplateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateQuestionTemplate>
          }
          groupBy: {
            args: Prisma.QuestionTemplateGroupByArgs<ExtArgs>
            result: $Utils.Optional<QuestionTemplateGroupByOutputType>[]
          }
          count: {
            args: Prisma.QuestionTemplateCountArgs<ExtArgs>
            result: $Utils.Optional<QuestionTemplateCountAggregateOutputType> | number
          }
        }
      }
      Question: {
        payload: Prisma.$QuestionPayload<ExtArgs>
        fields: Prisma.QuestionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.QuestionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.QuestionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          findFirst: {
            args: Prisma.QuestionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.QuestionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          findMany: {
            args: Prisma.QuestionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>[]
          }
          create: {
            args: Prisma.QuestionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          createMany: {
            args: Prisma.QuestionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.QuestionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          update: {
            args: Prisma.QuestionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          deleteMany: {
            args: Prisma.QuestionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.QuestionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.QuestionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$QuestionPayload>
          }
          aggregate: {
            args: Prisma.QuestionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateQuestion>
          }
          groupBy: {
            args: Prisma.QuestionGroupByArgs<ExtArgs>
            result: $Utils.Optional<QuestionGroupByOutputType>[]
          }
          count: {
            args: Prisma.QuestionCountArgs<ExtArgs>
            result: $Utils.Optional<QuestionCountAggregateOutputType> | number
          }
        }
      }
      ExamVisibility: {
        payload: Prisma.$ExamVisibilityPayload<ExtArgs>
        fields: Prisma.ExamVisibilityFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamVisibilityFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamVisibilityFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          findFirst: {
            args: Prisma.ExamVisibilityFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamVisibilityFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          findMany: {
            args: Prisma.ExamVisibilityFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>[]
          }
          create: {
            args: Prisma.ExamVisibilityCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          createMany: {
            args: Prisma.ExamVisibilityCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamVisibilityDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          update: {
            args: Prisma.ExamVisibilityUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          deleteMany: {
            args: Prisma.ExamVisibilityDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamVisibilityUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamVisibilityUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamVisibilityPayload>
          }
          aggregate: {
            args: Prisma.ExamVisibilityAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamVisibility>
          }
          groupBy: {
            args: Prisma.ExamVisibilityGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamVisibilityGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamVisibilityCountArgs<ExtArgs>
            result: $Utils.Optional<ExamVisibilityCountAggregateOutputType> | number
          }
        }
      }
      Exam: {
        payload: Prisma.$ExamPayload<ExtArgs>
        fields: Prisma.ExamFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          findFirst: {
            args: Prisma.ExamFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          findMany: {
            args: Prisma.ExamFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>[]
          }
          create: {
            args: Prisma.ExamCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          createMany: {
            args: Prisma.ExamCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          update: {
            args: Prisma.ExamUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          deleteMany: {
            args: Prisma.ExamDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamPayload>
          }
          aggregate: {
            args: Prisma.ExamAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExam>
          }
          groupBy: {
            args: Prisma.ExamGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamCountArgs<ExtArgs>
            result: $Utils.Optional<ExamCountAggregateOutputType> | number
          }
        }
      }
      ExamQuestion: {
        payload: Prisma.$ExamQuestionPayload<ExtArgs>
        fields: Prisma.ExamQuestionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamQuestionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamQuestionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          findFirst: {
            args: Prisma.ExamQuestionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamQuestionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          findMany: {
            args: Prisma.ExamQuestionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>[]
          }
          create: {
            args: Prisma.ExamQuestionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          createMany: {
            args: Prisma.ExamQuestionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamQuestionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          update: {
            args: Prisma.ExamQuestionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          deleteMany: {
            args: Prisma.ExamQuestionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamQuestionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamQuestionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionPayload>
          }
          aggregate: {
            args: Prisma.ExamQuestionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamQuestion>
          }
          groupBy: {
            args: Prisma.ExamQuestionGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamQuestionCountArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionCountAggregateOutputType> | number
          }
        }
      }
      ExamScoreSetupLink: {
        payload: Prisma.$ExamScoreSetupLinkPayload<ExtArgs>
        fields: Prisma.ExamScoreSetupLinkFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamScoreSetupLinkFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamScoreSetupLinkFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          findFirst: {
            args: Prisma.ExamScoreSetupLinkFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamScoreSetupLinkFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          findMany: {
            args: Prisma.ExamScoreSetupLinkFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>[]
          }
          create: {
            args: Prisma.ExamScoreSetupLinkCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          createMany: {
            args: Prisma.ExamScoreSetupLinkCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamScoreSetupLinkDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          update: {
            args: Prisma.ExamScoreSetupLinkUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          deleteMany: {
            args: Prisma.ExamScoreSetupLinkDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamScoreSetupLinkUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamScoreSetupLinkUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamScoreSetupLinkPayload>
          }
          aggregate: {
            args: Prisma.ExamScoreSetupLinkAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamScoreSetupLink>
          }
          groupBy: {
            args: Prisma.ExamScoreSetupLinkGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamScoreSetupLinkGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamScoreSetupLinkCountArgs<ExtArgs>
            result: $Utils.Optional<ExamScoreSetupLinkCountAggregateOutputType> | number
          }
        }
      }
      ExamAttempt: {
        payload: Prisma.$ExamAttemptPayload<ExtArgs>
        fields: Prisma.ExamAttemptFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamAttemptFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamAttemptFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          findFirst: {
            args: Prisma.ExamAttemptFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamAttemptFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          findMany: {
            args: Prisma.ExamAttemptFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>[]
          }
          create: {
            args: Prisma.ExamAttemptCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          createMany: {
            args: Prisma.ExamAttemptCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamAttemptDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          update: {
            args: Prisma.ExamAttemptUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          deleteMany: {
            args: Prisma.ExamAttemptDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamAttemptUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamAttemptUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamAttemptPayload>
          }
          aggregate: {
            args: Prisma.ExamAttemptAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamAttempt>
          }
          groupBy: {
            args: Prisma.ExamAttemptGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamAttemptGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamAttemptCountArgs<ExtArgs>
            result: $Utils.Optional<ExamAttemptCountAggregateOutputType> | number
          }
        }
      }
      ExamQuestionAnswer: {
        payload: Prisma.$ExamQuestionAnswerPayload<ExtArgs>
        fields: Prisma.ExamQuestionAnswerFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamQuestionAnswerFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamQuestionAnswerFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          findFirst: {
            args: Prisma.ExamQuestionAnswerFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamQuestionAnswerFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          findMany: {
            args: Prisma.ExamQuestionAnswerFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>[]
          }
          create: {
            args: Prisma.ExamQuestionAnswerCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          createMany: {
            args: Prisma.ExamQuestionAnswerCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamQuestionAnswerDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          update: {
            args: Prisma.ExamQuestionAnswerUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          deleteMany: {
            args: Prisma.ExamQuestionAnswerDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamQuestionAnswerUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamQuestionAnswerUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamQuestionAnswerPayload>
          }
          aggregate: {
            args: Prisma.ExamQuestionAnswerAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamQuestionAnswer>
          }
          groupBy: {
            args: Prisma.ExamQuestionAnswerGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionAnswerGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamQuestionAnswerCountArgs<ExtArgs>
            result: $Utils.Optional<ExamQuestionAnswerCountAggregateOutputType> | number
          }
        }
      }
      ExamGift: {
        payload: Prisma.$ExamGiftPayload<ExtArgs>
        fields: Prisma.ExamGiftFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ExamGiftFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ExamGiftFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          findFirst: {
            args: Prisma.ExamGiftFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ExamGiftFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          findMany: {
            args: Prisma.ExamGiftFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>[]
          }
          create: {
            args: Prisma.ExamGiftCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          createMany: {
            args: Prisma.ExamGiftCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ExamGiftDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          update: {
            args: Prisma.ExamGiftUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          deleteMany: {
            args: Prisma.ExamGiftDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ExamGiftUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ExamGiftUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ExamGiftPayload>
          }
          aggregate: {
            args: Prisma.ExamGiftAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateExamGift>
          }
          groupBy: {
            args: Prisma.ExamGiftGroupByArgs<ExtArgs>
            result: $Utils.Optional<ExamGiftGroupByOutputType>[]
          }
          count: {
            args: Prisma.ExamGiftCountArgs<ExtArgs>
            result: $Utils.Optional<ExamGiftCountAggregateOutputType> | number
          }
        }
      }
      SchoolRecord: {
        payload: Prisma.$SchoolRecordPayload<ExtArgs>
        fields: Prisma.SchoolRecordFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SchoolRecordFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SchoolRecordFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          findFirst: {
            args: Prisma.SchoolRecordFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SchoolRecordFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          findMany: {
            args: Prisma.SchoolRecordFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>[]
          }
          create: {
            args: Prisma.SchoolRecordCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          createMany: {
            args: Prisma.SchoolRecordCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SchoolRecordDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          update: {
            args: Prisma.SchoolRecordUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          deleteMany: {
            args: Prisma.SchoolRecordDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SchoolRecordUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SchoolRecordUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SchoolRecordPayload>
          }
          aggregate: {
            args: Prisma.SchoolRecordAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSchoolRecord>
          }
          groupBy: {
            args: Prisma.SchoolRecordGroupByArgs<ExtArgs>
            result: $Utils.Optional<SchoolRecordGroupByOutputType>[]
          }
          count: {
            args: Prisma.SchoolRecordCountArgs<ExtArgs>
            result: $Utils.Optional<SchoolRecordCountAggregateOutputType> | number
          }
        }
      }
      ComponentGroup: {
        payload: Prisma.$ComponentGroupPayload<ExtArgs>
        fields: Prisma.ComponentGroupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ComponentGroupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ComponentGroupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          findFirst: {
            args: Prisma.ComponentGroupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ComponentGroupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          findMany: {
            args: Prisma.ComponentGroupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>[]
          }
          create: {
            args: Prisma.ComponentGroupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          createMany: {
            args: Prisma.ComponentGroupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ComponentGroupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          update: {
            args: Prisma.ComponentGroupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          deleteMany: {
            args: Prisma.ComponentGroupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ComponentGroupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ComponentGroupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentGroupPayload>
          }
          aggregate: {
            args: Prisma.ComponentGroupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateComponentGroup>
          }
          groupBy: {
            args: Prisma.ComponentGroupGroupByArgs<ExtArgs>
            result: $Utils.Optional<ComponentGroupGroupByOutputType>[]
          }
          count: {
            args: Prisma.ComponentGroupCountArgs<ExtArgs>
            result: $Utils.Optional<ComponentGroupCountAggregateOutputType> | number
          }
        }
      }
      Component: {
        payload: Prisma.$ComponentPayload<ExtArgs>
        fields: Prisma.ComponentFieldRefs
        operations: {
          findUnique: {
            args: Prisma.ComponentFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.ComponentFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          findFirst: {
            args: Prisma.ComponentFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.ComponentFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          findMany: {
            args: Prisma.ComponentFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>[]
          }
          create: {
            args: Prisma.ComponentCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          createMany: {
            args: Prisma.ComponentCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.ComponentDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          update: {
            args: Prisma.ComponentUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          deleteMany: {
            args: Prisma.ComponentDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.ComponentUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.ComponentUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$ComponentPayload>
          }
          aggregate: {
            args: Prisma.ComponentAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateComponent>
          }
          groupBy: {
            args: Prisma.ComponentGroupByArgs<ExtArgs>
            result: $Utils.Optional<ComponentGroupByOutputType>[]
          }
          count: {
            args: Prisma.ComponentCountArgs<ExtArgs>
            result: $Utils.Optional<ComponentCountAggregateOutputType> | number
          }
        }
      }
      CrudPage: {
        payload: Prisma.$CrudPagePayload<ExtArgs>
        fields: Prisma.CrudPageFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CrudPageFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CrudPageFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          findFirst: {
            args: Prisma.CrudPageFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CrudPageFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          findMany: {
            args: Prisma.CrudPageFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>[]
          }
          create: {
            args: Prisma.CrudPageCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          createMany: {
            args: Prisma.CrudPageCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.CrudPageDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          update: {
            args: Prisma.CrudPageUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          deleteMany: {
            args: Prisma.CrudPageDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CrudPageUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.CrudPageUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudPagePayload>
          }
          aggregate: {
            args: Prisma.CrudPageAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCrudPage>
          }
          groupBy: {
            args: Prisma.CrudPageGroupByArgs<ExtArgs>
            result: $Utils.Optional<CrudPageGroupByOutputType>[]
          }
          count: {
            args: Prisma.CrudPageCountArgs<ExtArgs>
            result: $Utils.Optional<CrudPageCountAggregateOutputType> | number
          }
        }
      }
      AppUserType: {
        payload: Prisma.$AppUserTypePayload<ExtArgs>
        fields: Prisma.AppUserTypeFieldRefs
        operations: {
          findUnique: {
            args: Prisma.AppUserTypeFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.AppUserTypeFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          findFirst: {
            args: Prisma.AppUserTypeFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.AppUserTypeFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          findMany: {
            args: Prisma.AppUserTypeFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>[]
          }
          create: {
            args: Prisma.AppUserTypeCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          createMany: {
            args: Prisma.AppUserTypeCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.AppUserTypeDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          update: {
            args: Prisma.AppUserTypeUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          deleteMany: {
            args: Prisma.AppUserTypeDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.AppUserTypeUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.AppUserTypeUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$AppUserTypePayload>
          }
          aggregate: {
            args: Prisma.AppUserTypeAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateAppUserType>
          }
          groupBy: {
            args: Prisma.AppUserTypeGroupByArgs<ExtArgs>
            result: $Utils.Optional<AppUserTypeGroupByOutputType>[]
          }
          count: {
            args: Prisma.AppUserTypeCountArgs<ExtArgs>
            result: $Utils.Optional<AppUserTypeCountAggregateOutputType> | number
          }
        }
      }
      MenuGroup: {
        payload: Prisma.$MenuGroupPayload<ExtArgs>
        fields: Prisma.MenuGroupFieldRefs
        operations: {
          findUnique: {
            args: Prisma.MenuGroupFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.MenuGroupFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          findFirst: {
            args: Prisma.MenuGroupFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.MenuGroupFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          findMany: {
            args: Prisma.MenuGroupFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>[]
          }
          create: {
            args: Prisma.MenuGroupCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          createMany: {
            args: Prisma.MenuGroupCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.MenuGroupDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          update: {
            args: Prisma.MenuGroupUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          deleteMany: {
            args: Prisma.MenuGroupDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.MenuGroupUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.MenuGroupUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$MenuGroupPayload>
          }
          aggregate: {
            args: Prisma.MenuGroupAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateMenuGroup>
          }
          groupBy: {
            args: Prisma.MenuGroupGroupByArgs<ExtArgs>
            result: $Utils.Optional<MenuGroupGroupByOutputType>[]
          }
          count: {
            args: Prisma.MenuGroupCountArgs<ExtArgs>
            result: $Utils.Optional<MenuGroupCountAggregateOutputType> | number
          }
        }
      }
      SystemConfiguration: {
        payload: Prisma.$SystemConfigurationPayload<ExtArgs>
        fields: Prisma.SystemConfigurationFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SystemConfigurationFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SystemConfigurationFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          findFirst: {
            args: Prisma.SystemConfigurationFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SystemConfigurationFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          findMany: {
            args: Prisma.SystemConfigurationFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>[]
          }
          create: {
            args: Prisma.SystemConfigurationCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          createMany: {
            args: Prisma.SystemConfigurationCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SystemConfigurationDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          update: {
            args: Prisma.SystemConfigurationUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          deleteMany: {
            args: Prisma.SystemConfigurationDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SystemConfigurationUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SystemConfigurationUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SystemConfigurationPayload>
          }
          aggregate: {
            args: Prisma.SystemConfigurationAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSystemConfiguration>
          }
          groupBy: {
            args: Prisma.SystemConfigurationGroupByArgs<ExtArgs>
            result: $Utils.Optional<SystemConfigurationGroupByOutputType>[]
          }
          count: {
            args: Prisma.SystemConfigurationCountArgs<ExtArgs>
            result: $Utils.Optional<SystemConfigurationCountAggregateOutputType> | number
          }
        }
      }
      CrudFront: {
        payload: Prisma.$CrudFrontPayload<ExtArgs>
        fields: Prisma.CrudFrontFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CrudFrontFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CrudFrontFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          findFirst: {
            args: Prisma.CrudFrontFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CrudFrontFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          findMany: {
            args: Prisma.CrudFrontFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>[]
          }
          create: {
            args: Prisma.CrudFrontCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          createMany: {
            args: Prisma.CrudFrontCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.CrudFrontDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          update: {
            args: Prisma.CrudFrontUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          deleteMany: {
            args: Prisma.CrudFrontDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CrudFrontUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.CrudFrontUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudFrontPayload>
          }
          aggregate: {
            args: Prisma.CrudFrontAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCrudFront>
          }
          groupBy: {
            args: Prisma.CrudFrontGroupByArgs<ExtArgs>
            result: $Utils.Optional<CrudFrontGroupByOutputType>[]
          }
          count: {
            args: Prisma.CrudFrontCountArgs<ExtArgs>
            result: $Utils.Optional<CrudFrontCountAggregateOutputType> | number
          }
        }
      }
      CrudUtil: {
        payload: Prisma.$CrudUtilPayload<ExtArgs>
        fields: Prisma.CrudUtilFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CrudUtilFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CrudUtilFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          findFirst: {
            args: Prisma.CrudUtilFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CrudUtilFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          findMany: {
            args: Prisma.CrudUtilFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>[]
          }
          create: {
            args: Prisma.CrudUtilCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          createMany: {
            args: Prisma.CrudUtilCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.CrudUtilDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          update: {
            args: Prisma.CrudUtilUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          deleteMany: {
            args: Prisma.CrudUtilDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CrudUtilUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.CrudUtilUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CrudUtilPayload>
          }
          aggregate: {
            args: Prisma.CrudUtilAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCrudUtil>
          }
          groupBy: {
            args: Prisma.CrudUtilGroupByArgs<ExtArgs>
            result: $Utils.Optional<CrudUtilGroupByOutputType>[]
          }
          count: {
            args: Prisma.CrudUtilCountArgs<ExtArgs>
            result: $Utils.Optional<CrudUtilCountAggregateOutputType> | number
          }
        }
      }
      Region: {
        payload: Prisma.$RegionPayload<ExtArgs>
        fields: Prisma.RegionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.RegionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.RegionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          findFirst: {
            args: Prisma.RegionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.RegionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          findMany: {
            args: Prisma.RegionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>[]
          }
          create: {
            args: Prisma.RegionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          createMany: {
            args: Prisma.RegionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.RegionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          update: {
            args: Prisma.RegionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          deleteMany: {
            args: Prisma.RegionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.RegionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.RegionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$RegionPayload>
          }
          aggregate: {
            args: Prisma.RegionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateRegion>
          }
          groupBy: {
            args: Prisma.RegionGroupByArgs<ExtArgs>
            result: $Utils.Optional<RegionGroupByOutputType>[]
          }
          count: {
            args: Prisma.RegionCountArgs<ExtArgs>
            result: $Utils.Optional<RegionCountAggregateOutputType> | number
          }
        }
      }
      Subregion: {
        payload: Prisma.$SubregionPayload<ExtArgs>
        fields: Prisma.SubregionFieldRefs
        operations: {
          findUnique: {
            args: Prisma.SubregionFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.SubregionFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          findFirst: {
            args: Prisma.SubregionFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.SubregionFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          findMany: {
            args: Prisma.SubregionFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>[]
          }
          create: {
            args: Prisma.SubregionCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          createMany: {
            args: Prisma.SubregionCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.SubregionDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          update: {
            args: Prisma.SubregionUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          deleteMany: {
            args: Prisma.SubregionDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.SubregionUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.SubregionUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$SubregionPayload>
          }
          aggregate: {
            args: Prisma.SubregionAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateSubregion>
          }
          groupBy: {
            args: Prisma.SubregionGroupByArgs<ExtArgs>
            result: $Utils.Optional<SubregionGroupByOutputType>[]
          }
          count: {
            args: Prisma.SubregionCountArgs<ExtArgs>
            result: $Utils.Optional<SubregionCountAggregateOutputType> | number
          }
        }
      }
      Country: {
        payload: Prisma.$CountryPayload<ExtArgs>
        fields: Prisma.CountryFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CountryFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CountryFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          findFirst: {
            args: Prisma.CountryFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CountryFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          findMany: {
            args: Prisma.CountryFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>[]
          }
          create: {
            args: Prisma.CountryCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          createMany: {
            args: Prisma.CountryCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.CountryDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          update: {
            args: Prisma.CountryUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          deleteMany: {
            args: Prisma.CountryDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CountryUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.CountryUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CountryPayload>
          }
          aggregate: {
            args: Prisma.CountryAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCountry>
          }
          groupBy: {
            args: Prisma.CountryGroupByArgs<ExtArgs>
            result: $Utils.Optional<CountryGroupByOutputType>[]
          }
          count: {
            args: Prisma.CountryCountArgs<ExtArgs>
            result: $Utils.Optional<CountryCountAggregateOutputType> | number
          }
        }
      }
      State: {
        payload: Prisma.$StatePayload<ExtArgs>
        fields: Prisma.StateFieldRefs
        operations: {
          findUnique: {
            args: Prisma.StateFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.StateFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          findFirst: {
            args: Prisma.StateFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.StateFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          findMany: {
            args: Prisma.StateFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>[]
          }
          create: {
            args: Prisma.StateCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          createMany: {
            args: Prisma.StateCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.StateDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          update: {
            args: Prisma.StateUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          deleteMany: {
            args: Prisma.StateDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.StateUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.StateUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$StatePayload>
          }
          aggregate: {
            args: Prisma.StateAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateState>
          }
          groupBy: {
            args: Prisma.StateGroupByArgs<ExtArgs>
            result: $Utils.Optional<StateGroupByOutputType>[]
          }
          count: {
            args: Prisma.StateCountArgs<ExtArgs>
            result: $Utils.Optional<StateCountAggregateOutputType> | number
          }
        }
      }
      City: {
        payload: Prisma.$CityPayload<ExtArgs>
        fields: Prisma.CityFieldRefs
        operations: {
          findUnique: {
            args: Prisma.CityFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.CityFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          findFirst: {
            args: Prisma.CityFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.CityFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          findMany: {
            args: Prisma.CityFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>[]
          }
          create: {
            args: Prisma.CityCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          createMany: {
            args: Prisma.CityCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.CityDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          update: {
            args: Prisma.CityUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          deleteMany: {
            args: Prisma.CityDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.CityUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.CityUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$CityPayload>
          }
          aggregate: {
            args: Prisma.CityAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateCity>
          }
          groupBy: {
            args: Prisma.CityGroupByArgs<ExtArgs>
            result: $Utils.Optional<CityGroupByOutputType>[]
          }
          count: {
            args: Prisma.CityCountArgs<ExtArgs>
            result: $Utils.Optional<CityCountAggregateOutputType> | number
          }
        }
      }
      TableLog: {
        payload: Prisma.$TableLogPayload<ExtArgs>
        fields: Prisma.TableLogFieldRefs
        operations: {
          findUnique: {
            args: Prisma.TableLogFindUniqueArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload> | null
          }
          findUniqueOrThrow: {
            args: Prisma.TableLogFindUniqueOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          findFirst: {
            args: Prisma.TableLogFindFirstArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload> | null
          }
          findFirstOrThrow: {
            args: Prisma.TableLogFindFirstOrThrowArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          findMany: {
            args: Prisma.TableLogFindManyArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>[]
          }
          create: {
            args: Prisma.TableLogCreateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          createMany: {
            args: Prisma.TableLogCreateManyArgs<ExtArgs>
            result: BatchPayload
          }
          delete: {
            args: Prisma.TableLogDeleteArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          update: {
            args: Prisma.TableLogUpdateArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          deleteMany: {
            args: Prisma.TableLogDeleteManyArgs<ExtArgs>
            result: BatchPayload
          }
          updateMany: {
            args: Prisma.TableLogUpdateManyArgs<ExtArgs>
            result: BatchPayload
          }
          upsert: {
            args: Prisma.TableLogUpsertArgs<ExtArgs>
            result: $Utils.PayloadToResult<Prisma.$TableLogPayload>
          }
          aggregate: {
            args: Prisma.TableLogAggregateArgs<ExtArgs>
            result: $Utils.Optional<AggregateTableLog>
          }
          groupBy: {
            args: Prisma.TableLogGroupByArgs<ExtArgs>
            result: $Utils.Optional<TableLogGroupByOutputType>[]
          }
          count: {
            args: Prisma.TableLogCountArgs<ExtArgs>
            result: $Utils.Optional<TableLogCountAggregateOutputType> | number
          }
        }
      }
    }
  } & {
    other: {
      payload: any
      operations: {
        $executeRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $executeRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
        $queryRaw: {
          args: [query: TemplateStringsArray | Prisma.Sql, ...values: any[]],
          result: any
        }
        $queryRawUnsafe: {
          args: [query: string, ...values: any[]],
          result: any
        }
      }
    }
  }
  export const defineExtension: $Extensions.ExtendsHook<"define", Prisma.TypeMapCb, $Extensions.DefaultArgs>
  export type DefaultPrismaClient = PrismaClient
  export type ErrorFormat = 'pretty' | 'colorless' | 'minimal'
  export interface PrismaClientOptions {
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasources?: Datasources
    /**
     * Overwrites the datasource url from your schema.prisma file
     */
    datasourceUrl?: string
    /**
     * @default "colorless"
     */
    errorFormat?: ErrorFormat
    /**
     * @example
     * ```
     * // Defaults to stdout
     * log: ['query', 'info', 'warn', 'error']
     * 
     * // Emit as events
     * log: [
     *   { emit: 'stdout', level: 'query' },
     *   { emit: 'stdout', level: 'info' },
     *   { emit: 'stdout', level: 'warn' }
     *   { emit: 'stdout', level: 'error' }
     * ]
     * ```
     * Read more in our [docs](https://www.prisma.io/docs/reference/tools-and-interfaces/prisma-client/logging#the-log-option).
     */
    log?: (LogLevel | LogDefinition)[]
    /**
     * The default values for transactionOptions
     * maxWait ?= 2000
     * timeout ?= 5000
     */
    transactionOptions?: {
      maxWait?: number
      timeout?: number
      isolationLevel?: Prisma.TransactionIsolationLevel
    }
    /**
     * Global configuration for omitting model fields by default.
     * 
     * @example
     * ```
     * const prisma = new PrismaClient({
     *   omit: {
     *     user: {
     *       password: true
     *     }
     *   }
     * })
     * ```
     */
    omit?: Prisma.GlobalOmitConfig
  }
  export type GlobalOmitConfig = {
    session?: SessionOmit
    school?: SchoolOmit
    branch?: BranchOmit
    branchLevel?: BranchLevelOmit
    classTemplate?: ClassTemplateOmit
    subjectSetup?: SubjectSetupOmit
    schoolSubject?: SchoolSubjectOmit
    branchSession?: BranchSessionOmit
    schoolSetting?: SchoolSettingOmit
    multimediaGroup?: MultimediaGroupOmit
    multimedia?: MultimediaOmit
    libraryBook?: LibraryBookOmit
    idCard?: IdCardOmit
    libraryCard?: LibraryCardOmit
    resultSerialNumbers?: ResultSerialNumbersOmit
    sessionTerm?: SessionTermOmit
    userLevel?: UserLevelOmit
    userTracking?: UserTrackingOmit
    userTrackingSubject?: UserTrackingSubjectOmit
    allUser?: AllUserOmit
    user?: UserOmit
    student?: StudentOmit
    guardian?: GuardianOmit
    studentGuardian?: StudentGuardianOmit
    permission?: PermissionOmit
    roleCrudPermission?: RoleCrudPermissionOmit
    roleMaxCrudPermissions?: RoleMaxCrudPermissionsOmit
    roleMaxPermission?: RoleMaxPermissionOmit
    rolePermission?: RolePermissionOmit
    role?: RoleOmit
    userCrudPermission?: UserCrudPermissionOmit
    userPermission?: UserPermissionOmit
    usertypeMaxCrudPermission?: UsertypeMaxCrudPermissionOmit
    usertypeMaxPermission?: UsertypeMaxPermissionOmit
    qualification?: QualificationOmit
    gender?: GenderOmit
    term?: TermOmit
    religion?: ReligionOmit
    complainFromTeacher?: ComplainFromTeacherOmit
    attendance?: AttendanceOmit
    schoolNote?: SchoolNoteOmit
    fee?: FeeOmit
    paymentType?: PaymentTypeOmit
    paymentDuration?: PaymentDurationOmit
    payment?: PaymentOmit
    paymentMade?: PaymentMadeOmit
    paymentPartMade?: PaymentPartMadeOmit
    paymentAttempt?: PaymentAttemptOmit
    classSubjectTemplate?: ClassSubjectTemplateOmit
    sessionClass?: SessionClassOmit
    sessionClassSubject?: SessionClassSubjectOmit
    sessionClassStudentSubject?: SessionClassStudentSubjectOmit
    classSpecialization?: ClassSpecializationOmit
    classGroup?: ClassGroupOmit
    scoreType?: ScoreTypeOmit
    scoreDisplayType?: ScoreDisplayTypeOmit
    studentScore?: StudentScoreOmit
    studentTotalScore?: StudentTotalScoreOmit
    studentTracking?: StudentTrackingOmit
    reportCardSetting?: ReportCardSettingOmit
    classScoreSetupTemplate?: ClassScoreSetupTemplateOmit
    sessionClassScoreSetup?: SessionClassScoreSetupOmit
    examType?: ExamTypeOmit
    examCategory?: ExamCategoryOmit
    examQuestionMarker?: ExamQuestionMarkerOmit
    questionTemplate?: QuestionTemplateOmit
    question?: QuestionOmit
    examVisibility?: ExamVisibilityOmit
    exam?: ExamOmit
    examQuestion?: ExamQuestionOmit
    examScoreSetupLink?: ExamScoreSetupLinkOmit
    examAttempt?: ExamAttemptOmit
    examQuestionAnswer?: ExamQuestionAnswerOmit
    examGift?: ExamGiftOmit
    schoolRecord?: SchoolRecordOmit
    componentGroup?: ComponentGroupOmit
    component?: ComponentOmit
    crudPage?: CrudPageOmit
    appUserType?: AppUserTypeOmit
    menuGroup?: MenuGroupOmit
    systemConfiguration?: SystemConfigurationOmit
    crudFront?: CrudFrontOmit
    crudUtil?: CrudUtilOmit
    region?: RegionOmit
    subregion?: SubregionOmit
    country?: CountryOmit
    state?: StateOmit
    city?: CityOmit
    tableLog?: TableLogOmit
  }

  /* Types for Logging */
  export type LogLevel = 'info' | 'query' | 'warn' | 'error'
  export type LogDefinition = {
    level: LogLevel
    emit: 'stdout' | 'event'
  }

  export type GetLogType<T extends LogLevel | LogDefinition> = T extends LogDefinition ? T['emit'] extends 'event' ? T['level'] : never : never
  export type GetEvents<T extends any> = T extends Array<LogLevel | LogDefinition> ?
    GetLogType<T[0]> | GetLogType<T[1]> | GetLogType<T[2]> | GetLogType<T[3]>
    : never

  export type QueryEvent = {
    timestamp: Date
    query: string
    params: string
    duration: number
    target: string
  }

  export type LogEvent = {
    timestamp: Date
    message: string
    target: string
  }
  /* End Types for Logging */


  export type PrismaAction =
    | 'findUnique'
    | 'findUniqueOrThrow'
    | 'findMany'
    | 'findFirst'
    | 'findFirstOrThrow'
    | 'create'
    | 'createMany'
    | 'createManyAndReturn'
    | 'update'
    | 'updateMany'
    | 'updateManyAndReturn'
    | 'upsert'
    | 'delete'
    | 'deleteMany'
    | 'executeRaw'
    | 'queryRaw'
    | 'aggregate'
    | 'count'
    | 'runCommandRaw'
    | 'findRaw'
    | 'groupBy'

  /**
   * These options are being passed into the middleware as "params"
   */
  export type MiddlewareParams = {
    model?: ModelName
    action: PrismaAction
    args: any
    dataPath: string[]
    runInTransaction: boolean
  }

  /**
   * The `T` type makes sure, that the `return proceed` is not forgotten in the middleware implementation
   */
  export type Middleware<T = any> = (
    params: MiddlewareParams,
    next: (params: MiddlewareParams) => $Utils.JsPromise<T>,
  ) => $Utils.JsPromise<T>

  // tested in getLogLevel.test.ts
  export function getLogLevel(log: Array<LogLevel | LogDefinition>): LogLevel | undefined;

  /**
   * `PrismaClient` proxy available in interactive transactions.
   */
  export type TransactionClient = Omit<Prisma.DefaultPrismaClient, runtime.ITXClientDenyList>

  export type Datasource = {
    url?: string
  }

  /**
   * Count Types
   */


  /**
   * Count Type SchoolCountOutputType
   */

  export type SchoolCountOutputType = {
    users: number
    branches: number
    students: number
    guardians: number
  }

  export type SchoolCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    users?: boolean | SchoolCountOutputTypeCountUsersArgs
    branches?: boolean | SchoolCountOutputTypeCountBranchesArgs
    students?: boolean | SchoolCountOutputTypeCountStudentsArgs
    guardians?: boolean | SchoolCountOutputTypeCountGuardiansArgs
  }

  // Custom InputTypes
  /**
   * SchoolCountOutputType without action
   */
  export type SchoolCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolCountOutputType
     */
    select?: SchoolCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * SchoolCountOutputType without action
   */
  export type SchoolCountOutputTypeCountUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserWhereInput
  }

  /**
   * SchoolCountOutputType without action
   */
  export type SchoolCountOutputTypeCountBranchesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: BranchWhereInput
  }

  /**
   * SchoolCountOutputType without action
   */
  export type SchoolCountOutputTypeCountStudentsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentWhereInput
  }

  /**
   * SchoolCountOutputType without action
   */
  export type SchoolCountOutputTypeCountGuardiansArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: GuardianWhereInput
  }


  /**
   * Count Type BranchCountOutputType
   */

  export type BranchCountOutputType = {
    branchLevels: number
    students: number
    users: number
    multimedia: number
    librarybooks: number
    guardians: number
  }

  export type BranchCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    branchLevels?: boolean | BranchCountOutputTypeCountBranchLevelsArgs
    students?: boolean | BranchCountOutputTypeCountStudentsArgs
    users?: boolean | BranchCountOutputTypeCountUsersArgs
    multimedia?: boolean | BranchCountOutputTypeCountMultimediaArgs
    librarybooks?: boolean | BranchCountOutputTypeCountLibrarybooksArgs
    guardians?: boolean | BranchCountOutputTypeCountGuardiansArgs
  }

  // Custom InputTypes
  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchCountOutputType
     */
    select?: BranchCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountBranchLevelsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: BranchLevelWhereInput
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountStudentsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentWhereInput
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountUsersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserWhereInput
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountMultimediaArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: MultimediaWhereInput
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountLibrarybooksArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: LibraryBookWhereInput
  }

  /**
   * BranchCountOutputType without action
   */
  export type BranchCountOutputTypeCountGuardiansArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: GuardianWhereInput
  }


  /**
   * Count Type ClassTemplateCountOutputType
   */

  export type ClassTemplateCountOutputType = {
    SessionClass: number
    exam: number
  }

  export type ClassTemplateCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionClass?: boolean | ClassTemplateCountOutputTypeCountSessionClassArgs
    exam?: boolean | ClassTemplateCountOutputTypeCountExamArgs
  }

  // Custom InputTypes
  /**
   * ClassTemplateCountOutputType without action
   */
  export type ClassTemplateCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplateCountOutputType
     */
    select?: ClassTemplateCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * ClassTemplateCountOutputType without action
   */
  export type ClassTemplateCountOutputTypeCountSessionClassArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassWhereInput
  }

  /**
   * ClassTemplateCountOutputType without action
   */
  export type ClassTemplateCountOutputTypeCountExamArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
  }


  /**
   * Count Type SchoolSubjectCountOutputType
   */

  export type SchoolSubjectCountOutputType = {
    SessionClassSubject: number
    ClassSubjectTemplate: number
    exam: number
  }

  export type SchoolSubjectCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionClassSubject?: boolean | SchoolSubjectCountOutputTypeCountSessionClassSubjectArgs
    ClassSubjectTemplate?: boolean | SchoolSubjectCountOutputTypeCountClassSubjectTemplateArgs
    exam?: boolean | SchoolSubjectCountOutputTypeCountExamArgs
  }

  // Custom InputTypes
  /**
   * SchoolSubjectCountOutputType without action
   */
  export type SchoolSubjectCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubjectCountOutputType
     */
    select?: SchoolSubjectCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * SchoolSubjectCountOutputType without action
   */
  export type SchoolSubjectCountOutputTypeCountSessionClassSubjectArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassSubjectWhereInput
  }

  /**
   * SchoolSubjectCountOutputType without action
   */
  export type SchoolSubjectCountOutputTypeCountClassSubjectTemplateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassSubjectTemplateWhereInput
  }

  /**
   * SchoolSubjectCountOutputType without action
   */
  export type SchoolSubjectCountOutputTypeCountExamArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
  }


  /**
   * Count Type BranchSessionCountOutputType
   */

  export type BranchSessionCountOutputType = {
    SessionTerm: number
  }

  export type BranchSessionCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionTerm?: boolean | BranchSessionCountOutputTypeCountSessionTermArgs
  }

  // Custom InputTypes
  /**
   * BranchSessionCountOutputType without action
   */
  export type BranchSessionCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSessionCountOutputType
     */
    select?: BranchSessionCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * BranchSessionCountOutputType without action
   */
  export type BranchSessionCountOutputTypeCountSessionTermArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionTermWhereInput
  }


  /**
   * Count Type SessionTermCountOutputType
   */

  export type SessionTermCountOutputType = {
    sessionclass: number
  }

  export type SessionTermCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    sessionclass?: boolean | SessionTermCountOutputTypeCountSessionclassArgs
  }

  // Custom InputTypes
  /**
   * SessionTermCountOutputType without action
   */
  export type SessionTermCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTermCountOutputType
     */
    select?: SessionTermCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * SessionTermCountOutputType without action
   */
  export type SessionTermCountOutputTypeCountSessionclassArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassWhereInput
  }


  /**
   * Count Type UserCountOutputType
   */

  export type UserCountOutputType = {
    CrudUserPermission: number
    PermissionUser: number
  }

  export type UserCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    CrudUserPermission?: boolean | UserCountOutputTypeCountCrudUserPermissionArgs
    PermissionUser?: boolean | UserCountOutputTypeCountPermissionUserArgs
  }

  // Custom InputTypes
  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCountOutputType
     */
    select?: UserCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeCountCrudUserPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserCrudPermissionWhereInput
  }

  /**
   * UserCountOutputType without action
   */
  export type UserCountOutputTypeCountPermissionUserArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserPermissionWhereInput
  }


  /**
   * Count Type StudentCountOutputType
   */

  export type StudentCountOutputType = {
    StudentTracking: number
  }

  export type StudentCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    StudentTracking?: boolean | StudentCountOutputTypeCountStudentTrackingArgs
  }

  // Custom InputTypes
  /**
   * StudentCountOutputType without action
   */
  export type StudentCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentCountOutputType
     */
    select?: StudentCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * StudentCountOutputType without action
   */
  export type StudentCountOutputTypeCountStudentTrackingArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentTrackingWhereInput
  }


  /**
   * Count Type PermissionCountOutputType
   */

  export type PermissionCountOutputType = {
    RoleCrudPermission: number
    UserCrudPermission: number
    RolePermission: number
    UserPermission: number
  }

  export type PermissionCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    RoleCrudPermission?: boolean | PermissionCountOutputTypeCountRoleCrudPermissionArgs
    UserCrudPermission?: boolean | PermissionCountOutputTypeCountUserCrudPermissionArgs
    RolePermission?: boolean | PermissionCountOutputTypeCountRolePermissionArgs
    UserPermission?: boolean | PermissionCountOutputTypeCountUserPermissionArgs
  }

  // Custom InputTypes
  /**
   * PermissionCountOutputType without action
   */
  export type PermissionCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PermissionCountOutputType
     */
    select?: PermissionCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * PermissionCountOutputType without action
   */
  export type PermissionCountOutputTypeCountRoleCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleCrudPermissionWhereInput
  }

  /**
   * PermissionCountOutputType without action
   */
  export type PermissionCountOutputTypeCountUserCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserCrudPermissionWhereInput
  }

  /**
   * PermissionCountOutputType without action
   */
  export type PermissionCountOutputTypeCountRolePermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RolePermissionWhereInput
  }

  /**
   * PermissionCountOutputType without action
   */
  export type PermissionCountOutputTypeCountUserPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserPermissionWhereInput
  }


  /**
   * Count Type RoleCountOutputType
   */

  export type RoleCountOutputType = {
    RoleCrudPermission: number
  }

  export type RoleCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    RoleCrudPermission?: boolean | RoleCountOutputTypeCountRoleCrudPermissionArgs
  }

  // Custom InputTypes
  /**
   * RoleCountOutputType without action
   */
  export type RoleCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCountOutputType
     */
    select?: RoleCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * RoleCountOutputType without action
   */
  export type RoleCountOutputTypeCountRoleCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleCrudPermissionWhereInput
  }


  /**
   * Count Type TermCountOutputType
   */

  export type TermCountOutputType = {
    SessionTerm: number
    exams: number
  }

  export type TermCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionTerm?: boolean | TermCountOutputTypeCountSessionTermArgs
    exams?: boolean | TermCountOutputTypeCountExamsArgs
  }

  // Custom InputTypes
  /**
   * TermCountOutputType without action
   */
  export type TermCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TermCountOutputType
     */
    select?: TermCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * TermCountOutputType without action
   */
  export type TermCountOutputTypeCountSessionTermArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionTermWhereInput
  }

  /**
   * TermCountOutputType without action
   */
  export type TermCountOutputTypeCountExamsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
  }


  /**
   * Count Type SessionClassScoreSetupCountOutputType
   */

  export type SessionClassScoreSetupCountOutputType = {
    examscoresetuplink: number
  }

  export type SessionClassScoreSetupCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    examscoresetuplink?: boolean | SessionClassScoreSetupCountOutputTypeCountExamscoresetuplinkArgs
  }

  // Custom InputTypes
  /**
   * SessionClassScoreSetupCountOutputType without action
   */
  export type SessionClassScoreSetupCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetupCountOutputType
     */
    select?: SessionClassScoreSetupCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * SessionClassScoreSetupCountOutputType without action
   */
  export type SessionClassScoreSetupCountOutputTypeCountExamscoresetuplinkArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamScoreSetupLinkWhereInput
  }


  /**
   * Count Type ExamTypeCountOutputType
   */

  export type ExamTypeCountOutputType = {
    exam: number
  }

  export type ExamTypeCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    exam?: boolean | ExamTypeCountOutputTypeCountExamArgs
  }

  // Custom InputTypes
  /**
   * ExamTypeCountOutputType without action
   */
  export type ExamTypeCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamTypeCountOutputType
     */
    select?: ExamTypeCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * ExamTypeCountOutputType without action
   */
  export type ExamTypeCountOutputTypeCountExamArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
  }


  /**
   * Count Type ExamCategoryCountOutputType
   */

  export type ExamCategoryCountOutputType = {
    exam: number
  }

  export type ExamCategoryCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    exam?: boolean | ExamCategoryCountOutputTypeCountExamArgs
  }

  // Custom InputTypes
  /**
   * ExamCategoryCountOutputType without action
   */
  export type ExamCategoryCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategoryCountOutputType
     */
    select?: ExamCategoryCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * ExamCategoryCountOutputType without action
   */
  export type ExamCategoryCountOutputTypeCountExamArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
  }


  /**
   * Count Type ExamCountOutputType
   */

  export type ExamCountOutputType = {
    examscoresetuplink: number
  }

  export type ExamCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    examscoresetuplink?: boolean | ExamCountOutputTypeCountExamscoresetuplinkArgs
  }

  // Custom InputTypes
  /**
   * ExamCountOutputType without action
   */
  export type ExamCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCountOutputType
     */
    select?: ExamCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * ExamCountOutputType without action
   */
  export type ExamCountOutputTypeCountExamscoresetuplinkArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamScoreSetupLinkWhereInput
  }


  /**
   * Count Type RegionCountOutputType
   */

  export type RegionCountOutputType = {
    countries: number
    subregions: number
  }

  export type RegionCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    countries?: boolean | RegionCountOutputTypeCountCountriesArgs
    subregions?: boolean | RegionCountOutputTypeCountSubregionsArgs
  }

  // Custom InputTypes
  /**
   * RegionCountOutputType without action
   */
  export type RegionCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RegionCountOutputType
     */
    select?: RegionCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * RegionCountOutputType without action
   */
  export type RegionCountOutputTypeCountCountriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryWhereInput
  }

  /**
   * RegionCountOutputType without action
   */
  export type RegionCountOutputTypeCountSubregionsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SubregionWhereInput
  }


  /**
   * Count Type SubregionCountOutputType
   */

  export type SubregionCountOutputType = {
    countries: number
  }

  export type SubregionCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    countries?: boolean | SubregionCountOutputTypeCountCountriesArgs
  }

  // Custom InputTypes
  /**
   * SubregionCountOutputType without action
   */
  export type SubregionCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubregionCountOutputType
     */
    select?: SubregionCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * SubregionCountOutputType without action
   */
  export type SubregionCountOutputTypeCountCountriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryWhereInput
  }


  /**
   * Count Type CountryCountOutputType
   */

  export type CountryCountOutputType = {
    states: number
    cities: number
  }

  export type CountryCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    states?: boolean | CountryCountOutputTypeCountStatesArgs
    cities?: boolean | CountryCountOutputTypeCountCitiesArgs
  }

  // Custom InputTypes
  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CountryCountOutputType
     */
    select?: CountryCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountStatesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
  }

  /**
   * CountryCountOutputType without action
   */
  export type CountryCountOutputTypeCountCitiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
  }


  /**
   * Count Type StateCountOutputType
   */

  export type StateCountOutputType = {
    cities: number
  }

  export type StateCountOutputTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    cities?: boolean | StateCountOutputTypeCountCitiesArgs
  }

  // Custom InputTypes
  /**
   * StateCountOutputType without action
   */
  export type StateCountOutputTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StateCountOutputType
     */
    select?: StateCountOutputTypeSelect<ExtArgs> | null
  }

  /**
   * StateCountOutputType without action
   */
  export type StateCountOutputTypeCountCitiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
  }


  /**
   * Models
   */

  /**
   * Model Session
   */

  export type AggregateSession = {
    _count: SessionCountAggregateOutputType | null
    _avg: SessionAvgAggregateOutputType | null
    _sum: SessionSumAggregateOutputType | null
    _min: SessionMinAggregateOutputType | null
    _max: SessionMaxAggregateOutputType | null
  }

  export type SessionAvgAggregateOutputType = {
    user_id: number | null
    last_activity: number | null
  }

  export type SessionSumAggregateOutputType = {
    user_id: number | null
    last_activity: number | null
  }

  export type SessionMinAggregateOutputType = {
    id: string | null
    user_id: number | null
    ip_address: string | null
    user_agent: string | null
    payload: string | null
    last_activity: number | null
  }

  export type SessionMaxAggregateOutputType = {
    id: string | null
    user_id: number | null
    ip_address: string | null
    user_agent: string | null
    payload: string | null
    last_activity: number | null
  }

  export type SessionCountAggregateOutputType = {
    id: number
    user_id: number
    ip_address: number
    user_agent: number
    payload: number
    last_activity: number
    _all: number
  }


  export type SessionAvgAggregateInputType = {
    user_id?: true
    last_activity?: true
  }

  export type SessionSumAggregateInputType = {
    user_id?: true
    last_activity?: true
  }

  export type SessionMinAggregateInputType = {
    id?: true
    user_id?: true
    ip_address?: true
    user_agent?: true
    payload?: true
    last_activity?: true
  }

  export type SessionMaxAggregateInputType = {
    id?: true
    user_id?: true
    ip_address?: true
    user_agent?: true
    payload?: true
    last_activity?: true
  }

  export type SessionCountAggregateInputType = {
    id?: true
    user_id?: true
    ip_address?: true
    user_agent?: true
    payload?: true
    last_activity?: true
    _all?: true
  }

  export type SessionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Session to aggregate.
     */
    where?: SessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sessions to fetch.
     */
    orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Sessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Sessions
    **/
    _count?: true | SessionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionMaxAggregateInputType
  }

  export type GetSessionAggregateType<T extends SessionAggregateArgs> = {
        [P in keyof T & keyof AggregateSession]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSession[P]>
      : GetScalarType<T[P], AggregateSession[P]>
  }




  export type SessionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionWhereInput
    orderBy?: SessionOrderByWithAggregationInput | SessionOrderByWithAggregationInput[]
    by: SessionScalarFieldEnum[] | SessionScalarFieldEnum
    having?: SessionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionCountAggregateInputType | true
    _avg?: SessionAvgAggregateInputType
    _sum?: SessionSumAggregateInputType
    _min?: SessionMinAggregateInputType
    _max?: SessionMaxAggregateInputType
  }

  export type SessionGroupByOutputType = {
    id: string
    user_id: number | null
    ip_address: string | null
    user_agent: string | null
    payload: string
    last_activity: number
    _count: SessionCountAggregateOutputType | null
    _avg: SessionAvgAggregateOutputType | null
    _sum: SessionSumAggregateOutputType | null
    _min: SessionMinAggregateOutputType | null
    _max: SessionMaxAggregateOutputType | null
  }

  type GetSessionGroupByPayload<T extends SessionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionGroupByOutputType[P]>
            : GetScalarType<T[P], SessionGroupByOutputType[P]>
        }
      >
    >


  export type SessionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    user_id?: boolean
    ip_address?: boolean
    user_agent?: boolean
    payload?: boolean
    last_activity?: boolean
  }, ExtArgs["result"]["session"]>



  export type SessionSelectScalar = {
    id?: boolean
    user_id?: boolean
    ip_address?: boolean
    user_agent?: boolean
    payload?: boolean
    last_activity?: boolean
  }

  export type SessionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "user_id" | "ip_address" | "user_agent" | "payload" | "last_activity", ExtArgs["result"]["session"]>

  export type $SessionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Session"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: string
      user_id: number | null
      ip_address: string | null
      user_agent: string | null
      payload: string
      last_activity: number
    }, ExtArgs["result"]["session"]>
    composites: {}
  }

  type SessionGetPayload<S extends boolean | null | undefined | SessionDefaultArgs> = $Result.GetResult<Prisma.$SessionPayload, S>

  type SessionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionCountAggregateInputType | true
    }

  export interface SessionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Session'], meta: { name: 'Session' } }
    /**
     * Find zero or one Session that matches the filter.
     * @param {SessionFindUniqueArgs} args - Arguments to find a Session
     * @example
     * // Get one Session
     * const session = await prisma.session.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionFindUniqueArgs>(args: SelectSubset<T, SessionFindUniqueArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Session that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionFindUniqueOrThrowArgs} args - Arguments to find a Session
     * @example
     * // Get one Session
     * const session = await prisma.session.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Session that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionFindFirstArgs} args - Arguments to find a Session
     * @example
     * // Get one Session
     * const session = await prisma.session.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionFindFirstArgs>(args?: SelectSubset<T, SessionFindFirstArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Session that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionFindFirstOrThrowArgs} args - Arguments to find a Session
     * @example
     * // Get one Session
     * const session = await prisma.session.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Sessions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Sessions
     * const sessions = await prisma.session.findMany()
     * 
     * // Get first 10 Sessions
     * const sessions = await prisma.session.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionWithIdOnly = await prisma.session.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionFindManyArgs>(args?: SelectSubset<T, SessionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Session.
     * @param {SessionCreateArgs} args - Arguments to create a Session.
     * @example
     * // Create one Session
     * const Session = await prisma.session.create({
     *   data: {
     *     // ... data to create a Session
     *   }
     * })
     * 
     */
    create<T extends SessionCreateArgs>(args: SelectSubset<T, SessionCreateArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Sessions.
     * @param {SessionCreateManyArgs} args - Arguments to create many Sessions.
     * @example
     * // Create many Sessions
     * const session = await prisma.session.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionCreateManyArgs>(args?: SelectSubset<T, SessionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Session.
     * @param {SessionDeleteArgs} args - Arguments to delete one Session.
     * @example
     * // Delete one Session
     * const Session = await prisma.session.delete({
     *   where: {
     *     // ... filter to delete one Session
     *   }
     * })
     * 
     */
    delete<T extends SessionDeleteArgs>(args: SelectSubset<T, SessionDeleteArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Session.
     * @param {SessionUpdateArgs} args - Arguments to update one Session.
     * @example
     * // Update one Session
     * const session = await prisma.session.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionUpdateArgs>(args: SelectSubset<T, SessionUpdateArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Sessions.
     * @param {SessionDeleteManyArgs} args - Arguments to filter Sessions to delete.
     * @example
     * // Delete a few Sessions
     * const { count } = await prisma.session.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionDeleteManyArgs>(args?: SelectSubset<T, SessionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Sessions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Sessions
     * const session = await prisma.session.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionUpdateManyArgs>(args: SelectSubset<T, SessionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Session.
     * @param {SessionUpsertArgs} args - Arguments to update or create a Session.
     * @example
     * // Update or create a Session
     * const session = await prisma.session.upsert({
     *   create: {
     *     // ... data to create a Session
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Session we want to update
     *   }
     * })
     */
    upsert<T extends SessionUpsertArgs>(args: SelectSubset<T, SessionUpsertArgs<ExtArgs>>): Prisma__SessionClient<$Result.GetResult<Prisma.$SessionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Sessions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionCountArgs} args - Arguments to filter Sessions to count.
     * @example
     * // Count the number of Sessions
     * const count = await prisma.session.count({
     *   where: {
     *     // ... the filter for the Sessions we want to count
     *   }
     * })
    **/
    count<T extends SessionCountArgs>(
      args?: Subset<T, SessionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Session.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionAggregateArgs>(args: Subset<T, SessionAggregateArgs>): Prisma.PrismaPromise<GetSessionAggregateType<T>>

    /**
     * Group by Session.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionGroupByArgs['orderBy'] }
        : { orderBy?: SessionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Session model
   */
  readonly fields: SessionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Session.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Session model
   */
  interface SessionFieldRefs {
    readonly id: FieldRef<"Session", 'String'>
    readonly user_id: FieldRef<"Session", 'Int'>
    readonly ip_address: FieldRef<"Session", 'String'>
    readonly user_agent: FieldRef<"Session", 'String'>
    readonly payload: FieldRef<"Session", 'String'>
    readonly last_activity: FieldRef<"Session", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Session findUnique
   */
  export type SessionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter, which Session to fetch.
     */
    where: SessionWhereUniqueInput
  }

  /**
   * Session findUniqueOrThrow
   */
  export type SessionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter, which Session to fetch.
     */
    where: SessionWhereUniqueInput
  }

  /**
   * Session findFirst
   */
  export type SessionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter, which Session to fetch.
     */
    where?: SessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sessions to fetch.
     */
    orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Sessions.
     */
    cursor?: SessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Sessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Sessions.
     */
    distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[]
  }

  /**
   * Session findFirstOrThrow
   */
  export type SessionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter, which Session to fetch.
     */
    where?: SessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sessions to fetch.
     */
    orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Sessions.
     */
    cursor?: SessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Sessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Sessions.
     */
    distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[]
  }

  /**
   * Session findMany
   */
  export type SessionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter, which Sessions to fetch.
     */
    where?: SessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Sessions to fetch.
     */
    orderBy?: SessionOrderByWithRelationInput | SessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Sessions.
     */
    cursor?: SessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Sessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Sessions.
     */
    skip?: number
    distinct?: SessionScalarFieldEnum | SessionScalarFieldEnum[]
  }

  /**
   * Session create
   */
  export type SessionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * The data needed to create a Session.
     */
    data: XOR<SessionCreateInput, SessionUncheckedCreateInput>
  }

  /**
   * Session createMany
   */
  export type SessionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Sessions.
     */
    data: SessionCreateManyInput | SessionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Session update
   */
  export type SessionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * The data needed to update a Session.
     */
    data: XOR<SessionUpdateInput, SessionUncheckedUpdateInput>
    /**
     * Choose, which Session to update.
     */
    where: SessionWhereUniqueInput
  }

  /**
   * Session updateMany
   */
  export type SessionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Sessions.
     */
    data: XOR<SessionUpdateManyMutationInput, SessionUncheckedUpdateManyInput>
    /**
     * Filter which Sessions to update
     */
    where?: SessionWhereInput
    /**
     * Limit how many Sessions to update.
     */
    limit?: number
  }

  /**
   * Session upsert
   */
  export type SessionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * The filter to search for the Session to update in case it exists.
     */
    where: SessionWhereUniqueInput
    /**
     * In case the Session found by the `where` argument doesn't exist, create a new Session with this data.
     */
    create: XOR<SessionCreateInput, SessionUncheckedCreateInput>
    /**
     * In case the Session was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionUpdateInput, SessionUncheckedUpdateInput>
  }

  /**
   * Session delete
   */
  export type SessionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
    /**
     * Filter which Session to delete.
     */
    where: SessionWhereUniqueInput
  }

  /**
   * Session deleteMany
   */
  export type SessionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Sessions to delete
     */
    where?: SessionWhereInput
    /**
     * Limit how many Sessions to delete.
     */
    limit?: number
  }

  /**
   * Session without action
   */
  export type SessionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Session
     */
    select?: SessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Session
     */
    omit?: SessionOmit<ExtArgs> | null
  }


  /**
   * Model School
   */

  export type AggregateSchool = {
    _count: SchoolCountAggregateOutputType | null
    _avg: SchoolAvgAggregateOutputType | null
    _sum: SchoolSumAggregateOutputType | null
    _min: SchoolMinAggregateOutputType | null
    _max: SchoolMaxAggregateOutputType | null
  }

  export type SchoolAvgAggregateOutputType = {
    id: number | null
    school_approved: number | null
    school_active: number | null
    created_by: number | null
  }

  export type SchoolSumAggregateOutputType = {
    id: number | null
    school_approved: number | null
    school_active: number | null
    created_by: number | null
  }

  export type SchoolMinAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_name: string | null
    school_approved: number | null
    school_active: number | null
    profile_photo_path: string | null
    aboutus: string | null
    mission: string | null
    vision: string | null
    idcard_bg_color: string | null
    idcard_design_color: string | null
    idcard_text_color: string | null
    idcard_tnc1: string | null
    idcard_tnc2: string | null
    school_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolMaxAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_name: string | null
    school_approved: number | null
    school_active: number | null
    profile_photo_path: string | null
    aboutus: string | null
    mission: string | null
    vision: string | null
    idcard_bg_color: string | null
    idcard_design_color: string | null
    idcard_text_color: string | null
    idcard_tnc1: string | null
    idcard_tnc2: string | null
    school_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolCountAggregateOutputType = {
    id: number
    uuid: number
    school_name: number
    school_approved: number
    school_active: number
    profile_photo_path: number
    aboutus: number
    mission: number
    vision: number
    idcard_bg_color: number
    idcard_design_color: number
    idcard_text_color: number
    idcard_tnc1: number
    idcard_tnc2: number
    school_blocked_reason: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SchoolAvgAggregateInputType = {
    id?: true
    school_approved?: true
    school_active?: true
    created_by?: true
  }

  export type SchoolSumAggregateInputType = {
    id?: true
    school_approved?: true
    school_active?: true
    created_by?: true
  }

  export type SchoolMinAggregateInputType = {
    id?: true
    uuid?: true
    school_name?: true
    school_approved?: true
    school_active?: true
    profile_photo_path?: true
    aboutus?: true
    mission?: true
    vision?: true
    idcard_bg_color?: true
    idcard_design_color?: true
    idcard_text_color?: true
    idcard_tnc1?: true
    idcard_tnc2?: true
    school_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolMaxAggregateInputType = {
    id?: true
    uuid?: true
    school_name?: true
    school_approved?: true
    school_active?: true
    profile_photo_path?: true
    aboutus?: true
    mission?: true
    vision?: true
    idcard_bg_color?: true
    idcard_design_color?: true
    idcard_text_color?: true
    idcard_tnc1?: true
    idcard_tnc2?: true
    school_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolCountAggregateInputType = {
    id?: true
    uuid?: true
    school_name?: true
    school_approved?: true
    school_active?: true
    profile_photo_path?: true
    aboutus?: true
    mission?: true
    vision?: true
    idcard_bg_color?: true
    idcard_design_color?: true
    idcard_text_color?: true
    idcard_tnc1?: true
    idcard_tnc2?: true
    school_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SchoolAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which School to aggregate.
     */
    where?: SchoolWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Schools to fetch.
     */
    orderBy?: SchoolOrderByWithRelationInput | SchoolOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SchoolWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Schools from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Schools.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Schools
    **/
    _count?: true | SchoolCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SchoolAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SchoolSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SchoolMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SchoolMaxAggregateInputType
  }

  export type GetSchoolAggregateType<T extends SchoolAggregateArgs> = {
        [P in keyof T & keyof AggregateSchool]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSchool[P]>
      : GetScalarType<T[P], AggregateSchool[P]>
  }




  export type SchoolGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SchoolWhereInput
    orderBy?: SchoolOrderByWithAggregationInput | SchoolOrderByWithAggregationInput[]
    by: SchoolScalarFieldEnum[] | SchoolScalarFieldEnum
    having?: SchoolScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SchoolCountAggregateInputType | true
    _avg?: SchoolAvgAggregateInputType
    _sum?: SchoolSumAggregateInputType
    _min?: SchoolMinAggregateInputType
    _max?: SchoolMaxAggregateInputType
  }

  export type SchoolGroupByOutputType = {
    id: number
    uuid: string
    school_name: string
    school_approved: number
    school_active: number
    profile_photo_path: string | null
    aboutus: string | null
    mission: string | null
    vision: string | null
    idcard_bg_color: string | null
    idcard_design_color: string | null
    idcard_text_color: string | null
    idcard_tnc1: string | null
    idcard_tnc2: string | null
    school_blocked_reason: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SchoolCountAggregateOutputType | null
    _avg: SchoolAvgAggregateOutputType | null
    _sum: SchoolSumAggregateOutputType | null
    _min: SchoolMinAggregateOutputType | null
    _max: SchoolMaxAggregateOutputType | null
  }

  type GetSchoolGroupByPayload<T extends SchoolGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SchoolGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SchoolGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SchoolGroupByOutputType[P]>
            : GetScalarType<T[P], SchoolGroupByOutputType[P]>
        }
      >
    >


  export type SchoolSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    uuid?: boolean
    school_name?: boolean
    school_approved?: boolean
    school_active?: boolean
    profile_photo_path?: boolean
    aboutus?: boolean
    mission?: boolean
    vision?: boolean
    idcard_bg_color?: boolean
    idcard_design_color?: boolean
    idcard_text_color?: boolean
    idcard_tnc1?: boolean
    idcard_tnc2?: boolean
    school_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    users?: boolean | School$usersArgs<ExtArgs>
    branches?: boolean | School$branchesArgs<ExtArgs>
    students?: boolean | School$studentsArgs<ExtArgs>
    guardians?: boolean | School$guardiansArgs<ExtArgs>
    _count?: boolean | SchoolCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["school"]>



  export type SchoolSelectScalar = {
    id?: boolean
    uuid?: boolean
    school_name?: boolean
    school_approved?: boolean
    school_active?: boolean
    profile_photo_path?: boolean
    aboutus?: boolean
    mission?: boolean
    vision?: boolean
    idcard_bg_color?: boolean
    idcard_design_color?: boolean
    idcard_text_color?: boolean
    idcard_tnc1?: boolean
    idcard_tnc2?: boolean
    school_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SchoolOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "uuid" | "school_name" | "school_approved" | "school_active" | "profile_photo_path" | "aboutus" | "mission" | "vision" | "idcard_bg_color" | "idcard_design_color" | "idcard_text_color" | "idcard_tnc1" | "idcard_tnc2" | "school_blocked_reason" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["school"]>
  export type SchoolInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    users?: boolean | School$usersArgs<ExtArgs>
    branches?: boolean | School$branchesArgs<ExtArgs>
    students?: boolean | School$studentsArgs<ExtArgs>
    guardians?: boolean | School$guardiansArgs<ExtArgs>
    _count?: boolean | SchoolCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $SchoolPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "School"
    objects: {
      users: Prisma.$UserPayload<ExtArgs>[]
      branches: Prisma.$BranchPayload<ExtArgs>[]
      students: Prisma.$StudentPayload<ExtArgs>[]
      guardians: Prisma.$GuardianPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      uuid: string
      school_name: string
      school_approved: number
      school_active: number
      profile_photo_path: string | null
      aboutus: string | null
      mission: string | null
      vision: string | null
      idcard_bg_color: string | null
      idcard_design_color: string | null
      idcard_text_color: string | null
      idcard_tnc1: string | null
      idcard_tnc2: string | null
      school_blocked_reason: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["school"]>
    composites: {}
  }

  type SchoolGetPayload<S extends boolean | null | undefined | SchoolDefaultArgs> = $Result.GetResult<Prisma.$SchoolPayload, S>

  type SchoolCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SchoolFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SchoolCountAggregateInputType | true
    }

  export interface SchoolDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['School'], meta: { name: 'School' } }
    /**
     * Find zero or one School that matches the filter.
     * @param {SchoolFindUniqueArgs} args - Arguments to find a School
     * @example
     * // Get one School
     * const school = await prisma.school.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SchoolFindUniqueArgs>(args: SelectSubset<T, SchoolFindUniqueArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one School that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SchoolFindUniqueOrThrowArgs} args - Arguments to find a School
     * @example
     * // Get one School
     * const school = await prisma.school.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SchoolFindUniqueOrThrowArgs>(args: SelectSubset<T, SchoolFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first School that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolFindFirstArgs} args - Arguments to find a School
     * @example
     * // Get one School
     * const school = await prisma.school.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SchoolFindFirstArgs>(args?: SelectSubset<T, SchoolFindFirstArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first School that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolFindFirstOrThrowArgs} args - Arguments to find a School
     * @example
     * // Get one School
     * const school = await prisma.school.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SchoolFindFirstOrThrowArgs>(args?: SelectSubset<T, SchoolFindFirstOrThrowArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Schools that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Schools
     * const schools = await prisma.school.findMany()
     * 
     * // Get first 10 Schools
     * const schools = await prisma.school.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const schoolWithIdOnly = await prisma.school.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SchoolFindManyArgs>(args?: SelectSubset<T, SchoolFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a School.
     * @param {SchoolCreateArgs} args - Arguments to create a School.
     * @example
     * // Create one School
     * const School = await prisma.school.create({
     *   data: {
     *     // ... data to create a School
     *   }
     * })
     * 
     */
    create<T extends SchoolCreateArgs>(args: SelectSubset<T, SchoolCreateArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Schools.
     * @param {SchoolCreateManyArgs} args - Arguments to create many Schools.
     * @example
     * // Create many Schools
     * const school = await prisma.school.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SchoolCreateManyArgs>(args?: SelectSubset<T, SchoolCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a School.
     * @param {SchoolDeleteArgs} args - Arguments to delete one School.
     * @example
     * // Delete one School
     * const School = await prisma.school.delete({
     *   where: {
     *     // ... filter to delete one School
     *   }
     * })
     * 
     */
    delete<T extends SchoolDeleteArgs>(args: SelectSubset<T, SchoolDeleteArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one School.
     * @param {SchoolUpdateArgs} args - Arguments to update one School.
     * @example
     * // Update one School
     * const school = await prisma.school.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SchoolUpdateArgs>(args: SelectSubset<T, SchoolUpdateArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Schools.
     * @param {SchoolDeleteManyArgs} args - Arguments to filter Schools to delete.
     * @example
     * // Delete a few Schools
     * const { count } = await prisma.school.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SchoolDeleteManyArgs>(args?: SelectSubset<T, SchoolDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Schools.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Schools
     * const school = await prisma.school.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SchoolUpdateManyArgs>(args: SelectSubset<T, SchoolUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one School.
     * @param {SchoolUpsertArgs} args - Arguments to update or create a School.
     * @example
     * // Update or create a School
     * const school = await prisma.school.upsert({
     *   create: {
     *     // ... data to create a School
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the School we want to update
     *   }
     * })
     */
    upsert<T extends SchoolUpsertArgs>(args: SelectSubset<T, SchoolUpsertArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Schools.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolCountArgs} args - Arguments to filter Schools to count.
     * @example
     * // Count the number of Schools
     * const count = await prisma.school.count({
     *   where: {
     *     // ... the filter for the Schools we want to count
     *   }
     * })
    **/
    count<T extends SchoolCountArgs>(
      args?: Subset<T, SchoolCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SchoolCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a School.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SchoolAggregateArgs>(args: Subset<T, SchoolAggregateArgs>): Prisma.PrismaPromise<GetSchoolAggregateType<T>>

    /**
     * Group by School.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SchoolGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SchoolGroupByArgs['orderBy'] }
        : { orderBy?: SchoolGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SchoolGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSchoolGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the School model
   */
  readonly fields: SchoolFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for School.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SchoolClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    users<T extends School$usersArgs<ExtArgs> = {}>(args?: Subset<T, School$usersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    branches<T extends School$branchesArgs<ExtArgs> = {}>(args?: Subset<T, School$branchesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    students<T extends School$studentsArgs<ExtArgs> = {}>(args?: Subset<T, School$studentsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    guardians<T extends School$guardiansArgs<ExtArgs> = {}>(args?: Subset<T, School$guardiansArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the School model
   */
  interface SchoolFieldRefs {
    readonly id: FieldRef<"School", 'Int'>
    readonly uuid: FieldRef<"School", 'String'>
    readonly school_name: FieldRef<"School", 'String'>
    readonly school_approved: FieldRef<"School", 'Int'>
    readonly school_active: FieldRef<"School", 'Int'>
    readonly profile_photo_path: FieldRef<"School", 'String'>
    readonly aboutus: FieldRef<"School", 'String'>
    readonly mission: FieldRef<"School", 'String'>
    readonly vision: FieldRef<"School", 'String'>
    readonly idcard_bg_color: FieldRef<"School", 'String'>
    readonly idcard_design_color: FieldRef<"School", 'String'>
    readonly idcard_text_color: FieldRef<"School", 'String'>
    readonly idcard_tnc1: FieldRef<"School", 'String'>
    readonly idcard_tnc2: FieldRef<"School", 'String'>
    readonly school_blocked_reason: FieldRef<"School", 'String'>
    readonly created_by: FieldRef<"School", 'Int'>
    readonly created_at: FieldRef<"School", 'DateTime'>
    readonly updated_at: FieldRef<"School", 'DateTime'>
    readonly deleted_at: FieldRef<"School", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * School findUnique
   */
  export type SchoolFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter, which School to fetch.
     */
    where: SchoolWhereUniqueInput
  }

  /**
   * School findUniqueOrThrow
   */
  export type SchoolFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter, which School to fetch.
     */
    where: SchoolWhereUniqueInput
  }

  /**
   * School findFirst
   */
  export type SchoolFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter, which School to fetch.
     */
    where?: SchoolWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Schools to fetch.
     */
    orderBy?: SchoolOrderByWithRelationInput | SchoolOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Schools.
     */
    cursor?: SchoolWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Schools from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Schools.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Schools.
     */
    distinct?: SchoolScalarFieldEnum | SchoolScalarFieldEnum[]
  }

  /**
   * School findFirstOrThrow
   */
  export type SchoolFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter, which School to fetch.
     */
    where?: SchoolWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Schools to fetch.
     */
    orderBy?: SchoolOrderByWithRelationInput | SchoolOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Schools.
     */
    cursor?: SchoolWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Schools from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Schools.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Schools.
     */
    distinct?: SchoolScalarFieldEnum | SchoolScalarFieldEnum[]
  }

  /**
   * School findMany
   */
  export type SchoolFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter, which Schools to fetch.
     */
    where?: SchoolWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Schools to fetch.
     */
    orderBy?: SchoolOrderByWithRelationInput | SchoolOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Schools.
     */
    cursor?: SchoolWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Schools from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Schools.
     */
    skip?: number
    distinct?: SchoolScalarFieldEnum | SchoolScalarFieldEnum[]
  }

  /**
   * School create
   */
  export type SchoolCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * The data needed to create a School.
     */
    data: XOR<SchoolCreateInput, SchoolUncheckedCreateInput>
  }

  /**
   * School createMany
   */
  export type SchoolCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Schools.
     */
    data: SchoolCreateManyInput | SchoolCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * School update
   */
  export type SchoolUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * The data needed to update a School.
     */
    data: XOR<SchoolUpdateInput, SchoolUncheckedUpdateInput>
    /**
     * Choose, which School to update.
     */
    where: SchoolWhereUniqueInput
  }

  /**
   * School updateMany
   */
  export type SchoolUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Schools.
     */
    data: XOR<SchoolUpdateManyMutationInput, SchoolUncheckedUpdateManyInput>
    /**
     * Filter which Schools to update
     */
    where?: SchoolWhereInput
    /**
     * Limit how many Schools to update.
     */
    limit?: number
  }

  /**
   * School upsert
   */
  export type SchoolUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * The filter to search for the School to update in case it exists.
     */
    where: SchoolWhereUniqueInput
    /**
     * In case the School found by the `where` argument doesn't exist, create a new School with this data.
     */
    create: XOR<SchoolCreateInput, SchoolUncheckedCreateInput>
    /**
     * In case the School was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SchoolUpdateInput, SchoolUncheckedUpdateInput>
  }

  /**
   * School delete
   */
  export type SchoolDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    /**
     * Filter which School to delete.
     */
    where: SchoolWhereUniqueInput
  }

  /**
   * School deleteMany
   */
  export type SchoolDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Schools to delete
     */
    where?: SchoolWhereInput
    /**
     * Limit how many Schools to delete.
     */
    limit?: number
  }

  /**
   * School.users
   */
  export type School$usersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    where?: UserWhereInput
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    cursor?: UserWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * School.branches
   */
  export type School$branchesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
    orderBy?: BranchOrderByWithRelationInput | BranchOrderByWithRelationInput[]
    cursor?: BranchWhereUniqueInput
    take?: number
    skip?: number
    distinct?: BranchScalarFieldEnum | BranchScalarFieldEnum[]
  }

  /**
   * School.students
   */
  export type School$studentsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    where?: StudentWhereInput
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    cursor?: StudentWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StudentScalarFieldEnum | StudentScalarFieldEnum[]
  }

  /**
   * School.guardians
   */
  export type School$guardiansArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    where?: GuardianWhereInput
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    cursor?: GuardianWhereUniqueInput
    take?: number
    skip?: number
    distinct?: GuardianScalarFieldEnum | GuardianScalarFieldEnum[]
  }

  /**
   * School without action
   */
  export type SchoolDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
  }


  /**
   * Model Branch
   */

  export type AggregateBranch = {
    _count: BranchCountAggregateOutputType | null
    _avg: BranchAvgAggregateOutputType | null
    _sum: BranchSumAggregateOutputType | null
    _min: BranchMinAggregateOutputType | null
    _max: BranchMaxAggregateOutputType | null
  }

  export type BranchAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_country_id: number | null
    branch_state_id: number | null
    branch_state: number | null
    branch_active: number | null
    branch_main: number | null
    prevent_users_to_login: number | null
    created_by: number | null
  }

  export type BranchSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_country_id: number | null
    branch_state_id: number | null
    branch_state: number | null
    branch_active: number | null
    branch_main: number | null
    prevent_users_to_login: number | null
    created_by: number | null
  }

  export type BranchMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_country_id: number | null
    branch_state_id: number | null
    branch_name: string | null
    branch_phone: string | null
    branch_email: string | null
    branch_address: string | null
    branch_state: number | null
    branch_active: number | null
    branch_main: number | null
    prevent_users_to_login: number | null
    branch_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_country_id: number | null
    branch_state_id: number | null
    branch_name: string | null
    branch_phone: string | null
    branch_email: string | null
    branch_address: string | null
    branch_state: number | null
    branch_active: number | null
    branch_main: number | null
    prevent_users_to_login: number | null
    branch_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchCountAggregateOutputType = {
    id: number
    school_id: number
    branch_country_id: number
    branch_state_id: number
    branch_name: number
    branch_phone: number
    branch_email: number
    branch_address: number
    branch_state: number
    branch_active: number
    branch_main: number
    prevent_users_to_login: number
    branch_blocked_reason: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type BranchAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_country_id?: true
    branch_state_id?: true
    branch_state?: true
    branch_active?: true
    branch_main?: true
    prevent_users_to_login?: true
    created_by?: true
  }

  export type BranchSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_country_id?: true
    branch_state_id?: true
    branch_state?: true
    branch_active?: true
    branch_main?: true
    prevent_users_to_login?: true
    created_by?: true
  }

  export type BranchMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_country_id?: true
    branch_state_id?: true
    branch_name?: true
    branch_phone?: true
    branch_email?: true
    branch_address?: true
    branch_state?: true
    branch_active?: true
    branch_main?: true
    prevent_users_to_login?: true
    branch_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_country_id?: true
    branch_state_id?: true
    branch_name?: true
    branch_phone?: true
    branch_email?: true
    branch_address?: true
    branch_state?: true
    branch_active?: true
    branch_main?: true
    prevent_users_to_login?: true
    branch_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_country_id?: true
    branch_state_id?: true
    branch_name?: true
    branch_phone?: true
    branch_email?: true
    branch_address?: true
    branch_state?: true
    branch_active?: true
    branch_main?: true
    prevent_users_to_login?: true
    branch_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type BranchAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Branch to aggregate.
     */
    where?: BranchWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Branches to fetch.
     */
    orderBy?: BranchOrderByWithRelationInput | BranchOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: BranchWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Branches from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Branches.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Branches
    **/
    _count?: true | BranchCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: BranchAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: BranchSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: BranchMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: BranchMaxAggregateInputType
  }

  export type GetBranchAggregateType<T extends BranchAggregateArgs> = {
        [P in keyof T & keyof AggregateBranch]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateBranch[P]>
      : GetScalarType<T[P], AggregateBranch[P]>
  }




  export type BranchGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: BranchWhereInput
    orderBy?: BranchOrderByWithAggregationInput | BranchOrderByWithAggregationInput[]
    by: BranchScalarFieldEnum[] | BranchScalarFieldEnum
    having?: BranchScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: BranchCountAggregateInputType | true
    _avg?: BranchAvgAggregateInputType
    _sum?: BranchSumAggregateInputType
    _min?: BranchMinAggregateInputType
    _max?: BranchMaxAggregateInputType
  }

  export type BranchGroupByOutputType = {
    id: number
    school_id: number
    branch_country_id: number | null
    branch_state_id: number | null
    branch_name: string
    branch_phone: string
    branch_email: string | null
    branch_address: string
    branch_state: number | null
    branch_active: number
    branch_main: number
    prevent_users_to_login: number
    branch_blocked_reason: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: BranchCountAggregateOutputType | null
    _avg: BranchAvgAggregateOutputType | null
    _sum: BranchSumAggregateOutputType | null
    _min: BranchMinAggregateOutputType | null
    _max: BranchMaxAggregateOutputType | null
  }

  type GetBranchGroupByPayload<T extends BranchGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<BranchGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof BranchGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], BranchGroupByOutputType[P]>
            : GetScalarType<T[P], BranchGroupByOutputType[P]>
        }
      >
    >


  export type BranchSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_country_id?: boolean
    branch_state_id?: boolean
    branch_name?: boolean
    branch_phone?: boolean
    branch_email?: boolean
    branch_address?: boolean
    branch_state?: boolean
    branch_active?: boolean
    branch_main?: boolean
    prevent_users_to_login?: boolean
    branch_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    school?: boolean | SchoolDefaultArgs<ExtArgs>
    branchLevels?: boolean | Branch$branchLevelsArgs<ExtArgs>
    students?: boolean | Branch$studentsArgs<ExtArgs>
    users?: boolean | Branch$usersArgs<ExtArgs>
    multimedia?: boolean | Branch$multimediaArgs<ExtArgs>
    librarybooks?: boolean | Branch$librarybooksArgs<ExtArgs>
    guardians?: boolean | Branch$guardiansArgs<ExtArgs>
    _count?: boolean | BranchCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["branch"]>



  export type BranchSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_country_id?: boolean
    branch_state_id?: boolean
    branch_name?: boolean
    branch_phone?: boolean
    branch_email?: boolean
    branch_address?: boolean
    branch_state?: boolean
    branch_active?: boolean
    branch_main?: boolean
    prevent_users_to_login?: boolean
    branch_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type BranchOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_country_id" | "branch_state_id" | "branch_name" | "branch_phone" | "branch_email" | "branch_address" | "branch_state" | "branch_active" | "branch_main" | "prevent_users_to_login" | "branch_blocked_reason" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["branch"]>
  export type BranchInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    school?: boolean | SchoolDefaultArgs<ExtArgs>
    branchLevels?: boolean | Branch$branchLevelsArgs<ExtArgs>
    students?: boolean | Branch$studentsArgs<ExtArgs>
    users?: boolean | Branch$usersArgs<ExtArgs>
    multimedia?: boolean | Branch$multimediaArgs<ExtArgs>
    librarybooks?: boolean | Branch$librarybooksArgs<ExtArgs>
    guardians?: boolean | Branch$guardiansArgs<ExtArgs>
    _count?: boolean | BranchCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $BranchPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Branch"
    objects: {
      school: Prisma.$SchoolPayload<ExtArgs>
      branchLevels: Prisma.$BranchLevelPayload<ExtArgs>[]
      students: Prisma.$StudentPayload<ExtArgs>[]
      users: Prisma.$UserPayload<ExtArgs>[]
      multimedia: Prisma.$MultimediaPayload<ExtArgs>[]
      librarybooks: Prisma.$LibraryBookPayload<ExtArgs>[]
      guardians: Prisma.$GuardianPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      branch_country_id: number | null
      branch_state_id: number | null
      branch_name: string
      branch_phone: string
      branch_email: string | null
      branch_address: string
      branch_state: number | null
      branch_active: number
      branch_main: number
      prevent_users_to_login: number
      branch_blocked_reason: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["branch"]>
    composites: {}
  }

  type BranchGetPayload<S extends boolean | null | undefined | BranchDefaultArgs> = $Result.GetResult<Prisma.$BranchPayload, S>

  type BranchCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<BranchFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: BranchCountAggregateInputType | true
    }

  export interface BranchDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Branch'], meta: { name: 'Branch' } }
    /**
     * Find zero or one Branch that matches the filter.
     * @param {BranchFindUniqueArgs} args - Arguments to find a Branch
     * @example
     * // Get one Branch
     * const branch = await prisma.branch.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends BranchFindUniqueArgs>(args: SelectSubset<T, BranchFindUniqueArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Branch that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {BranchFindUniqueOrThrowArgs} args - Arguments to find a Branch
     * @example
     * // Get one Branch
     * const branch = await prisma.branch.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends BranchFindUniqueOrThrowArgs>(args: SelectSubset<T, BranchFindUniqueOrThrowArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Branch that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchFindFirstArgs} args - Arguments to find a Branch
     * @example
     * // Get one Branch
     * const branch = await prisma.branch.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends BranchFindFirstArgs>(args?: SelectSubset<T, BranchFindFirstArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Branch that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchFindFirstOrThrowArgs} args - Arguments to find a Branch
     * @example
     * // Get one Branch
     * const branch = await prisma.branch.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends BranchFindFirstOrThrowArgs>(args?: SelectSubset<T, BranchFindFirstOrThrowArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Branches that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Branches
     * const branches = await prisma.branch.findMany()
     * 
     * // Get first 10 Branches
     * const branches = await prisma.branch.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const branchWithIdOnly = await prisma.branch.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends BranchFindManyArgs>(args?: SelectSubset<T, BranchFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Branch.
     * @param {BranchCreateArgs} args - Arguments to create a Branch.
     * @example
     * // Create one Branch
     * const Branch = await prisma.branch.create({
     *   data: {
     *     // ... data to create a Branch
     *   }
     * })
     * 
     */
    create<T extends BranchCreateArgs>(args: SelectSubset<T, BranchCreateArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Branches.
     * @param {BranchCreateManyArgs} args - Arguments to create many Branches.
     * @example
     * // Create many Branches
     * const branch = await prisma.branch.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends BranchCreateManyArgs>(args?: SelectSubset<T, BranchCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Branch.
     * @param {BranchDeleteArgs} args - Arguments to delete one Branch.
     * @example
     * // Delete one Branch
     * const Branch = await prisma.branch.delete({
     *   where: {
     *     // ... filter to delete one Branch
     *   }
     * })
     * 
     */
    delete<T extends BranchDeleteArgs>(args: SelectSubset<T, BranchDeleteArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Branch.
     * @param {BranchUpdateArgs} args - Arguments to update one Branch.
     * @example
     * // Update one Branch
     * const branch = await prisma.branch.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends BranchUpdateArgs>(args: SelectSubset<T, BranchUpdateArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Branches.
     * @param {BranchDeleteManyArgs} args - Arguments to filter Branches to delete.
     * @example
     * // Delete a few Branches
     * const { count } = await prisma.branch.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends BranchDeleteManyArgs>(args?: SelectSubset<T, BranchDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Branches.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Branches
     * const branch = await prisma.branch.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends BranchUpdateManyArgs>(args: SelectSubset<T, BranchUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Branch.
     * @param {BranchUpsertArgs} args - Arguments to update or create a Branch.
     * @example
     * // Update or create a Branch
     * const branch = await prisma.branch.upsert({
     *   create: {
     *     // ... data to create a Branch
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Branch we want to update
     *   }
     * })
     */
    upsert<T extends BranchUpsertArgs>(args: SelectSubset<T, BranchUpsertArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Branches.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchCountArgs} args - Arguments to filter Branches to count.
     * @example
     * // Count the number of Branches
     * const count = await prisma.branch.count({
     *   where: {
     *     // ... the filter for the Branches we want to count
     *   }
     * })
    **/
    count<T extends BranchCountArgs>(
      args?: Subset<T, BranchCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], BranchCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Branch.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends BranchAggregateArgs>(args: Subset<T, BranchAggregateArgs>): Prisma.PrismaPromise<GetBranchAggregateType<T>>

    /**
     * Group by Branch.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends BranchGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: BranchGroupByArgs['orderBy'] }
        : { orderBy?: BranchGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, BranchGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetBranchGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Branch model
   */
  readonly fields: BranchFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Branch.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__BranchClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    school<T extends SchoolDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SchoolDefaultArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    branchLevels<T extends Branch$branchLevelsArgs<ExtArgs> = {}>(args?: Subset<T, Branch$branchLevelsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    students<T extends Branch$studentsArgs<ExtArgs> = {}>(args?: Subset<T, Branch$studentsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    users<T extends Branch$usersArgs<ExtArgs> = {}>(args?: Subset<T, Branch$usersArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    multimedia<T extends Branch$multimediaArgs<ExtArgs> = {}>(args?: Subset<T, Branch$multimediaArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    librarybooks<T extends Branch$librarybooksArgs<ExtArgs> = {}>(args?: Subset<T, Branch$librarybooksArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    guardians<T extends Branch$guardiansArgs<ExtArgs> = {}>(args?: Subset<T, Branch$guardiansArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Branch model
   */
  interface BranchFieldRefs {
    readonly id: FieldRef<"Branch", 'Int'>
    readonly school_id: FieldRef<"Branch", 'Int'>
    readonly branch_country_id: FieldRef<"Branch", 'Int'>
    readonly branch_state_id: FieldRef<"Branch", 'Int'>
    readonly branch_name: FieldRef<"Branch", 'String'>
    readonly branch_phone: FieldRef<"Branch", 'String'>
    readonly branch_email: FieldRef<"Branch", 'String'>
    readonly branch_address: FieldRef<"Branch", 'String'>
    readonly branch_state: FieldRef<"Branch", 'Int'>
    readonly branch_active: FieldRef<"Branch", 'Int'>
    readonly branch_main: FieldRef<"Branch", 'Int'>
    readonly prevent_users_to_login: FieldRef<"Branch", 'Int'>
    readonly branch_blocked_reason: FieldRef<"Branch", 'String'>
    readonly created_by: FieldRef<"Branch", 'Int'>
    readonly created_at: FieldRef<"Branch", 'DateTime'>
    readonly updated_at: FieldRef<"Branch", 'DateTime'>
    readonly deleted_at: FieldRef<"Branch", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Branch findUnique
   */
  export type BranchFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter, which Branch to fetch.
     */
    where: BranchWhereUniqueInput
  }

  /**
   * Branch findUniqueOrThrow
   */
  export type BranchFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter, which Branch to fetch.
     */
    where: BranchWhereUniqueInput
  }

  /**
   * Branch findFirst
   */
  export type BranchFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter, which Branch to fetch.
     */
    where?: BranchWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Branches to fetch.
     */
    orderBy?: BranchOrderByWithRelationInput | BranchOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Branches.
     */
    cursor?: BranchWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Branches from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Branches.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Branches.
     */
    distinct?: BranchScalarFieldEnum | BranchScalarFieldEnum[]
  }

  /**
   * Branch findFirstOrThrow
   */
  export type BranchFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter, which Branch to fetch.
     */
    where?: BranchWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Branches to fetch.
     */
    orderBy?: BranchOrderByWithRelationInput | BranchOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Branches.
     */
    cursor?: BranchWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Branches from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Branches.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Branches.
     */
    distinct?: BranchScalarFieldEnum | BranchScalarFieldEnum[]
  }

  /**
   * Branch findMany
   */
  export type BranchFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter, which Branches to fetch.
     */
    where?: BranchWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Branches to fetch.
     */
    orderBy?: BranchOrderByWithRelationInput | BranchOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Branches.
     */
    cursor?: BranchWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Branches from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Branches.
     */
    skip?: number
    distinct?: BranchScalarFieldEnum | BranchScalarFieldEnum[]
  }

  /**
   * Branch create
   */
  export type BranchCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * The data needed to create a Branch.
     */
    data: XOR<BranchCreateInput, BranchUncheckedCreateInput>
  }

  /**
   * Branch createMany
   */
  export type BranchCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Branches.
     */
    data: BranchCreateManyInput | BranchCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Branch update
   */
  export type BranchUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * The data needed to update a Branch.
     */
    data: XOR<BranchUpdateInput, BranchUncheckedUpdateInput>
    /**
     * Choose, which Branch to update.
     */
    where: BranchWhereUniqueInput
  }

  /**
   * Branch updateMany
   */
  export type BranchUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Branches.
     */
    data: XOR<BranchUpdateManyMutationInput, BranchUncheckedUpdateManyInput>
    /**
     * Filter which Branches to update
     */
    where?: BranchWhereInput
    /**
     * Limit how many Branches to update.
     */
    limit?: number
  }

  /**
   * Branch upsert
   */
  export type BranchUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * The filter to search for the Branch to update in case it exists.
     */
    where: BranchWhereUniqueInput
    /**
     * In case the Branch found by the `where` argument doesn't exist, create a new Branch with this data.
     */
    create: XOR<BranchCreateInput, BranchUncheckedCreateInput>
    /**
     * In case the Branch was found with the provided `where` argument, update it with this data.
     */
    update: XOR<BranchUpdateInput, BranchUncheckedUpdateInput>
  }

  /**
   * Branch delete
   */
  export type BranchDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    /**
     * Filter which Branch to delete.
     */
    where: BranchWhereUniqueInput
  }

  /**
   * Branch deleteMany
   */
  export type BranchDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Branches to delete
     */
    where?: BranchWhereInput
    /**
     * Limit how many Branches to delete.
     */
    limit?: number
  }

  /**
   * Branch.branchLevels
   */
  export type Branch$branchLevelsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    where?: BranchLevelWhereInput
    orderBy?: BranchLevelOrderByWithRelationInput | BranchLevelOrderByWithRelationInput[]
    cursor?: BranchLevelWhereUniqueInput
    take?: number
    skip?: number
    distinct?: BranchLevelScalarFieldEnum | BranchLevelScalarFieldEnum[]
  }

  /**
   * Branch.students
   */
  export type Branch$studentsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    where?: StudentWhereInput
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    cursor?: StudentWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StudentScalarFieldEnum | StudentScalarFieldEnum[]
  }

  /**
   * Branch.users
   */
  export type Branch$usersArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    where?: UserWhereInput
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    cursor?: UserWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * Branch.multimedia
   */
  export type Branch$multimediaArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    where?: MultimediaWhereInput
    orderBy?: MultimediaOrderByWithRelationInput | MultimediaOrderByWithRelationInput[]
    cursor?: MultimediaWhereUniqueInput
    take?: number
    skip?: number
    distinct?: MultimediaScalarFieldEnum | MultimediaScalarFieldEnum[]
  }

  /**
   * Branch.librarybooks
   */
  export type Branch$librarybooksArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    where?: LibraryBookWhereInput
    orderBy?: LibraryBookOrderByWithRelationInput | LibraryBookOrderByWithRelationInput[]
    cursor?: LibraryBookWhereUniqueInput
    take?: number
    skip?: number
    distinct?: LibraryBookScalarFieldEnum | LibraryBookScalarFieldEnum[]
  }

  /**
   * Branch.guardians
   */
  export type Branch$guardiansArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    where?: GuardianWhereInput
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    cursor?: GuardianWhereUniqueInput
    take?: number
    skip?: number
    distinct?: GuardianScalarFieldEnum | GuardianScalarFieldEnum[]
  }

  /**
   * Branch without action
   */
  export type BranchDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
  }


  /**
   * Model BranchLevel
   */

  export type AggregateBranchLevel = {
    _count: BranchLevelCountAggregateOutputType | null
    _avg: BranchLevelAvgAggregateOutputType | null
    _sum: BranchLevelSumAggregateOutputType | null
    _min: BranchLevelMinAggregateOutputType | null
    _max: BranchLevelMaxAggregateOutputType | null
  }

  export type BranchLevelAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_leader: number | null
    level_active: number | null
    created_by: number | null
  }

  export type BranchLevelSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_leader: number | null
    level_active: number | null
    created_by: number | null
  }

  export type BranchLevelMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_name: string | null
    level_leader: number | null
    level_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchLevelMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_name: string | null
    level_leader: number | null
    level_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchLevelCountAggregateOutputType = {
    id: number
    branch_id: number
    level_name: number
    level_leader: number
    level_active: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type BranchLevelAvgAggregateInputType = {
    id?: true
    branch_id?: true
    level_leader?: true
    level_active?: true
    created_by?: true
  }

  export type BranchLevelSumAggregateInputType = {
    id?: true
    branch_id?: true
    level_leader?: true
    level_active?: true
    created_by?: true
  }

  export type BranchLevelMinAggregateInputType = {
    id?: true
    branch_id?: true
    level_name?: true
    level_leader?: true
    level_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchLevelMaxAggregateInputType = {
    id?: true
    branch_id?: true
    level_name?: true
    level_leader?: true
    level_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchLevelCountAggregateInputType = {
    id?: true
    branch_id?: true
    level_name?: true
    level_leader?: true
    level_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type BranchLevelAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which BranchLevel to aggregate.
     */
    where?: BranchLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchLevels to fetch.
     */
    orderBy?: BranchLevelOrderByWithRelationInput | BranchLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: BranchLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned BranchLevels
    **/
    _count?: true | BranchLevelCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: BranchLevelAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: BranchLevelSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: BranchLevelMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: BranchLevelMaxAggregateInputType
  }

  export type GetBranchLevelAggregateType<T extends BranchLevelAggregateArgs> = {
        [P in keyof T & keyof AggregateBranchLevel]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateBranchLevel[P]>
      : GetScalarType<T[P], AggregateBranchLevel[P]>
  }




  export type BranchLevelGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: BranchLevelWhereInput
    orderBy?: BranchLevelOrderByWithAggregationInput | BranchLevelOrderByWithAggregationInput[]
    by: BranchLevelScalarFieldEnum[] | BranchLevelScalarFieldEnum
    having?: BranchLevelScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: BranchLevelCountAggregateInputType | true
    _avg?: BranchLevelAvgAggregateInputType
    _sum?: BranchLevelSumAggregateInputType
    _min?: BranchLevelMinAggregateInputType
    _max?: BranchLevelMaxAggregateInputType
  }

  export type BranchLevelGroupByOutputType = {
    id: number
    branch_id: number
    level_name: string
    level_leader: number | null
    level_active: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: BranchLevelCountAggregateOutputType | null
    _avg: BranchLevelAvgAggregateOutputType | null
    _sum: BranchLevelSumAggregateOutputType | null
    _min: BranchLevelMinAggregateOutputType | null
    _max: BranchLevelMaxAggregateOutputType | null
  }

  type GetBranchLevelGroupByPayload<T extends BranchLevelGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<BranchLevelGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof BranchLevelGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], BranchLevelGroupByOutputType[P]>
            : GetScalarType<T[P], BranchLevelGroupByOutputType[P]>
        }
      >
    >


  export type BranchLevelSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    level_name?: boolean
    level_leader?: boolean
    level_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    branch?: boolean | BranchDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["branchLevel"]>



  export type BranchLevelSelectScalar = {
    id?: boolean
    branch_id?: boolean
    level_name?: boolean
    level_leader?: boolean
    level_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type BranchLevelOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "level_name" | "level_leader" | "level_active" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["branchLevel"]>
  export type BranchLevelInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    branch?: boolean | BranchDefaultArgs<ExtArgs>
  }

  export type $BranchLevelPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "BranchLevel"
    objects: {
      branch: Prisma.$BranchPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      level_name: string
      level_leader: number | null
      level_active: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["branchLevel"]>
    composites: {}
  }

  type BranchLevelGetPayload<S extends boolean | null | undefined | BranchLevelDefaultArgs> = $Result.GetResult<Prisma.$BranchLevelPayload, S>

  type BranchLevelCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<BranchLevelFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: BranchLevelCountAggregateInputType | true
    }

  export interface BranchLevelDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['BranchLevel'], meta: { name: 'BranchLevel' } }
    /**
     * Find zero or one BranchLevel that matches the filter.
     * @param {BranchLevelFindUniqueArgs} args - Arguments to find a BranchLevel
     * @example
     * // Get one BranchLevel
     * const branchLevel = await prisma.branchLevel.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends BranchLevelFindUniqueArgs>(args: SelectSubset<T, BranchLevelFindUniqueArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one BranchLevel that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {BranchLevelFindUniqueOrThrowArgs} args - Arguments to find a BranchLevel
     * @example
     * // Get one BranchLevel
     * const branchLevel = await prisma.branchLevel.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends BranchLevelFindUniqueOrThrowArgs>(args: SelectSubset<T, BranchLevelFindUniqueOrThrowArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first BranchLevel that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelFindFirstArgs} args - Arguments to find a BranchLevel
     * @example
     * // Get one BranchLevel
     * const branchLevel = await prisma.branchLevel.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends BranchLevelFindFirstArgs>(args?: SelectSubset<T, BranchLevelFindFirstArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first BranchLevel that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelFindFirstOrThrowArgs} args - Arguments to find a BranchLevel
     * @example
     * // Get one BranchLevel
     * const branchLevel = await prisma.branchLevel.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends BranchLevelFindFirstOrThrowArgs>(args?: SelectSubset<T, BranchLevelFindFirstOrThrowArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more BranchLevels that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all BranchLevels
     * const branchLevels = await prisma.branchLevel.findMany()
     * 
     * // Get first 10 BranchLevels
     * const branchLevels = await prisma.branchLevel.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const branchLevelWithIdOnly = await prisma.branchLevel.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends BranchLevelFindManyArgs>(args?: SelectSubset<T, BranchLevelFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a BranchLevel.
     * @param {BranchLevelCreateArgs} args - Arguments to create a BranchLevel.
     * @example
     * // Create one BranchLevel
     * const BranchLevel = await prisma.branchLevel.create({
     *   data: {
     *     // ... data to create a BranchLevel
     *   }
     * })
     * 
     */
    create<T extends BranchLevelCreateArgs>(args: SelectSubset<T, BranchLevelCreateArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many BranchLevels.
     * @param {BranchLevelCreateManyArgs} args - Arguments to create many BranchLevels.
     * @example
     * // Create many BranchLevels
     * const branchLevel = await prisma.branchLevel.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends BranchLevelCreateManyArgs>(args?: SelectSubset<T, BranchLevelCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a BranchLevel.
     * @param {BranchLevelDeleteArgs} args - Arguments to delete one BranchLevel.
     * @example
     * // Delete one BranchLevel
     * const BranchLevel = await prisma.branchLevel.delete({
     *   where: {
     *     // ... filter to delete one BranchLevel
     *   }
     * })
     * 
     */
    delete<T extends BranchLevelDeleteArgs>(args: SelectSubset<T, BranchLevelDeleteArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one BranchLevel.
     * @param {BranchLevelUpdateArgs} args - Arguments to update one BranchLevel.
     * @example
     * // Update one BranchLevel
     * const branchLevel = await prisma.branchLevel.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends BranchLevelUpdateArgs>(args: SelectSubset<T, BranchLevelUpdateArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more BranchLevels.
     * @param {BranchLevelDeleteManyArgs} args - Arguments to filter BranchLevels to delete.
     * @example
     * // Delete a few BranchLevels
     * const { count } = await prisma.branchLevel.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends BranchLevelDeleteManyArgs>(args?: SelectSubset<T, BranchLevelDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more BranchLevels.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many BranchLevels
     * const branchLevel = await prisma.branchLevel.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends BranchLevelUpdateManyArgs>(args: SelectSubset<T, BranchLevelUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one BranchLevel.
     * @param {BranchLevelUpsertArgs} args - Arguments to update or create a BranchLevel.
     * @example
     * // Update or create a BranchLevel
     * const branchLevel = await prisma.branchLevel.upsert({
     *   create: {
     *     // ... data to create a BranchLevel
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the BranchLevel we want to update
     *   }
     * })
     */
    upsert<T extends BranchLevelUpsertArgs>(args: SelectSubset<T, BranchLevelUpsertArgs<ExtArgs>>): Prisma__BranchLevelClient<$Result.GetResult<Prisma.$BranchLevelPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of BranchLevels.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelCountArgs} args - Arguments to filter BranchLevels to count.
     * @example
     * // Count the number of BranchLevels
     * const count = await prisma.branchLevel.count({
     *   where: {
     *     // ... the filter for the BranchLevels we want to count
     *   }
     * })
    **/
    count<T extends BranchLevelCountArgs>(
      args?: Subset<T, BranchLevelCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], BranchLevelCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a BranchLevel.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends BranchLevelAggregateArgs>(args: Subset<T, BranchLevelAggregateArgs>): Prisma.PrismaPromise<GetBranchLevelAggregateType<T>>

    /**
     * Group by BranchLevel.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchLevelGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends BranchLevelGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: BranchLevelGroupByArgs['orderBy'] }
        : { orderBy?: BranchLevelGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, BranchLevelGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetBranchLevelGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the BranchLevel model
   */
  readonly fields: BranchLevelFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for BranchLevel.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__BranchLevelClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    branch<T extends BranchDefaultArgs<ExtArgs> = {}>(args?: Subset<T, BranchDefaultArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the BranchLevel model
   */
  interface BranchLevelFieldRefs {
    readonly id: FieldRef<"BranchLevel", 'Int'>
    readonly branch_id: FieldRef<"BranchLevel", 'Int'>
    readonly level_name: FieldRef<"BranchLevel", 'String'>
    readonly level_leader: FieldRef<"BranchLevel", 'Int'>
    readonly level_active: FieldRef<"BranchLevel", 'Int'>
    readonly created_by: FieldRef<"BranchLevel", 'Int'>
    readonly created_at: FieldRef<"BranchLevel", 'DateTime'>
    readonly updated_at: FieldRef<"BranchLevel", 'DateTime'>
    readonly deleted_at: FieldRef<"BranchLevel", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * BranchLevel findUnique
   */
  export type BranchLevelFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter, which BranchLevel to fetch.
     */
    where: BranchLevelWhereUniqueInput
  }

  /**
   * BranchLevel findUniqueOrThrow
   */
  export type BranchLevelFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter, which BranchLevel to fetch.
     */
    where: BranchLevelWhereUniqueInput
  }

  /**
   * BranchLevel findFirst
   */
  export type BranchLevelFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter, which BranchLevel to fetch.
     */
    where?: BranchLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchLevels to fetch.
     */
    orderBy?: BranchLevelOrderByWithRelationInput | BranchLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for BranchLevels.
     */
    cursor?: BranchLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of BranchLevels.
     */
    distinct?: BranchLevelScalarFieldEnum | BranchLevelScalarFieldEnum[]
  }

  /**
   * BranchLevel findFirstOrThrow
   */
  export type BranchLevelFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter, which BranchLevel to fetch.
     */
    where?: BranchLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchLevels to fetch.
     */
    orderBy?: BranchLevelOrderByWithRelationInput | BranchLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for BranchLevels.
     */
    cursor?: BranchLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of BranchLevels.
     */
    distinct?: BranchLevelScalarFieldEnum | BranchLevelScalarFieldEnum[]
  }

  /**
   * BranchLevel findMany
   */
  export type BranchLevelFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter, which BranchLevels to fetch.
     */
    where?: BranchLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchLevels to fetch.
     */
    orderBy?: BranchLevelOrderByWithRelationInput | BranchLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing BranchLevels.
     */
    cursor?: BranchLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchLevels.
     */
    skip?: number
    distinct?: BranchLevelScalarFieldEnum | BranchLevelScalarFieldEnum[]
  }

  /**
   * BranchLevel create
   */
  export type BranchLevelCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * The data needed to create a BranchLevel.
     */
    data: XOR<BranchLevelCreateInput, BranchLevelUncheckedCreateInput>
  }

  /**
   * BranchLevel createMany
   */
  export type BranchLevelCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many BranchLevels.
     */
    data: BranchLevelCreateManyInput | BranchLevelCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * BranchLevel update
   */
  export type BranchLevelUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * The data needed to update a BranchLevel.
     */
    data: XOR<BranchLevelUpdateInput, BranchLevelUncheckedUpdateInput>
    /**
     * Choose, which BranchLevel to update.
     */
    where: BranchLevelWhereUniqueInput
  }

  /**
   * BranchLevel updateMany
   */
  export type BranchLevelUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update BranchLevels.
     */
    data: XOR<BranchLevelUpdateManyMutationInput, BranchLevelUncheckedUpdateManyInput>
    /**
     * Filter which BranchLevels to update
     */
    where?: BranchLevelWhereInput
    /**
     * Limit how many BranchLevels to update.
     */
    limit?: number
  }

  /**
   * BranchLevel upsert
   */
  export type BranchLevelUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * The filter to search for the BranchLevel to update in case it exists.
     */
    where: BranchLevelWhereUniqueInput
    /**
     * In case the BranchLevel found by the `where` argument doesn't exist, create a new BranchLevel with this data.
     */
    create: XOR<BranchLevelCreateInput, BranchLevelUncheckedCreateInput>
    /**
     * In case the BranchLevel was found with the provided `where` argument, update it with this data.
     */
    update: XOR<BranchLevelUpdateInput, BranchLevelUncheckedUpdateInput>
  }

  /**
   * BranchLevel delete
   */
  export type BranchLevelDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
    /**
     * Filter which BranchLevel to delete.
     */
    where: BranchLevelWhereUniqueInput
  }

  /**
   * BranchLevel deleteMany
   */
  export type BranchLevelDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which BranchLevels to delete
     */
    where?: BranchLevelWhereInput
    /**
     * Limit how many BranchLevels to delete.
     */
    limit?: number
  }

  /**
   * BranchLevel without action
   */
  export type BranchLevelDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchLevel
     */
    select?: BranchLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchLevel
     */
    omit?: BranchLevelOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchLevelInclude<ExtArgs> | null
  }


  /**
   * Model ClassTemplate
   */

  export type AggregateClassTemplate = {
    _count: ClassTemplateCountAggregateOutputType | null
    _avg: ClassTemplateAvgAggregateOutputType | null
    _sum: ClassTemplateSumAggregateOutputType | null
    _min: ClassTemplateMinAggregateOutputType | null
    _max: ClassTemplateMaxAggregateOutputType | null
  }

  export type ClassTemplateAvgAggregateOutputType = {
    id: number | null
    branch_level_id: number | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    rank: number | null
    class_active: number | null
    created_by: number | null
  }

  export type ClassTemplateSumAggregateOutputType = {
    id: number | null
    branch_level_id: number | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    rank: number | null
    class_active: number | null
    created_by: number | null
  }

  export type ClassTemplateMinAggregateOutputType = {
    id: number | null
    branch_level_id: number | null
    class_name: string | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    rank: number | null
    class_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassTemplateMaxAggregateOutputType = {
    id: number | null
    branch_level_id: number | null
    class_name: string | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    rank: number | null
    class_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassTemplateCountAggregateOutputType = {
    id: number
    branch_level_id: number
    class_name: number
    no_of_group: number
    has_multiple_teacher: number
    has_specialization: number
    has_optionals_subject: number
    rank: number
    class_active: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ClassTemplateAvgAggregateInputType = {
    id?: true
    branch_level_id?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    rank?: true
    class_active?: true
    created_by?: true
  }

  export type ClassTemplateSumAggregateInputType = {
    id?: true
    branch_level_id?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    rank?: true
    class_active?: true
    created_by?: true
  }

  export type ClassTemplateMinAggregateInputType = {
    id?: true
    branch_level_id?: true
    class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    rank?: true
    class_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassTemplateMaxAggregateInputType = {
    id?: true
    branch_level_id?: true
    class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    rank?: true
    class_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassTemplateCountAggregateInputType = {
    id?: true
    branch_level_id?: true
    class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    rank?: true
    class_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ClassTemplateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassTemplate to aggregate.
     */
    where?: ClassTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassTemplates to fetch.
     */
    orderBy?: ClassTemplateOrderByWithRelationInput | ClassTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ClassTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ClassTemplates
    **/
    _count?: true | ClassTemplateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ClassTemplateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ClassTemplateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ClassTemplateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ClassTemplateMaxAggregateInputType
  }

  export type GetClassTemplateAggregateType<T extends ClassTemplateAggregateArgs> = {
        [P in keyof T & keyof AggregateClassTemplate]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateClassTemplate[P]>
      : GetScalarType<T[P], AggregateClassTemplate[P]>
  }




  export type ClassTemplateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassTemplateWhereInput
    orderBy?: ClassTemplateOrderByWithAggregationInput | ClassTemplateOrderByWithAggregationInput[]
    by: ClassTemplateScalarFieldEnum[] | ClassTemplateScalarFieldEnum
    having?: ClassTemplateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ClassTemplateCountAggregateInputType | true
    _avg?: ClassTemplateAvgAggregateInputType
    _sum?: ClassTemplateSumAggregateInputType
    _min?: ClassTemplateMinAggregateInputType
    _max?: ClassTemplateMaxAggregateInputType
  }

  export type ClassTemplateGroupByOutputType = {
    id: number
    branch_level_id: number
    class_name: string
    no_of_group: number
    has_multiple_teacher: number
    has_specialization: number
    has_optionals_subject: number
    rank: number | null
    class_active: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ClassTemplateCountAggregateOutputType | null
    _avg: ClassTemplateAvgAggregateOutputType | null
    _sum: ClassTemplateSumAggregateOutputType | null
    _min: ClassTemplateMinAggregateOutputType | null
    _max: ClassTemplateMaxAggregateOutputType | null
  }

  type GetClassTemplateGroupByPayload<T extends ClassTemplateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ClassTemplateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ClassTemplateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ClassTemplateGroupByOutputType[P]>
            : GetScalarType<T[P], ClassTemplateGroupByOutputType[P]>
        }
      >
    >


  export type ClassTemplateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_level_id?: boolean
    class_name?: boolean
    no_of_group?: boolean
    has_multiple_teacher?: boolean
    has_specialization?: boolean
    has_optionals_subject?: boolean
    rank?: boolean
    class_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    SessionClass?: boolean | ClassTemplate$SessionClassArgs<ExtArgs>
    exam?: boolean | ClassTemplate$examArgs<ExtArgs>
    _count?: boolean | ClassTemplateCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["classTemplate"]>



  export type ClassTemplateSelectScalar = {
    id?: boolean
    branch_level_id?: boolean
    class_name?: boolean
    no_of_group?: boolean
    has_multiple_teacher?: boolean
    has_specialization?: boolean
    has_optionals_subject?: boolean
    rank?: boolean
    class_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ClassTemplateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_level_id" | "class_name" | "no_of_group" | "has_multiple_teacher" | "has_specialization" | "has_optionals_subject" | "rank" | "class_active" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["classTemplate"]>
  export type ClassTemplateInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionClass?: boolean | ClassTemplate$SessionClassArgs<ExtArgs>
    exam?: boolean | ClassTemplate$examArgs<ExtArgs>
    _count?: boolean | ClassTemplateCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $ClassTemplatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ClassTemplate"
    objects: {
      SessionClass: Prisma.$SessionClassPayload<ExtArgs>[]
      exam: Prisma.$ExamPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_level_id: number
      class_name: string
      no_of_group: number
      has_multiple_teacher: number
      has_specialization: number
      has_optionals_subject: number
      rank: number | null
      class_active: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["classTemplate"]>
    composites: {}
  }

  type ClassTemplateGetPayload<S extends boolean | null | undefined | ClassTemplateDefaultArgs> = $Result.GetResult<Prisma.$ClassTemplatePayload, S>

  type ClassTemplateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ClassTemplateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ClassTemplateCountAggregateInputType | true
    }

  export interface ClassTemplateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ClassTemplate'], meta: { name: 'ClassTemplate' } }
    /**
     * Find zero or one ClassTemplate that matches the filter.
     * @param {ClassTemplateFindUniqueArgs} args - Arguments to find a ClassTemplate
     * @example
     * // Get one ClassTemplate
     * const classTemplate = await prisma.classTemplate.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ClassTemplateFindUniqueArgs>(args: SelectSubset<T, ClassTemplateFindUniqueArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ClassTemplate that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ClassTemplateFindUniqueOrThrowArgs} args - Arguments to find a ClassTemplate
     * @example
     * // Get one ClassTemplate
     * const classTemplate = await prisma.classTemplate.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ClassTemplateFindUniqueOrThrowArgs>(args: SelectSubset<T, ClassTemplateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassTemplate that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateFindFirstArgs} args - Arguments to find a ClassTemplate
     * @example
     * // Get one ClassTemplate
     * const classTemplate = await prisma.classTemplate.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ClassTemplateFindFirstArgs>(args?: SelectSubset<T, ClassTemplateFindFirstArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassTemplate that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateFindFirstOrThrowArgs} args - Arguments to find a ClassTemplate
     * @example
     * // Get one ClassTemplate
     * const classTemplate = await prisma.classTemplate.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ClassTemplateFindFirstOrThrowArgs>(args?: SelectSubset<T, ClassTemplateFindFirstOrThrowArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ClassTemplates that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ClassTemplates
     * const classTemplates = await prisma.classTemplate.findMany()
     * 
     * // Get first 10 ClassTemplates
     * const classTemplates = await prisma.classTemplate.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const classTemplateWithIdOnly = await prisma.classTemplate.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ClassTemplateFindManyArgs>(args?: SelectSubset<T, ClassTemplateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ClassTemplate.
     * @param {ClassTemplateCreateArgs} args - Arguments to create a ClassTemplate.
     * @example
     * // Create one ClassTemplate
     * const ClassTemplate = await prisma.classTemplate.create({
     *   data: {
     *     // ... data to create a ClassTemplate
     *   }
     * })
     * 
     */
    create<T extends ClassTemplateCreateArgs>(args: SelectSubset<T, ClassTemplateCreateArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ClassTemplates.
     * @param {ClassTemplateCreateManyArgs} args - Arguments to create many ClassTemplates.
     * @example
     * // Create many ClassTemplates
     * const classTemplate = await prisma.classTemplate.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ClassTemplateCreateManyArgs>(args?: SelectSubset<T, ClassTemplateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ClassTemplate.
     * @param {ClassTemplateDeleteArgs} args - Arguments to delete one ClassTemplate.
     * @example
     * // Delete one ClassTemplate
     * const ClassTemplate = await prisma.classTemplate.delete({
     *   where: {
     *     // ... filter to delete one ClassTemplate
     *   }
     * })
     * 
     */
    delete<T extends ClassTemplateDeleteArgs>(args: SelectSubset<T, ClassTemplateDeleteArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ClassTemplate.
     * @param {ClassTemplateUpdateArgs} args - Arguments to update one ClassTemplate.
     * @example
     * // Update one ClassTemplate
     * const classTemplate = await prisma.classTemplate.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ClassTemplateUpdateArgs>(args: SelectSubset<T, ClassTemplateUpdateArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ClassTemplates.
     * @param {ClassTemplateDeleteManyArgs} args - Arguments to filter ClassTemplates to delete.
     * @example
     * // Delete a few ClassTemplates
     * const { count } = await prisma.classTemplate.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ClassTemplateDeleteManyArgs>(args?: SelectSubset<T, ClassTemplateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ClassTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ClassTemplates
     * const classTemplate = await prisma.classTemplate.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ClassTemplateUpdateManyArgs>(args: SelectSubset<T, ClassTemplateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ClassTemplate.
     * @param {ClassTemplateUpsertArgs} args - Arguments to update or create a ClassTemplate.
     * @example
     * // Update or create a ClassTemplate
     * const classTemplate = await prisma.classTemplate.upsert({
     *   create: {
     *     // ... data to create a ClassTemplate
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ClassTemplate we want to update
     *   }
     * })
     */
    upsert<T extends ClassTemplateUpsertArgs>(args: SelectSubset<T, ClassTemplateUpsertArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ClassTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateCountArgs} args - Arguments to filter ClassTemplates to count.
     * @example
     * // Count the number of ClassTemplates
     * const count = await prisma.classTemplate.count({
     *   where: {
     *     // ... the filter for the ClassTemplates we want to count
     *   }
     * })
    **/
    count<T extends ClassTemplateCountArgs>(
      args?: Subset<T, ClassTemplateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ClassTemplateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ClassTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ClassTemplateAggregateArgs>(args: Subset<T, ClassTemplateAggregateArgs>): Prisma.PrismaPromise<GetClassTemplateAggregateType<T>>

    /**
     * Group by ClassTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassTemplateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ClassTemplateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ClassTemplateGroupByArgs['orderBy'] }
        : { orderBy?: ClassTemplateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ClassTemplateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetClassTemplateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ClassTemplate model
   */
  readonly fields: ClassTemplateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ClassTemplate.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ClassTemplateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    SessionClass<T extends ClassTemplate$SessionClassArgs<ExtArgs> = {}>(args?: Subset<T, ClassTemplate$SessionClassArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    exam<T extends ClassTemplate$examArgs<ExtArgs> = {}>(args?: Subset<T, ClassTemplate$examArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ClassTemplate model
   */
  interface ClassTemplateFieldRefs {
    readonly id: FieldRef<"ClassTemplate", 'Int'>
    readonly branch_level_id: FieldRef<"ClassTemplate", 'Int'>
    readonly class_name: FieldRef<"ClassTemplate", 'String'>
    readonly no_of_group: FieldRef<"ClassTemplate", 'Int'>
    readonly has_multiple_teacher: FieldRef<"ClassTemplate", 'Int'>
    readonly has_specialization: FieldRef<"ClassTemplate", 'Int'>
    readonly has_optionals_subject: FieldRef<"ClassTemplate", 'Int'>
    readonly rank: FieldRef<"ClassTemplate", 'Int'>
    readonly class_active: FieldRef<"ClassTemplate", 'Int'>
    readonly created_by: FieldRef<"ClassTemplate", 'Int'>
    readonly created_at: FieldRef<"ClassTemplate", 'DateTime'>
    readonly updated_at: FieldRef<"ClassTemplate", 'DateTime'>
    readonly deleted_at: FieldRef<"ClassTemplate", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ClassTemplate findUnique
   */
  export type ClassTemplateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassTemplate to fetch.
     */
    where: ClassTemplateWhereUniqueInput
  }

  /**
   * ClassTemplate findUniqueOrThrow
   */
  export type ClassTemplateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassTemplate to fetch.
     */
    where: ClassTemplateWhereUniqueInput
  }

  /**
   * ClassTemplate findFirst
   */
  export type ClassTemplateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassTemplate to fetch.
     */
    where?: ClassTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassTemplates to fetch.
     */
    orderBy?: ClassTemplateOrderByWithRelationInput | ClassTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassTemplates.
     */
    cursor?: ClassTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassTemplates.
     */
    distinct?: ClassTemplateScalarFieldEnum | ClassTemplateScalarFieldEnum[]
  }

  /**
   * ClassTemplate findFirstOrThrow
   */
  export type ClassTemplateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassTemplate to fetch.
     */
    where?: ClassTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassTemplates to fetch.
     */
    orderBy?: ClassTemplateOrderByWithRelationInput | ClassTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassTemplates.
     */
    cursor?: ClassTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassTemplates.
     */
    distinct?: ClassTemplateScalarFieldEnum | ClassTemplateScalarFieldEnum[]
  }

  /**
   * ClassTemplate findMany
   */
  export type ClassTemplateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassTemplates to fetch.
     */
    where?: ClassTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassTemplates to fetch.
     */
    orderBy?: ClassTemplateOrderByWithRelationInput | ClassTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ClassTemplates.
     */
    cursor?: ClassTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassTemplates.
     */
    skip?: number
    distinct?: ClassTemplateScalarFieldEnum | ClassTemplateScalarFieldEnum[]
  }

  /**
   * ClassTemplate create
   */
  export type ClassTemplateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * The data needed to create a ClassTemplate.
     */
    data: XOR<ClassTemplateCreateInput, ClassTemplateUncheckedCreateInput>
  }

  /**
   * ClassTemplate createMany
   */
  export type ClassTemplateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ClassTemplates.
     */
    data: ClassTemplateCreateManyInput | ClassTemplateCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ClassTemplate update
   */
  export type ClassTemplateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * The data needed to update a ClassTemplate.
     */
    data: XOR<ClassTemplateUpdateInput, ClassTemplateUncheckedUpdateInput>
    /**
     * Choose, which ClassTemplate to update.
     */
    where: ClassTemplateWhereUniqueInput
  }

  /**
   * ClassTemplate updateMany
   */
  export type ClassTemplateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ClassTemplates.
     */
    data: XOR<ClassTemplateUpdateManyMutationInput, ClassTemplateUncheckedUpdateManyInput>
    /**
     * Filter which ClassTemplates to update
     */
    where?: ClassTemplateWhereInput
    /**
     * Limit how many ClassTemplates to update.
     */
    limit?: number
  }

  /**
   * ClassTemplate upsert
   */
  export type ClassTemplateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * The filter to search for the ClassTemplate to update in case it exists.
     */
    where: ClassTemplateWhereUniqueInput
    /**
     * In case the ClassTemplate found by the `where` argument doesn't exist, create a new ClassTemplate with this data.
     */
    create: XOR<ClassTemplateCreateInput, ClassTemplateUncheckedCreateInput>
    /**
     * In case the ClassTemplate was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ClassTemplateUpdateInput, ClassTemplateUncheckedUpdateInput>
  }

  /**
   * ClassTemplate delete
   */
  export type ClassTemplateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    /**
     * Filter which ClassTemplate to delete.
     */
    where: ClassTemplateWhereUniqueInput
  }

  /**
   * ClassTemplate deleteMany
   */
  export type ClassTemplateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassTemplates to delete
     */
    where?: ClassTemplateWhereInput
    /**
     * Limit how many ClassTemplates to delete.
     */
    limit?: number
  }

  /**
   * ClassTemplate.SessionClass
   */
  export type ClassTemplate$SessionClassArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    where?: SessionClassWhereInput
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    cursor?: SessionClassWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SessionClassScalarFieldEnum | SessionClassScalarFieldEnum[]
  }

  /**
   * ClassTemplate.exam
   */
  export type ClassTemplate$examArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    cursor?: ExamWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * ClassTemplate without action
   */
  export type ClassTemplateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
  }


  /**
   * Model SubjectSetup
   */

  export type AggregateSubjectSetup = {
    _count: SubjectSetupCountAggregateOutputType | null
    _avg: SubjectSetupAvgAggregateOutputType | null
    _sum: SubjectSetupSumAggregateOutputType | null
    _min: SubjectSetupMinAggregateOutputType | null
    _max: SubjectSetupMaxAggregateOutputType | null
  }

  export type SubjectSetupAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type SubjectSetupSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type SubjectSetupMinAggregateOutputType = {
    id: number | null
    subject_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SubjectSetupMaxAggregateOutputType = {
    id: number | null
    subject_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SubjectSetupCountAggregateOutputType = {
    id: number
    subject_name: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SubjectSetupAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type SubjectSetupSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type SubjectSetupMinAggregateInputType = {
    id?: true
    subject_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SubjectSetupMaxAggregateInputType = {
    id?: true
    subject_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SubjectSetupCountAggregateInputType = {
    id?: true
    subject_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SubjectSetupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SubjectSetup to aggregate.
     */
    where?: SubjectSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SubjectSetups to fetch.
     */
    orderBy?: SubjectSetupOrderByWithRelationInput | SubjectSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SubjectSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SubjectSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SubjectSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SubjectSetups
    **/
    _count?: true | SubjectSetupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SubjectSetupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SubjectSetupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SubjectSetupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SubjectSetupMaxAggregateInputType
  }

  export type GetSubjectSetupAggregateType<T extends SubjectSetupAggregateArgs> = {
        [P in keyof T & keyof AggregateSubjectSetup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSubjectSetup[P]>
      : GetScalarType<T[P], AggregateSubjectSetup[P]>
  }




  export type SubjectSetupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SubjectSetupWhereInput
    orderBy?: SubjectSetupOrderByWithAggregationInput | SubjectSetupOrderByWithAggregationInput[]
    by: SubjectSetupScalarFieldEnum[] | SubjectSetupScalarFieldEnum
    having?: SubjectSetupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SubjectSetupCountAggregateInputType | true
    _avg?: SubjectSetupAvgAggregateInputType
    _sum?: SubjectSetupSumAggregateInputType
    _min?: SubjectSetupMinAggregateInputType
    _max?: SubjectSetupMaxAggregateInputType
  }

  export type SubjectSetupGroupByOutputType = {
    id: number
    subject_name: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SubjectSetupCountAggregateOutputType | null
    _avg: SubjectSetupAvgAggregateOutputType | null
    _sum: SubjectSetupSumAggregateOutputType | null
    _min: SubjectSetupMinAggregateOutputType | null
    _max: SubjectSetupMaxAggregateOutputType | null
  }

  type GetSubjectSetupGroupByPayload<T extends SubjectSetupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SubjectSetupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SubjectSetupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SubjectSetupGroupByOutputType[P]>
            : GetScalarType<T[P], SubjectSetupGroupByOutputType[P]>
        }
      >
    >


  export type SubjectSetupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    subject_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["subjectSetup"]>



  export type SubjectSetupSelectScalar = {
    id?: boolean
    subject_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SubjectSetupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "subject_name" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["subjectSetup"]>

  export type $SubjectSetupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SubjectSetup"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      subject_name: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["subjectSetup"]>
    composites: {}
  }

  type SubjectSetupGetPayload<S extends boolean | null | undefined | SubjectSetupDefaultArgs> = $Result.GetResult<Prisma.$SubjectSetupPayload, S>

  type SubjectSetupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SubjectSetupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SubjectSetupCountAggregateInputType | true
    }

  export interface SubjectSetupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SubjectSetup'], meta: { name: 'SubjectSetup' } }
    /**
     * Find zero or one SubjectSetup that matches the filter.
     * @param {SubjectSetupFindUniqueArgs} args - Arguments to find a SubjectSetup
     * @example
     * // Get one SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SubjectSetupFindUniqueArgs>(args: SelectSubset<T, SubjectSetupFindUniqueArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SubjectSetup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SubjectSetupFindUniqueOrThrowArgs} args - Arguments to find a SubjectSetup
     * @example
     * // Get one SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SubjectSetupFindUniqueOrThrowArgs>(args: SelectSubset<T, SubjectSetupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SubjectSetup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupFindFirstArgs} args - Arguments to find a SubjectSetup
     * @example
     * // Get one SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SubjectSetupFindFirstArgs>(args?: SelectSubset<T, SubjectSetupFindFirstArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SubjectSetup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupFindFirstOrThrowArgs} args - Arguments to find a SubjectSetup
     * @example
     * // Get one SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SubjectSetupFindFirstOrThrowArgs>(args?: SelectSubset<T, SubjectSetupFindFirstOrThrowArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SubjectSetups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SubjectSetups
     * const subjectSetups = await prisma.subjectSetup.findMany()
     * 
     * // Get first 10 SubjectSetups
     * const subjectSetups = await prisma.subjectSetup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const subjectSetupWithIdOnly = await prisma.subjectSetup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SubjectSetupFindManyArgs>(args?: SelectSubset<T, SubjectSetupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SubjectSetup.
     * @param {SubjectSetupCreateArgs} args - Arguments to create a SubjectSetup.
     * @example
     * // Create one SubjectSetup
     * const SubjectSetup = await prisma.subjectSetup.create({
     *   data: {
     *     // ... data to create a SubjectSetup
     *   }
     * })
     * 
     */
    create<T extends SubjectSetupCreateArgs>(args: SelectSubset<T, SubjectSetupCreateArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SubjectSetups.
     * @param {SubjectSetupCreateManyArgs} args - Arguments to create many SubjectSetups.
     * @example
     * // Create many SubjectSetups
     * const subjectSetup = await prisma.subjectSetup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SubjectSetupCreateManyArgs>(args?: SelectSubset<T, SubjectSetupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SubjectSetup.
     * @param {SubjectSetupDeleteArgs} args - Arguments to delete one SubjectSetup.
     * @example
     * // Delete one SubjectSetup
     * const SubjectSetup = await prisma.subjectSetup.delete({
     *   where: {
     *     // ... filter to delete one SubjectSetup
     *   }
     * })
     * 
     */
    delete<T extends SubjectSetupDeleteArgs>(args: SelectSubset<T, SubjectSetupDeleteArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SubjectSetup.
     * @param {SubjectSetupUpdateArgs} args - Arguments to update one SubjectSetup.
     * @example
     * // Update one SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SubjectSetupUpdateArgs>(args: SelectSubset<T, SubjectSetupUpdateArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SubjectSetups.
     * @param {SubjectSetupDeleteManyArgs} args - Arguments to filter SubjectSetups to delete.
     * @example
     * // Delete a few SubjectSetups
     * const { count } = await prisma.subjectSetup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SubjectSetupDeleteManyArgs>(args?: SelectSubset<T, SubjectSetupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SubjectSetups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SubjectSetups
     * const subjectSetup = await prisma.subjectSetup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SubjectSetupUpdateManyArgs>(args: SelectSubset<T, SubjectSetupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SubjectSetup.
     * @param {SubjectSetupUpsertArgs} args - Arguments to update or create a SubjectSetup.
     * @example
     * // Update or create a SubjectSetup
     * const subjectSetup = await prisma.subjectSetup.upsert({
     *   create: {
     *     // ... data to create a SubjectSetup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SubjectSetup we want to update
     *   }
     * })
     */
    upsert<T extends SubjectSetupUpsertArgs>(args: SelectSubset<T, SubjectSetupUpsertArgs<ExtArgs>>): Prisma__SubjectSetupClient<$Result.GetResult<Prisma.$SubjectSetupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SubjectSetups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupCountArgs} args - Arguments to filter SubjectSetups to count.
     * @example
     * // Count the number of SubjectSetups
     * const count = await prisma.subjectSetup.count({
     *   where: {
     *     // ... the filter for the SubjectSetups we want to count
     *   }
     * })
    **/
    count<T extends SubjectSetupCountArgs>(
      args?: Subset<T, SubjectSetupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SubjectSetupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SubjectSetup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SubjectSetupAggregateArgs>(args: Subset<T, SubjectSetupAggregateArgs>): Prisma.PrismaPromise<GetSubjectSetupAggregateType<T>>

    /**
     * Group by SubjectSetup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubjectSetupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SubjectSetupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SubjectSetupGroupByArgs['orderBy'] }
        : { orderBy?: SubjectSetupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SubjectSetupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSubjectSetupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SubjectSetup model
   */
  readonly fields: SubjectSetupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SubjectSetup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SubjectSetupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SubjectSetup model
   */
  interface SubjectSetupFieldRefs {
    readonly id: FieldRef<"SubjectSetup", 'Int'>
    readonly subject_name: FieldRef<"SubjectSetup", 'String'>
    readonly created_by: FieldRef<"SubjectSetup", 'Int'>
    readonly created_at: FieldRef<"SubjectSetup", 'DateTime'>
    readonly updated_at: FieldRef<"SubjectSetup", 'DateTime'>
    readonly deleted_at: FieldRef<"SubjectSetup", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SubjectSetup findUnique
   */
  export type SubjectSetupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter, which SubjectSetup to fetch.
     */
    where: SubjectSetupWhereUniqueInput
  }

  /**
   * SubjectSetup findUniqueOrThrow
   */
  export type SubjectSetupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter, which SubjectSetup to fetch.
     */
    where: SubjectSetupWhereUniqueInput
  }

  /**
   * SubjectSetup findFirst
   */
  export type SubjectSetupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter, which SubjectSetup to fetch.
     */
    where?: SubjectSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SubjectSetups to fetch.
     */
    orderBy?: SubjectSetupOrderByWithRelationInput | SubjectSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SubjectSetups.
     */
    cursor?: SubjectSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SubjectSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SubjectSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SubjectSetups.
     */
    distinct?: SubjectSetupScalarFieldEnum | SubjectSetupScalarFieldEnum[]
  }

  /**
   * SubjectSetup findFirstOrThrow
   */
  export type SubjectSetupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter, which SubjectSetup to fetch.
     */
    where?: SubjectSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SubjectSetups to fetch.
     */
    orderBy?: SubjectSetupOrderByWithRelationInput | SubjectSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SubjectSetups.
     */
    cursor?: SubjectSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SubjectSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SubjectSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SubjectSetups.
     */
    distinct?: SubjectSetupScalarFieldEnum | SubjectSetupScalarFieldEnum[]
  }

  /**
   * SubjectSetup findMany
   */
  export type SubjectSetupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter, which SubjectSetups to fetch.
     */
    where?: SubjectSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SubjectSetups to fetch.
     */
    orderBy?: SubjectSetupOrderByWithRelationInput | SubjectSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SubjectSetups.
     */
    cursor?: SubjectSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SubjectSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SubjectSetups.
     */
    skip?: number
    distinct?: SubjectSetupScalarFieldEnum | SubjectSetupScalarFieldEnum[]
  }

  /**
   * SubjectSetup create
   */
  export type SubjectSetupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * The data needed to create a SubjectSetup.
     */
    data: XOR<SubjectSetupCreateInput, SubjectSetupUncheckedCreateInput>
  }

  /**
   * SubjectSetup createMany
   */
  export type SubjectSetupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SubjectSetups.
     */
    data: SubjectSetupCreateManyInput | SubjectSetupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SubjectSetup update
   */
  export type SubjectSetupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * The data needed to update a SubjectSetup.
     */
    data: XOR<SubjectSetupUpdateInput, SubjectSetupUncheckedUpdateInput>
    /**
     * Choose, which SubjectSetup to update.
     */
    where: SubjectSetupWhereUniqueInput
  }

  /**
   * SubjectSetup updateMany
   */
  export type SubjectSetupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SubjectSetups.
     */
    data: XOR<SubjectSetupUpdateManyMutationInput, SubjectSetupUncheckedUpdateManyInput>
    /**
     * Filter which SubjectSetups to update
     */
    where?: SubjectSetupWhereInput
    /**
     * Limit how many SubjectSetups to update.
     */
    limit?: number
  }

  /**
   * SubjectSetup upsert
   */
  export type SubjectSetupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * The filter to search for the SubjectSetup to update in case it exists.
     */
    where: SubjectSetupWhereUniqueInput
    /**
     * In case the SubjectSetup found by the `where` argument doesn't exist, create a new SubjectSetup with this data.
     */
    create: XOR<SubjectSetupCreateInput, SubjectSetupUncheckedCreateInput>
    /**
     * In case the SubjectSetup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SubjectSetupUpdateInput, SubjectSetupUncheckedUpdateInput>
  }

  /**
   * SubjectSetup delete
   */
  export type SubjectSetupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
    /**
     * Filter which SubjectSetup to delete.
     */
    where: SubjectSetupWhereUniqueInput
  }

  /**
   * SubjectSetup deleteMany
   */
  export type SubjectSetupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SubjectSetups to delete
     */
    where?: SubjectSetupWhereInput
    /**
     * Limit how many SubjectSetups to delete.
     */
    limit?: number
  }

  /**
   * SubjectSetup without action
   */
  export type SubjectSetupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SubjectSetup
     */
    select?: SubjectSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SubjectSetup
     */
    omit?: SubjectSetupOmit<ExtArgs> | null
  }


  /**
   * Model SchoolSubject
   */

  export type AggregateSchoolSubject = {
    _count: SchoolSubjectCountAggregateOutputType | null
    _avg: SchoolSubjectAvgAggregateOutputType | null
    _sum: SchoolSubjectSumAggregateOutputType | null
    _min: SchoolSubjectMinAggregateOutputType | null
    _max: SchoolSubjectMaxAggregateOutputType | null
  }

  export type SchoolSubjectAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    school_subjects_active: number | null
    is_compulsory: number | null
    created_by: number | null
  }

  export type SchoolSubjectSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    school_subjects_active: number | null
    is_compulsory: number | null
    created_by: number | null
  }

  export type SchoolSubjectMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    subject_name: string | null
    school_subjects_active: number | null
    is_compulsory: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolSubjectMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    subject_name: string | null
    school_subjects_active: number | null
    is_compulsory: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolSubjectCountAggregateOutputType = {
    id: number
    school_id: number
    subject_name: number
    branch_config: number
    school_subjects_active: number
    is_compulsory: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SchoolSubjectAvgAggregateInputType = {
    id?: true
    school_id?: true
    school_subjects_active?: true
    is_compulsory?: true
    created_by?: true
  }

  export type SchoolSubjectSumAggregateInputType = {
    id?: true
    school_id?: true
    school_subjects_active?: true
    is_compulsory?: true
    created_by?: true
  }

  export type SchoolSubjectMinAggregateInputType = {
    id?: true
    school_id?: true
    subject_name?: true
    school_subjects_active?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolSubjectMaxAggregateInputType = {
    id?: true
    school_id?: true
    subject_name?: true
    school_subjects_active?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolSubjectCountAggregateInputType = {
    id?: true
    school_id?: true
    subject_name?: true
    branch_config?: true
    school_subjects_active?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SchoolSubjectAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolSubject to aggregate.
     */
    where?: SchoolSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSubjects to fetch.
     */
    orderBy?: SchoolSubjectOrderByWithRelationInput | SchoolSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SchoolSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SchoolSubjects
    **/
    _count?: true | SchoolSubjectCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SchoolSubjectAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SchoolSubjectSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SchoolSubjectMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SchoolSubjectMaxAggregateInputType
  }

  export type GetSchoolSubjectAggregateType<T extends SchoolSubjectAggregateArgs> = {
        [P in keyof T & keyof AggregateSchoolSubject]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSchoolSubject[P]>
      : GetScalarType<T[P], AggregateSchoolSubject[P]>
  }




  export type SchoolSubjectGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SchoolSubjectWhereInput
    orderBy?: SchoolSubjectOrderByWithAggregationInput | SchoolSubjectOrderByWithAggregationInput[]
    by: SchoolSubjectScalarFieldEnum[] | SchoolSubjectScalarFieldEnum
    having?: SchoolSubjectScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SchoolSubjectCountAggregateInputType | true
    _avg?: SchoolSubjectAvgAggregateInputType
    _sum?: SchoolSubjectSumAggregateInputType
    _min?: SchoolSubjectMinAggregateInputType
    _max?: SchoolSubjectMaxAggregateInputType
  }

  export type SchoolSubjectGroupByOutputType = {
    id: number
    school_id: number
    subject_name: string
    branch_config: JsonValue | null
    school_subjects_active: number
    is_compulsory: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SchoolSubjectCountAggregateOutputType | null
    _avg: SchoolSubjectAvgAggregateOutputType | null
    _sum: SchoolSubjectSumAggregateOutputType | null
    _min: SchoolSubjectMinAggregateOutputType | null
    _max: SchoolSubjectMaxAggregateOutputType | null
  }

  type GetSchoolSubjectGroupByPayload<T extends SchoolSubjectGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SchoolSubjectGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SchoolSubjectGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SchoolSubjectGroupByOutputType[P]>
            : GetScalarType<T[P], SchoolSubjectGroupByOutputType[P]>
        }
      >
    >


  export type SchoolSubjectSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    subject_name?: boolean
    branch_config?: boolean
    school_subjects_active?: boolean
    is_compulsory?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    SessionClassSubject?: boolean | SchoolSubject$SessionClassSubjectArgs<ExtArgs>
    ClassSubjectTemplate?: boolean | SchoolSubject$ClassSubjectTemplateArgs<ExtArgs>
    exam?: boolean | SchoolSubject$examArgs<ExtArgs>
    _count?: boolean | SchoolSubjectCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["schoolSubject"]>



  export type SchoolSubjectSelectScalar = {
    id?: boolean
    school_id?: boolean
    subject_name?: boolean
    branch_config?: boolean
    school_subjects_active?: boolean
    is_compulsory?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SchoolSubjectOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "subject_name" | "branch_config" | "school_subjects_active" | "is_compulsory" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["schoolSubject"]>
  export type SchoolSubjectInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionClassSubject?: boolean | SchoolSubject$SessionClassSubjectArgs<ExtArgs>
    ClassSubjectTemplate?: boolean | SchoolSubject$ClassSubjectTemplateArgs<ExtArgs>
    exam?: boolean | SchoolSubject$examArgs<ExtArgs>
    _count?: boolean | SchoolSubjectCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $SchoolSubjectPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SchoolSubject"
    objects: {
      SessionClassSubject: Prisma.$SessionClassSubjectPayload<ExtArgs>[]
      ClassSubjectTemplate: Prisma.$ClassSubjectTemplatePayload<ExtArgs>[]
      exam: Prisma.$ExamPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      subject_name: string
      branch_config: Prisma.JsonValue | null
      school_subjects_active: number
      is_compulsory: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["schoolSubject"]>
    composites: {}
  }

  type SchoolSubjectGetPayload<S extends boolean | null | undefined | SchoolSubjectDefaultArgs> = $Result.GetResult<Prisma.$SchoolSubjectPayload, S>

  type SchoolSubjectCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SchoolSubjectFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SchoolSubjectCountAggregateInputType | true
    }

  export interface SchoolSubjectDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SchoolSubject'], meta: { name: 'SchoolSubject' } }
    /**
     * Find zero or one SchoolSubject that matches the filter.
     * @param {SchoolSubjectFindUniqueArgs} args - Arguments to find a SchoolSubject
     * @example
     * // Get one SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SchoolSubjectFindUniqueArgs>(args: SelectSubset<T, SchoolSubjectFindUniqueArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SchoolSubject that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SchoolSubjectFindUniqueOrThrowArgs} args - Arguments to find a SchoolSubject
     * @example
     * // Get one SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SchoolSubjectFindUniqueOrThrowArgs>(args: SelectSubset<T, SchoolSubjectFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolSubject that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectFindFirstArgs} args - Arguments to find a SchoolSubject
     * @example
     * // Get one SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SchoolSubjectFindFirstArgs>(args?: SelectSubset<T, SchoolSubjectFindFirstArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolSubject that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectFindFirstOrThrowArgs} args - Arguments to find a SchoolSubject
     * @example
     * // Get one SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SchoolSubjectFindFirstOrThrowArgs>(args?: SelectSubset<T, SchoolSubjectFindFirstOrThrowArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SchoolSubjects that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SchoolSubjects
     * const schoolSubjects = await prisma.schoolSubject.findMany()
     * 
     * // Get first 10 SchoolSubjects
     * const schoolSubjects = await prisma.schoolSubject.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const schoolSubjectWithIdOnly = await prisma.schoolSubject.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SchoolSubjectFindManyArgs>(args?: SelectSubset<T, SchoolSubjectFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SchoolSubject.
     * @param {SchoolSubjectCreateArgs} args - Arguments to create a SchoolSubject.
     * @example
     * // Create one SchoolSubject
     * const SchoolSubject = await prisma.schoolSubject.create({
     *   data: {
     *     // ... data to create a SchoolSubject
     *   }
     * })
     * 
     */
    create<T extends SchoolSubjectCreateArgs>(args: SelectSubset<T, SchoolSubjectCreateArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SchoolSubjects.
     * @param {SchoolSubjectCreateManyArgs} args - Arguments to create many SchoolSubjects.
     * @example
     * // Create many SchoolSubjects
     * const schoolSubject = await prisma.schoolSubject.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SchoolSubjectCreateManyArgs>(args?: SelectSubset<T, SchoolSubjectCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SchoolSubject.
     * @param {SchoolSubjectDeleteArgs} args - Arguments to delete one SchoolSubject.
     * @example
     * // Delete one SchoolSubject
     * const SchoolSubject = await prisma.schoolSubject.delete({
     *   where: {
     *     // ... filter to delete one SchoolSubject
     *   }
     * })
     * 
     */
    delete<T extends SchoolSubjectDeleteArgs>(args: SelectSubset<T, SchoolSubjectDeleteArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SchoolSubject.
     * @param {SchoolSubjectUpdateArgs} args - Arguments to update one SchoolSubject.
     * @example
     * // Update one SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SchoolSubjectUpdateArgs>(args: SelectSubset<T, SchoolSubjectUpdateArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SchoolSubjects.
     * @param {SchoolSubjectDeleteManyArgs} args - Arguments to filter SchoolSubjects to delete.
     * @example
     * // Delete a few SchoolSubjects
     * const { count } = await prisma.schoolSubject.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SchoolSubjectDeleteManyArgs>(args?: SelectSubset<T, SchoolSubjectDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SchoolSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SchoolSubjects
     * const schoolSubject = await prisma.schoolSubject.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SchoolSubjectUpdateManyArgs>(args: SelectSubset<T, SchoolSubjectUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SchoolSubject.
     * @param {SchoolSubjectUpsertArgs} args - Arguments to update or create a SchoolSubject.
     * @example
     * // Update or create a SchoolSubject
     * const schoolSubject = await prisma.schoolSubject.upsert({
     *   create: {
     *     // ... data to create a SchoolSubject
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SchoolSubject we want to update
     *   }
     * })
     */
    upsert<T extends SchoolSubjectUpsertArgs>(args: SelectSubset<T, SchoolSubjectUpsertArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SchoolSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectCountArgs} args - Arguments to filter SchoolSubjects to count.
     * @example
     * // Count the number of SchoolSubjects
     * const count = await prisma.schoolSubject.count({
     *   where: {
     *     // ... the filter for the SchoolSubjects we want to count
     *   }
     * })
    **/
    count<T extends SchoolSubjectCountArgs>(
      args?: Subset<T, SchoolSubjectCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SchoolSubjectCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SchoolSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SchoolSubjectAggregateArgs>(args: Subset<T, SchoolSubjectAggregateArgs>): Prisma.PrismaPromise<GetSchoolSubjectAggregateType<T>>

    /**
     * Group by SchoolSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSubjectGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SchoolSubjectGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SchoolSubjectGroupByArgs['orderBy'] }
        : { orderBy?: SchoolSubjectGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SchoolSubjectGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSchoolSubjectGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SchoolSubject model
   */
  readonly fields: SchoolSubjectFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SchoolSubject.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SchoolSubjectClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    SessionClassSubject<T extends SchoolSubject$SessionClassSubjectArgs<ExtArgs> = {}>(args?: Subset<T, SchoolSubject$SessionClassSubjectArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    ClassSubjectTemplate<T extends SchoolSubject$ClassSubjectTemplateArgs<ExtArgs> = {}>(args?: Subset<T, SchoolSubject$ClassSubjectTemplateArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    exam<T extends SchoolSubject$examArgs<ExtArgs> = {}>(args?: Subset<T, SchoolSubject$examArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SchoolSubject model
   */
  interface SchoolSubjectFieldRefs {
    readonly id: FieldRef<"SchoolSubject", 'Int'>
    readonly school_id: FieldRef<"SchoolSubject", 'Int'>
    readonly subject_name: FieldRef<"SchoolSubject", 'String'>
    readonly branch_config: FieldRef<"SchoolSubject", 'Json'>
    readonly school_subjects_active: FieldRef<"SchoolSubject", 'Int'>
    readonly is_compulsory: FieldRef<"SchoolSubject", 'Int'>
    readonly created_by: FieldRef<"SchoolSubject", 'Int'>
    readonly created_at: FieldRef<"SchoolSubject", 'DateTime'>
    readonly updated_at: FieldRef<"SchoolSubject", 'DateTime'>
    readonly deleted_at: FieldRef<"SchoolSubject", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SchoolSubject findUnique
   */
  export type SchoolSubjectFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SchoolSubject to fetch.
     */
    where: SchoolSubjectWhereUniqueInput
  }

  /**
   * SchoolSubject findUniqueOrThrow
   */
  export type SchoolSubjectFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SchoolSubject to fetch.
     */
    where: SchoolSubjectWhereUniqueInput
  }

  /**
   * SchoolSubject findFirst
   */
  export type SchoolSubjectFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SchoolSubject to fetch.
     */
    where?: SchoolSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSubjects to fetch.
     */
    orderBy?: SchoolSubjectOrderByWithRelationInput | SchoolSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolSubjects.
     */
    cursor?: SchoolSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolSubjects.
     */
    distinct?: SchoolSubjectScalarFieldEnum | SchoolSubjectScalarFieldEnum[]
  }

  /**
   * SchoolSubject findFirstOrThrow
   */
  export type SchoolSubjectFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SchoolSubject to fetch.
     */
    where?: SchoolSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSubjects to fetch.
     */
    orderBy?: SchoolSubjectOrderByWithRelationInput | SchoolSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolSubjects.
     */
    cursor?: SchoolSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolSubjects.
     */
    distinct?: SchoolSubjectScalarFieldEnum | SchoolSubjectScalarFieldEnum[]
  }

  /**
   * SchoolSubject findMany
   */
  export type SchoolSubjectFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SchoolSubjects to fetch.
     */
    where?: SchoolSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSubjects to fetch.
     */
    orderBy?: SchoolSubjectOrderByWithRelationInput | SchoolSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SchoolSubjects.
     */
    cursor?: SchoolSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSubjects.
     */
    skip?: number
    distinct?: SchoolSubjectScalarFieldEnum | SchoolSubjectScalarFieldEnum[]
  }

  /**
   * SchoolSubject create
   */
  export type SchoolSubjectCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * The data needed to create a SchoolSubject.
     */
    data: XOR<SchoolSubjectCreateInput, SchoolSubjectUncheckedCreateInput>
  }

  /**
   * SchoolSubject createMany
   */
  export type SchoolSubjectCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SchoolSubjects.
     */
    data: SchoolSubjectCreateManyInput | SchoolSubjectCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SchoolSubject update
   */
  export type SchoolSubjectUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * The data needed to update a SchoolSubject.
     */
    data: XOR<SchoolSubjectUpdateInput, SchoolSubjectUncheckedUpdateInput>
    /**
     * Choose, which SchoolSubject to update.
     */
    where: SchoolSubjectWhereUniqueInput
  }

  /**
   * SchoolSubject updateMany
   */
  export type SchoolSubjectUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SchoolSubjects.
     */
    data: XOR<SchoolSubjectUpdateManyMutationInput, SchoolSubjectUncheckedUpdateManyInput>
    /**
     * Filter which SchoolSubjects to update
     */
    where?: SchoolSubjectWhereInput
    /**
     * Limit how many SchoolSubjects to update.
     */
    limit?: number
  }

  /**
   * SchoolSubject upsert
   */
  export type SchoolSubjectUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * The filter to search for the SchoolSubject to update in case it exists.
     */
    where: SchoolSubjectWhereUniqueInput
    /**
     * In case the SchoolSubject found by the `where` argument doesn't exist, create a new SchoolSubject with this data.
     */
    create: XOR<SchoolSubjectCreateInput, SchoolSubjectUncheckedCreateInput>
    /**
     * In case the SchoolSubject was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SchoolSubjectUpdateInput, SchoolSubjectUncheckedUpdateInput>
  }

  /**
   * SchoolSubject delete
   */
  export type SchoolSubjectDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    /**
     * Filter which SchoolSubject to delete.
     */
    where: SchoolSubjectWhereUniqueInput
  }

  /**
   * SchoolSubject deleteMany
   */
  export type SchoolSubjectDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolSubjects to delete
     */
    where?: SchoolSubjectWhereInput
    /**
     * Limit how many SchoolSubjects to delete.
     */
    limit?: number
  }

  /**
   * SchoolSubject.SessionClassSubject
   */
  export type SchoolSubject$SessionClassSubjectArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    where?: SessionClassSubjectWhereInput
    orderBy?: SessionClassSubjectOrderByWithRelationInput | SessionClassSubjectOrderByWithRelationInput[]
    cursor?: SessionClassSubjectWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SessionClassSubjectScalarFieldEnum | SessionClassSubjectScalarFieldEnum[]
  }

  /**
   * SchoolSubject.ClassSubjectTemplate
   */
  export type SchoolSubject$ClassSubjectTemplateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    where?: ClassSubjectTemplateWhereInput
    orderBy?: ClassSubjectTemplateOrderByWithRelationInput | ClassSubjectTemplateOrderByWithRelationInput[]
    cursor?: ClassSubjectTemplateWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ClassSubjectTemplateScalarFieldEnum | ClassSubjectTemplateScalarFieldEnum[]
  }

  /**
   * SchoolSubject.exam
   */
  export type SchoolSubject$examArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    cursor?: ExamWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * SchoolSubject without action
   */
  export type SchoolSubjectDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
  }


  /**
   * Model BranchSession
   */

  export type AggregateBranchSession = {
    _count: BranchSessionCountAggregateOutputType | null
    _avg: BranchSessionAvgAggregateOutputType | null
    _sum: BranchSessionSumAggregateOutputType | null
    _min: BranchSessionMinAggregateOutputType | null
    _max: BranchSessionMaxAggregateOutputType | null
  }

  export type BranchSessionAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    no_of_terms: number | null
    created_by: number | null
  }

  export type BranchSessionSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    no_of_terms: number | null
    created_by: number | null
  }

  export type BranchSessionMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_name: string | null
    no_of_terms: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchSessionMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_name: string | null
    no_of_terms: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type BranchSessionCountAggregateOutputType = {
    id: number
    branch_id: number
    session_name: number
    no_of_terms: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type BranchSessionAvgAggregateInputType = {
    id?: true
    branch_id?: true
    no_of_terms?: true
    created_by?: true
  }

  export type BranchSessionSumAggregateInputType = {
    id?: true
    branch_id?: true
    no_of_terms?: true
    created_by?: true
  }

  export type BranchSessionMinAggregateInputType = {
    id?: true
    branch_id?: true
    session_name?: true
    no_of_terms?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchSessionMaxAggregateInputType = {
    id?: true
    branch_id?: true
    session_name?: true
    no_of_terms?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type BranchSessionCountAggregateInputType = {
    id?: true
    branch_id?: true
    session_name?: true
    no_of_terms?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type BranchSessionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which BranchSession to aggregate.
     */
    where?: BranchSessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchSessions to fetch.
     */
    orderBy?: BranchSessionOrderByWithRelationInput | BranchSessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: BranchSessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchSessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchSessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned BranchSessions
    **/
    _count?: true | BranchSessionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: BranchSessionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: BranchSessionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: BranchSessionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: BranchSessionMaxAggregateInputType
  }

  export type GetBranchSessionAggregateType<T extends BranchSessionAggregateArgs> = {
        [P in keyof T & keyof AggregateBranchSession]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateBranchSession[P]>
      : GetScalarType<T[P], AggregateBranchSession[P]>
  }




  export type BranchSessionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: BranchSessionWhereInput
    orderBy?: BranchSessionOrderByWithAggregationInput | BranchSessionOrderByWithAggregationInput[]
    by: BranchSessionScalarFieldEnum[] | BranchSessionScalarFieldEnum
    having?: BranchSessionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: BranchSessionCountAggregateInputType | true
    _avg?: BranchSessionAvgAggregateInputType
    _sum?: BranchSessionSumAggregateInputType
    _min?: BranchSessionMinAggregateInputType
    _max?: BranchSessionMaxAggregateInputType
  }

  export type BranchSessionGroupByOutputType = {
    id: number
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: BranchSessionCountAggregateOutputType | null
    _avg: BranchSessionAvgAggregateOutputType | null
    _sum: BranchSessionSumAggregateOutputType | null
    _min: BranchSessionMinAggregateOutputType | null
    _max: BranchSessionMaxAggregateOutputType | null
  }

  type GetBranchSessionGroupByPayload<T extends BranchSessionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<BranchSessionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof BranchSessionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], BranchSessionGroupByOutputType[P]>
            : GetScalarType<T[P], BranchSessionGroupByOutputType[P]>
        }
      >
    >


  export type BranchSessionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    session_name?: boolean
    no_of_terms?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    SessionTerm?: boolean | BranchSession$SessionTermArgs<ExtArgs>
    _count?: boolean | BranchSessionCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["branchSession"]>



  export type BranchSessionSelectScalar = {
    id?: boolean
    branch_id?: boolean
    session_name?: boolean
    no_of_terms?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type BranchSessionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "session_name" | "no_of_terms" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["branchSession"]>
  export type BranchSessionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionTerm?: boolean | BranchSession$SessionTermArgs<ExtArgs>
    _count?: boolean | BranchSessionCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $BranchSessionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "BranchSession"
    objects: {
      SessionTerm: Prisma.$SessionTermPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      session_name: string
      no_of_terms: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["branchSession"]>
    composites: {}
  }

  type BranchSessionGetPayload<S extends boolean | null | undefined | BranchSessionDefaultArgs> = $Result.GetResult<Prisma.$BranchSessionPayload, S>

  type BranchSessionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<BranchSessionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: BranchSessionCountAggregateInputType | true
    }

  export interface BranchSessionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['BranchSession'], meta: { name: 'BranchSession' } }
    /**
     * Find zero or one BranchSession that matches the filter.
     * @param {BranchSessionFindUniqueArgs} args - Arguments to find a BranchSession
     * @example
     * // Get one BranchSession
     * const branchSession = await prisma.branchSession.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends BranchSessionFindUniqueArgs>(args: SelectSubset<T, BranchSessionFindUniqueArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one BranchSession that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {BranchSessionFindUniqueOrThrowArgs} args - Arguments to find a BranchSession
     * @example
     * // Get one BranchSession
     * const branchSession = await prisma.branchSession.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends BranchSessionFindUniqueOrThrowArgs>(args: SelectSubset<T, BranchSessionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first BranchSession that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionFindFirstArgs} args - Arguments to find a BranchSession
     * @example
     * // Get one BranchSession
     * const branchSession = await prisma.branchSession.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends BranchSessionFindFirstArgs>(args?: SelectSubset<T, BranchSessionFindFirstArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first BranchSession that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionFindFirstOrThrowArgs} args - Arguments to find a BranchSession
     * @example
     * // Get one BranchSession
     * const branchSession = await prisma.branchSession.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends BranchSessionFindFirstOrThrowArgs>(args?: SelectSubset<T, BranchSessionFindFirstOrThrowArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more BranchSessions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all BranchSessions
     * const branchSessions = await prisma.branchSession.findMany()
     * 
     * // Get first 10 BranchSessions
     * const branchSessions = await prisma.branchSession.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const branchSessionWithIdOnly = await prisma.branchSession.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends BranchSessionFindManyArgs>(args?: SelectSubset<T, BranchSessionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a BranchSession.
     * @param {BranchSessionCreateArgs} args - Arguments to create a BranchSession.
     * @example
     * // Create one BranchSession
     * const BranchSession = await prisma.branchSession.create({
     *   data: {
     *     // ... data to create a BranchSession
     *   }
     * })
     * 
     */
    create<T extends BranchSessionCreateArgs>(args: SelectSubset<T, BranchSessionCreateArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many BranchSessions.
     * @param {BranchSessionCreateManyArgs} args - Arguments to create many BranchSessions.
     * @example
     * // Create many BranchSessions
     * const branchSession = await prisma.branchSession.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends BranchSessionCreateManyArgs>(args?: SelectSubset<T, BranchSessionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a BranchSession.
     * @param {BranchSessionDeleteArgs} args - Arguments to delete one BranchSession.
     * @example
     * // Delete one BranchSession
     * const BranchSession = await prisma.branchSession.delete({
     *   where: {
     *     // ... filter to delete one BranchSession
     *   }
     * })
     * 
     */
    delete<T extends BranchSessionDeleteArgs>(args: SelectSubset<T, BranchSessionDeleteArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one BranchSession.
     * @param {BranchSessionUpdateArgs} args - Arguments to update one BranchSession.
     * @example
     * // Update one BranchSession
     * const branchSession = await prisma.branchSession.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends BranchSessionUpdateArgs>(args: SelectSubset<T, BranchSessionUpdateArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more BranchSessions.
     * @param {BranchSessionDeleteManyArgs} args - Arguments to filter BranchSessions to delete.
     * @example
     * // Delete a few BranchSessions
     * const { count } = await prisma.branchSession.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends BranchSessionDeleteManyArgs>(args?: SelectSubset<T, BranchSessionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more BranchSessions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many BranchSessions
     * const branchSession = await prisma.branchSession.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends BranchSessionUpdateManyArgs>(args: SelectSubset<T, BranchSessionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one BranchSession.
     * @param {BranchSessionUpsertArgs} args - Arguments to update or create a BranchSession.
     * @example
     * // Update or create a BranchSession
     * const branchSession = await prisma.branchSession.upsert({
     *   create: {
     *     // ... data to create a BranchSession
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the BranchSession we want to update
     *   }
     * })
     */
    upsert<T extends BranchSessionUpsertArgs>(args: SelectSubset<T, BranchSessionUpsertArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of BranchSessions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionCountArgs} args - Arguments to filter BranchSessions to count.
     * @example
     * // Count the number of BranchSessions
     * const count = await prisma.branchSession.count({
     *   where: {
     *     // ... the filter for the BranchSessions we want to count
     *   }
     * })
    **/
    count<T extends BranchSessionCountArgs>(
      args?: Subset<T, BranchSessionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], BranchSessionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a BranchSession.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends BranchSessionAggregateArgs>(args: Subset<T, BranchSessionAggregateArgs>): Prisma.PrismaPromise<GetBranchSessionAggregateType<T>>

    /**
     * Group by BranchSession.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {BranchSessionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends BranchSessionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: BranchSessionGroupByArgs['orderBy'] }
        : { orderBy?: BranchSessionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, BranchSessionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetBranchSessionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the BranchSession model
   */
  readonly fields: BranchSessionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for BranchSession.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__BranchSessionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    SessionTerm<T extends BranchSession$SessionTermArgs<ExtArgs> = {}>(args?: Subset<T, BranchSession$SessionTermArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the BranchSession model
   */
  interface BranchSessionFieldRefs {
    readonly id: FieldRef<"BranchSession", 'Int'>
    readonly branch_id: FieldRef<"BranchSession", 'Int'>
    readonly session_name: FieldRef<"BranchSession", 'String'>
    readonly no_of_terms: FieldRef<"BranchSession", 'Int'>
    readonly created_by: FieldRef<"BranchSession", 'Int'>
    readonly created_at: FieldRef<"BranchSession", 'DateTime'>
    readonly updated_at: FieldRef<"BranchSession", 'DateTime'>
    readonly deleted_at: FieldRef<"BranchSession", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * BranchSession findUnique
   */
  export type BranchSessionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter, which BranchSession to fetch.
     */
    where: BranchSessionWhereUniqueInput
  }

  /**
   * BranchSession findUniqueOrThrow
   */
  export type BranchSessionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter, which BranchSession to fetch.
     */
    where: BranchSessionWhereUniqueInput
  }

  /**
   * BranchSession findFirst
   */
  export type BranchSessionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter, which BranchSession to fetch.
     */
    where?: BranchSessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchSessions to fetch.
     */
    orderBy?: BranchSessionOrderByWithRelationInput | BranchSessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for BranchSessions.
     */
    cursor?: BranchSessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchSessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchSessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of BranchSessions.
     */
    distinct?: BranchSessionScalarFieldEnum | BranchSessionScalarFieldEnum[]
  }

  /**
   * BranchSession findFirstOrThrow
   */
  export type BranchSessionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter, which BranchSession to fetch.
     */
    where?: BranchSessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchSessions to fetch.
     */
    orderBy?: BranchSessionOrderByWithRelationInput | BranchSessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for BranchSessions.
     */
    cursor?: BranchSessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchSessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchSessions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of BranchSessions.
     */
    distinct?: BranchSessionScalarFieldEnum | BranchSessionScalarFieldEnum[]
  }

  /**
   * BranchSession findMany
   */
  export type BranchSessionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter, which BranchSessions to fetch.
     */
    where?: BranchSessionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of BranchSessions to fetch.
     */
    orderBy?: BranchSessionOrderByWithRelationInput | BranchSessionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing BranchSessions.
     */
    cursor?: BranchSessionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` BranchSessions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` BranchSessions.
     */
    skip?: number
    distinct?: BranchSessionScalarFieldEnum | BranchSessionScalarFieldEnum[]
  }

  /**
   * BranchSession create
   */
  export type BranchSessionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * The data needed to create a BranchSession.
     */
    data: XOR<BranchSessionCreateInput, BranchSessionUncheckedCreateInput>
  }

  /**
   * BranchSession createMany
   */
  export type BranchSessionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many BranchSessions.
     */
    data: BranchSessionCreateManyInput | BranchSessionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * BranchSession update
   */
  export type BranchSessionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * The data needed to update a BranchSession.
     */
    data: XOR<BranchSessionUpdateInput, BranchSessionUncheckedUpdateInput>
    /**
     * Choose, which BranchSession to update.
     */
    where: BranchSessionWhereUniqueInput
  }

  /**
   * BranchSession updateMany
   */
  export type BranchSessionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update BranchSessions.
     */
    data: XOR<BranchSessionUpdateManyMutationInput, BranchSessionUncheckedUpdateManyInput>
    /**
     * Filter which BranchSessions to update
     */
    where?: BranchSessionWhereInput
    /**
     * Limit how many BranchSessions to update.
     */
    limit?: number
  }

  /**
   * BranchSession upsert
   */
  export type BranchSessionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * The filter to search for the BranchSession to update in case it exists.
     */
    where: BranchSessionWhereUniqueInput
    /**
     * In case the BranchSession found by the `where` argument doesn't exist, create a new BranchSession with this data.
     */
    create: XOR<BranchSessionCreateInput, BranchSessionUncheckedCreateInput>
    /**
     * In case the BranchSession was found with the provided `where` argument, update it with this data.
     */
    update: XOR<BranchSessionUpdateInput, BranchSessionUncheckedUpdateInput>
  }

  /**
   * BranchSession delete
   */
  export type BranchSessionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    /**
     * Filter which BranchSession to delete.
     */
    where: BranchSessionWhereUniqueInput
  }

  /**
   * BranchSession deleteMany
   */
  export type BranchSessionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which BranchSessions to delete
     */
    where?: BranchSessionWhereInput
    /**
     * Limit how many BranchSessions to delete.
     */
    limit?: number
  }

  /**
   * BranchSession.SessionTerm
   */
  export type BranchSession$SessionTermArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    where?: SessionTermWhereInput
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    cursor?: SessionTermWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SessionTermScalarFieldEnum | SessionTermScalarFieldEnum[]
  }

  /**
   * BranchSession without action
   */
  export type BranchSessionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
  }


  /**
   * Model SchoolSetting
   */

  export type AggregateSchoolSetting = {
    _count: SchoolSettingCountAggregateOutputType | null
    _avg: SchoolSettingAvgAggregateOutputType | null
    _sum: SchoolSettingSumAggregateOutputType | null
    _min: SchoolSettingMinAggregateOutputType | null
    _max: SchoolSettingMaxAggregateOutputType | null
  }

  export type SchoolSettingAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    isolate_branch_library: number | null
    isolate_branch_multimedia: number | null
    id_card_amount: number | null
    library_card_amount: number | null
    result_serial_ammount: number | null
    id_card_no_of_years: number | null
    library_card_no_of_years: number | null
    created_by: number | null
  }

  export type SchoolSettingSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    isolate_branch_library: number | null
    isolate_branch_multimedia: number | null
    id_card_amount: number | null
    library_card_amount: number | null
    result_serial_ammount: number | null
    id_card_no_of_years: number | null
    library_card_no_of_years: number | null
    created_by: number | null
  }

  export type SchoolSettingMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    isolate_branch_library: number | null
    isolate_branch_multimedia: number | null
    id_card_amount: number | null
    library_card_amount: number | null
    result_serial_ammount: number | null
    id_card_no_of_years: number | null
    library_card_no_of_years: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolSettingMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    isolate_branch_library: number | null
    isolate_branch_multimedia: number | null
    id_card_amount: number | null
    library_card_amount: number | null
    result_serial_ammount: number | null
    id_card_no_of_years: number | null
    library_card_no_of_years: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolSettingCountAggregateOutputType = {
    id: number
    school_id: number
    branch_id: number
    isolate_branch_library: number
    isolate_branch_multimedia: number
    id_card_amount: number
    library_card_amount: number
    result_serial_ammount: number
    id_card_no_of_years: number
    library_card_no_of_years: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SchoolSettingAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    isolate_branch_library?: true
    isolate_branch_multimedia?: true
    id_card_amount?: true
    library_card_amount?: true
    result_serial_ammount?: true
    id_card_no_of_years?: true
    library_card_no_of_years?: true
    created_by?: true
  }

  export type SchoolSettingSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    isolate_branch_library?: true
    isolate_branch_multimedia?: true
    id_card_amount?: true
    library_card_amount?: true
    result_serial_ammount?: true
    id_card_no_of_years?: true
    library_card_no_of_years?: true
    created_by?: true
  }

  export type SchoolSettingMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    isolate_branch_library?: true
    isolate_branch_multimedia?: true
    id_card_amount?: true
    library_card_amount?: true
    result_serial_ammount?: true
    id_card_no_of_years?: true
    library_card_no_of_years?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolSettingMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    isolate_branch_library?: true
    isolate_branch_multimedia?: true
    id_card_amount?: true
    library_card_amount?: true
    result_serial_ammount?: true
    id_card_no_of_years?: true
    library_card_no_of_years?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolSettingCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    isolate_branch_library?: true
    isolate_branch_multimedia?: true
    id_card_amount?: true
    library_card_amount?: true
    result_serial_ammount?: true
    id_card_no_of_years?: true
    library_card_no_of_years?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SchoolSettingAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolSetting to aggregate.
     */
    where?: SchoolSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSettings to fetch.
     */
    orderBy?: SchoolSettingOrderByWithRelationInput | SchoolSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SchoolSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SchoolSettings
    **/
    _count?: true | SchoolSettingCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SchoolSettingAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SchoolSettingSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SchoolSettingMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SchoolSettingMaxAggregateInputType
  }

  export type GetSchoolSettingAggregateType<T extends SchoolSettingAggregateArgs> = {
        [P in keyof T & keyof AggregateSchoolSetting]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSchoolSetting[P]>
      : GetScalarType<T[P], AggregateSchoolSetting[P]>
  }




  export type SchoolSettingGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SchoolSettingWhereInput
    orderBy?: SchoolSettingOrderByWithAggregationInput | SchoolSettingOrderByWithAggregationInput[]
    by: SchoolSettingScalarFieldEnum[] | SchoolSettingScalarFieldEnum
    having?: SchoolSettingScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SchoolSettingCountAggregateInputType | true
    _avg?: SchoolSettingAvgAggregateInputType
    _sum?: SchoolSettingSumAggregateInputType
    _min?: SchoolSettingMinAggregateInputType
    _max?: SchoolSettingMaxAggregateInputType
  }

  export type SchoolSettingGroupByOutputType = {
    id: number
    school_id: number
    branch_id: number | null
    isolate_branch_library: number
    isolate_branch_multimedia: number
    id_card_amount: number
    library_card_amount: number
    result_serial_ammount: number
    id_card_no_of_years: number | null
    library_card_no_of_years: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SchoolSettingCountAggregateOutputType | null
    _avg: SchoolSettingAvgAggregateOutputType | null
    _sum: SchoolSettingSumAggregateOutputType | null
    _min: SchoolSettingMinAggregateOutputType | null
    _max: SchoolSettingMaxAggregateOutputType | null
  }

  type GetSchoolSettingGroupByPayload<T extends SchoolSettingGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SchoolSettingGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SchoolSettingGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SchoolSettingGroupByOutputType[P]>
            : GetScalarType<T[P], SchoolSettingGroupByOutputType[P]>
        }
      >
    >


  export type SchoolSettingSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    isolate_branch_library?: boolean
    isolate_branch_multimedia?: boolean
    id_card_amount?: boolean
    library_card_amount?: boolean
    result_serial_ammount?: boolean
    id_card_no_of_years?: boolean
    library_card_no_of_years?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["schoolSetting"]>



  export type SchoolSettingSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    isolate_branch_library?: boolean
    isolate_branch_multimedia?: boolean
    id_card_amount?: boolean
    library_card_amount?: boolean
    result_serial_ammount?: boolean
    id_card_no_of_years?: boolean
    library_card_no_of_years?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SchoolSettingOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_id" | "isolate_branch_library" | "isolate_branch_multimedia" | "id_card_amount" | "library_card_amount" | "result_serial_ammount" | "id_card_no_of_years" | "library_card_no_of_years" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["schoolSetting"]>

  export type $SchoolSettingPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SchoolSetting"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      branch_id: number | null
      isolate_branch_library: number
      isolate_branch_multimedia: number
      id_card_amount: number
      library_card_amount: number
      result_serial_ammount: number
      id_card_no_of_years: number | null
      library_card_no_of_years: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["schoolSetting"]>
    composites: {}
  }

  type SchoolSettingGetPayload<S extends boolean | null | undefined | SchoolSettingDefaultArgs> = $Result.GetResult<Prisma.$SchoolSettingPayload, S>

  type SchoolSettingCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SchoolSettingFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SchoolSettingCountAggregateInputType | true
    }

  export interface SchoolSettingDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SchoolSetting'], meta: { name: 'SchoolSetting' } }
    /**
     * Find zero or one SchoolSetting that matches the filter.
     * @param {SchoolSettingFindUniqueArgs} args - Arguments to find a SchoolSetting
     * @example
     * // Get one SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SchoolSettingFindUniqueArgs>(args: SelectSubset<T, SchoolSettingFindUniqueArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SchoolSetting that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SchoolSettingFindUniqueOrThrowArgs} args - Arguments to find a SchoolSetting
     * @example
     * // Get one SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SchoolSettingFindUniqueOrThrowArgs>(args: SelectSubset<T, SchoolSettingFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolSetting that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingFindFirstArgs} args - Arguments to find a SchoolSetting
     * @example
     * // Get one SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SchoolSettingFindFirstArgs>(args?: SelectSubset<T, SchoolSettingFindFirstArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolSetting that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingFindFirstOrThrowArgs} args - Arguments to find a SchoolSetting
     * @example
     * // Get one SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SchoolSettingFindFirstOrThrowArgs>(args?: SelectSubset<T, SchoolSettingFindFirstOrThrowArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SchoolSettings that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SchoolSettings
     * const schoolSettings = await prisma.schoolSetting.findMany()
     * 
     * // Get first 10 SchoolSettings
     * const schoolSettings = await prisma.schoolSetting.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const schoolSettingWithIdOnly = await prisma.schoolSetting.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SchoolSettingFindManyArgs>(args?: SelectSubset<T, SchoolSettingFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SchoolSetting.
     * @param {SchoolSettingCreateArgs} args - Arguments to create a SchoolSetting.
     * @example
     * // Create one SchoolSetting
     * const SchoolSetting = await prisma.schoolSetting.create({
     *   data: {
     *     // ... data to create a SchoolSetting
     *   }
     * })
     * 
     */
    create<T extends SchoolSettingCreateArgs>(args: SelectSubset<T, SchoolSettingCreateArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SchoolSettings.
     * @param {SchoolSettingCreateManyArgs} args - Arguments to create many SchoolSettings.
     * @example
     * // Create many SchoolSettings
     * const schoolSetting = await prisma.schoolSetting.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SchoolSettingCreateManyArgs>(args?: SelectSubset<T, SchoolSettingCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SchoolSetting.
     * @param {SchoolSettingDeleteArgs} args - Arguments to delete one SchoolSetting.
     * @example
     * // Delete one SchoolSetting
     * const SchoolSetting = await prisma.schoolSetting.delete({
     *   where: {
     *     // ... filter to delete one SchoolSetting
     *   }
     * })
     * 
     */
    delete<T extends SchoolSettingDeleteArgs>(args: SelectSubset<T, SchoolSettingDeleteArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SchoolSetting.
     * @param {SchoolSettingUpdateArgs} args - Arguments to update one SchoolSetting.
     * @example
     * // Update one SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SchoolSettingUpdateArgs>(args: SelectSubset<T, SchoolSettingUpdateArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SchoolSettings.
     * @param {SchoolSettingDeleteManyArgs} args - Arguments to filter SchoolSettings to delete.
     * @example
     * // Delete a few SchoolSettings
     * const { count } = await prisma.schoolSetting.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SchoolSettingDeleteManyArgs>(args?: SelectSubset<T, SchoolSettingDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SchoolSettings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SchoolSettings
     * const schoolSetting = await prisma.schoolSetting.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SchoolSettingUpdateManyArgs>(args: SelectSubset<T, SchoolSettingUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SchoolSetting.
     * @param {SchoolSettingUpsertArgs} args - Arguments to update or create a SchoolSetting.
     * @example
     * // Update or create a SchoolSetting
     * const schoolSetting = await prisma.schoolSetting.upsert({
     *   create: {
     *     // ... data to create a SchoolSetting
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SchoolSetting we want to update
     *   }
     * })
     */
    upsert<T extends SchoolSettingUpsertArgs>(args: SelectSubset<T, SchoolSettingUpsertArgs<ExtArgs>>): Prisma__SchoolSettingClient<$Result.GetResult<Prisma.$SchoolSettingPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SchoolSettings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingCountArgs} args - Arguments to filter SchoolSettings to count.
     * @example
     * // Count the number of SchoolSettings
     * const count = await prisma.schoolSetting.count({
     *   where: {
     *     // ... the filter for the SchoolSettings we want to count
     *   }
     * })
    **/
    count<T extends SchoolSettingCountArgs>(
      args?: Subset<T, SchoolSettingCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SchoolSettingCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SchoolSetting.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SchoolSettingAggregateArgs>(args: Subset<T, SchoolSettingAggregateArgs>): Prisma.PrismaPromise<GetSchoolSettingAggregateType<T>>

    /**
     * Group by SchoolSetting.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolSettingGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SchoolSettingGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SchoolSettingGroupByArgs['orderBy'] }
        : { orderBy?: SchoolSettingGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SchoolSettingGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSchoolSettingGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SchoolSetting model
   */
  readonly fields: SchoolSettingFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SchoolSetting.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SchoolSettingClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SchoolSetting model
   */
  interface SchoolSettingFieldRefs {
    readonly id: FieldRef<"SchoolSetting", 'Int'>
    readonly school_id: FieldRef<"SchoolSetting", 'Int'>
    readonly branch_id: FieldRef<"SchoolSetting", 'Int'>
    readonly isolate_branch_library: FieldRef<"SchoolSetting", 'Int'>
    readonly isolate_branch_multimedia: FieldRef<"SchoolSetting", 'Int'>
    readonly id_card_amount: FieldRef<"SchoolSetting", 'Int'>
    readonly library_card_amount: FieldRef<"SchoolSetting", 'Int'>
    readonly result_serial_ammount: FieldRef<"SchoolSetting", 'Int'>
    readonly id_card_no_of_years: FieldRef<"SchoolSetting", 'Int'>
    readonly library_card_no_of_years: FieldRef<"SchoolSetting", 'Int'>
    readonly created_by: FieldRef<"SchoolSetting", 'Int'>
    readonly created_at: FieldRef<"SchoolSetting", 'DateTime'>
    readonly updated_at: FieldRef<"SchoolSetting", 'DateTime'>
    readonly deleted_at: FieldRef<"SchoolSetting", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SchoolSetting findUnique
   */
  export type SchoolSettingFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter, which SchoolSetting to fetch.
     */
    where: SchoolSettingWhereUniqueInput
  }

  /**
   * SchoolSetting findUniqueOrThrow
   */
  export type SchoolSettingFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter, which SchoolSetting to fetch.
     */
    where: SchoolSettingWhereUniqueInput
  }

  /**
   * SchoolSetting findFirst
   */
  export type SchoolSettingFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter, which SchoolSetting to fetch.
     */
    where?: SchoolSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSettings to fetch.
     */
    orderBy?: SchoolSettingOrderByWithRelationInput | SchoolSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolSettings.
     */
    cursor?: SchoolSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolSettings.
     */
    distinct?: SchoolSettingScalarFieldEnum | SchoolSettingScalarFieldEnum[]
  }

  /**
   * SchoolSetting findFirstOrThrow
   */
  export type SchoolSettingFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter, which SchoolSetting to fetch.
     */
    where?: SchoolSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSettings to fetch.
     */
    orderBy?: SchoolSettingOrderByWithRelationInput | SchoolSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolSettings.
     */
    cursor?: SchoolSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolSettings.
     */
    distinct?: SchoolSettingScalarFieldEnum | SchoolSettingScalarFieldEnum[]
  }

  /**
   * SchoolSetting findMany
   */
  export type SchoolSettingFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter, which SchoolSettings to fetch.
     */
    where?: SchoolSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolSettings to fetch.
     */
    orderBy?: SchoolSettingOrderByWithRelationInput | SchoolSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SchoolSettings.
     */
    cursor?: SchoolSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolSettings.
     */
    skip?: number
    distinct?: SchoolSettingScalarFieldEnum | SchoolSettingScalarFieldEnum[]
  }

  /**
   * SchoolSetting create
   */
  export type SchoolSettingCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * The data needed to create a SchoolSetting.
     */
    data: XOR<SchoolSettingCreateInput, SchoolSettingUncheckedCreateInput>
  }

  /**
   * SchoolSetting createMany
   */
  export type SchoolSettingCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SchoolSettings.
     */
    data: SchoolSettingCreateManyInput | SchoolSettingCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SchoolSetting update
   */
  export type SchoolSettingUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * The data needed to update a SchoolSetting.
     */
    data: XOR<SchoolSettingUpdateInput, SchoolSettingUncheckedUpdateInput>
    /**
     * Choose, which SchoolSetting to update.
     */
    where: SchoolSettingWhereUniqueInput
  }

  /**
   * SchoolSetting updateMany
   */
  export type SchoolSettingUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SchoolSettings.
     */
    data: XOR<SchoolSettingUpdateManyMutationInput, SchoolSettingUncheckedUpdateManyInput>
    /**
     * Filter which SchoolSettings to update
     */
    where?: SchoolSettingWhereInput
    /**
     * Limit how many SchoolSettings to update.
     */
    limit?: number
  }

  /**
   * SchoolSetting upsert
   */
  export type SchoolSettingUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * The filter to search for the SchoolSetting to update in case it exists.
     */
    where: SchoolSettingWhereUniqueInput
    /**
     * In case the SchoolSetting found by the `where` argument doesn't exist, create a new SchoolSetting with this data.
     */
    create: XOR<SchoolSettingCreateInput, SchoolSettingUncheckedCreateInput>
    /**
     * In case the SchoolSetting was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SchoolSettingUpdateInput, SchoolSettingUncheckedUpdateInput>
  }

  /**
   * SchoolSetting delete
   */
  export type SchoolSettingDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
    /**
     * Filter which SchoolSetting to delete.
     */
    where: SchoolSettingWhereUniqueInput
  }

  /**
   * SchoolSetting deleteMany
   */
  export type SchoolSettingDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolSettings to delete
     */
    where?: SchoolSettingWhereInput
    /**
     * Limit how many SchoolSettings to delete.
     */
    limit?: number
  }

  /**
   * SchoolSetting without action
   */
  export type SchoolSettingDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSetting
     */
    select?: SchoolSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSetting
     */
    omit?: SchoolSettingOmit<ExtArgs> | null
  }


  /**
   * Model MultimediaGroup
   */

  export type AggregateMultimediaGroup = {
    _count: MultimediaGroupCountAggregateOutputType | null
    _avg: MultimediaGroupAvgAggregateOutputType | null
    _sum: MultimediaGroupSumAggregateOutputType | null
    _min: MultimediaGroupMinAggregateOutputType | null
    _max: MultimediaGroupMaxAggregateOutputType | null
  }

  export type MultimediaGroupAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_group_active: number | null
    created_by: number | null
  }

  export type MultimediaGroupSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_group_active: number | null
    created_by: number | null
  }

  export type MultimediaGroupMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_group_name: string | null
    multimedia_group_desc: string | null
    multimedia_group_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type MultimediaGroupMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_group_name: string | null
    multimedia_group_desc: string | null
    multimedia_group_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type MultimediaGroupCountAggregateOutputType = {
    id: number
    school_id: number
    branch_id: number
    multimedia_group_name: number
    multimedia_group_desc: number
    multimedia_group_active: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type MultimediaGroupAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_group_active?: true
    created_by?: true
  }

  export type MultimediaGroupSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_group_active?: true
    created_by?: true
  }

  export type MultimediaGroupMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_group_name?: true
    multimedia_group_desc?: true
    multimedia_group_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type MultimediaGroupMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_group_name?: true
    multimedia_group_desc?: true
    multimedia_group_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type MultimediaGroupCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_group_name?: true
    multimedia_group_desc?: true
    multimedia_group_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type MultimediaGroupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which MultimediaGroup to aggregate.
     */
    where?: MultimediaGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MultimediaGroups to fetch.
     */
    orderBy?: MultimediaGroupOrderByWithRelationInput | MultimediaGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: MultimediaGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MultimediaGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MultimediaGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned MultimediaGroups
    **/
    _count?: true | MultimediaGroupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: MultimediaGroupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: MultimediaGroupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: MultimediaGroupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: MultimediaGroupMaxAggregateInputType
  }

  export type GetMultimediaGroupAggregateType<T extends MultimediaGroupAggregateArgs> = {
        [P in keyof T & keyof AggregateMultimediaGroup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateMultimediaGroup[P]>
      : GetScalarType<T[P], AggregateMultimediaGroup[P]>
  }




  export type MultimediaGroupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: MultimediaGroupWhereInput
    orderBy?: MultimediaGroupOrderByWithAggregationInput | MultimediaGroupOrderByWithAggregationInput[]
    by: MultimediaGroupScalarFieldEnum[] | MultimediaGroupScalarFieldEnum
    having?: MultimediaGroupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: MultimediaGroupCountAggregateInputType | true
    _avg?: MultimediaGroupAvgAggregateInputType
    _sum?: MultimediaGroupSumAggregateInputType
    _min?: MultimediaGroupMinAggregateInputType
    _max?: MultimediaGroupMaxAggregateInputType
  }

  export type MultimediaGroupGroupByOutputType = {
    id: number
    school_id: number
    branch_id: number | null
    multimedia_group_name: string
    multimedia_group_desc: string | null
    multimedia_group_active: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: MultimediaGroupCountAggregateOutputType | null
    _avg: MultimediaGroupAvgAggregateOutputType | null
    _sum: MultimediaGroupSumAggregateOutputType | null
    _min: MultimediaGroupMinAggregateOutputType | null
    _max: MultimediaGroupMaxAggregateOutputType | null
  }

  type GetMultimediaGroupGroupByPayload<T extends MultimediaGroupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<MultimediaGroupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof MultimediaGroupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], MultimediaGroupGroupByOutputType[P]>
            : GetScalarType<T[P], MultimediaGroupGroupByOutputType[P]>
        }
      >
    >


  export type MultimediaGroupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    multimedia_group_name?: boolean
    multimedia_group_desc?: boolean
    multimedia_group_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["multimediaGroup"]>



  export type MultimediaGroupSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    multimedia_group_name?: boolean
    multimedia_group_desc?: boolean
    multimedia_group_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type MultimediaGroupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_id" | "multimedia_group_name" | "multimedia_group_desc" | "multimedia_group_active" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["multimediaGroup"]>

  export type $MultimediaGroupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "MultimediaGroup"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      branch_id: number | null
      multimedia_group_name: string
      multimedia_group_desc: string | null
      multimedia_group_active: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["multimediaGroup"]>
    composites: {}
  }

  type MultimediaGroupGetPayload<S extends boolean | null | undefined | MultimediaGroupDefaultArgs> = $Result.GetResult<Prisma.$MultimediaGroupPayload, S>

  type MultimediaGroupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<MultimediaGroupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: MultimediaGroupCountAggregateInputType | true
    }

  export interface MultimediaGroupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['MultimediaGroup'], meta: { name: 'MultimediaGroup' } }
    /**
     * Find zero or one MultimediaGroup that matches the filter.
     * @param {MultimediaGroupFindUniqueArgs} args - Arguments to find a MultimediaGroup
     * @example
     * // Get one MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends MultimediaGroupFindUniqueArgs>(args: SelectSubset<T, MultimediaGroupFindUniqueArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one MultimediaGroup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {MultimediaGroupFindUniqueOrThrowArgs} args - Arguments to find a MultimediaGroup
     * @example
     * // Get one MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends MultimediaGroupFindUniqueOrThrowArgs>(args: SelectSubset<T, MultimediaGroupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first MultimediaGroup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupFindFirstArgs} args - Arguments to find a MultimediaGroup
     * @example
     * // Get one MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends MultimediaGroupFindFirstArgs>(args?: SelectSubset<T, MultimediaGroupFindFirstArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first MultimediaGroup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupFindFirstOrThrowArgs} args - Arguments to find a MultimediaGroup
     * @example
     * // Get one MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends MultimediaGroupFindFirstOrThrowArgs>(args?: SelectSubset<T, MultimediaGroupFindFirstOrThrowArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more MultimediaGroups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all MultimediaGroups
     * const multimediaGroups = await prisma.multimediaGroup.findMany()
     * 
     * // Get first 10 MultimediaGroups
     * const multimediaGroups = await prisma.multimediaGroup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const multimediaGroupWithIdOnly = await prisma.multimediaGroup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends MultimediaGroupFindManyArgs>(args?: SelectSubset<T, MultimediaGroupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a MultimediaGroup.
     * @param {MultimediaGroupCreateArgs} args - Arguments to create a MultimediaGroup.
     * @example
     * // Create one MultimediaGroup
     * const MultimediaGroup = await prisma.multimediaGroup.create({
     *   data: {
     *     // ... data to create a MultimediaGroup
     *   }
     * })
     * 
     */
    create<T extends MultimediaGroupCreateArgs>(args: SelectSubset<T, MultimediaGroupCreateArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many MultimediaGroups.
     * @param {MultimediaGroupCreateManyArgs} args - Arguments to create many MultimediaGroups.
     * @example
     * // Create many MultimediaGroups
     * const multimediaGroup = await prisma.multimediaGroup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends MultimediaGroupCreateManyArgs>(args?: SelectSubset<T, MultimediaGroupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a MultimediaGroup.
     * @param {MultimediaGroupDeleteArgs} args - Arguments to delete one MultimediaGroup.
     * @example
     * // Delete one MultimediaGroup
     * const MultimediaGroup = await prisma.multimediaGroup.delete({
     *   where: {
     *     // ... filter to delete one MultimediaGroup
     *   }
     * })
     * 
     */
    delete<T extends MultimediaGroupDeleteArgs>(args: SelectSubset<T, MultimediaGroupDeleteArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one MultimediaGroup.
     * @param {MultimediaGroupUpdateArgs} args - Arguments to update one MultimediaGroup.
     * @example
     * // Update one MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends MultimediaGroupUpdateArgs>(args: SelectSubset<T, MultimediaGroupUpdateArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more MultimediaGroups.
     * @param {MultimediaGroupDeleteManyArgs} args - Arguments to filter MultimediaGroups to delete.
     * @example
     * // Delete a few MultimediaGroups
     * const { count } = await prisma.multimediaGroup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends MultimediaGroupDeleteManyArgs>(args?: SelectSubset<T, MultimediaGroupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more MultimediaGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many MultimediaGroups
     * const multimediaGroup = await prisma.multimediaGroup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends MultimediaGroupUpdateManyArgs>(args: SelectSubset<T, MultimediaGroupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one MultimediaGroup.
     * @param {MultimediaGroupUpsertArgs} args - Arguments to update or create a MultimediaGroup.
     * @example
     * // Update or create a MultimediaGroup
     * const multimediaGroup = await prisma.multimediaGroup.upsert({
     *   create: {
     *     // ... data to create a MultimediaGroup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the MultimediaGroup we want to update
     *   }
     * })
     */
    upsert<T extends MultimediaGroupUpsertArgs>(args: SelectSubset<T, MultimediaGroupUpsertArgs<ExtArgs>>): Prisma__MultimediaGroupClient<$Result.GetResult<Prisma.$MultimediaGroupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of MultimediaGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupCountArgs} args - Arguments to filter MultimediaGroups to count.
     * @example
     * // Count the number of MultimediaGroups
     * const count = await prisma.multimediaGroup.count({
     *   where: {
     *     // ... the filter for the MultimediaGroups we want to count
     *   }
     * })
    **/
    count<T extends MultimediaGroupCountArgs>(
      args?: Subset<T, MultimediaGroupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], MultimediaGroupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a MultimediaGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends MultimediaGroupAggregateArgs>(args: Subset<T, MultimediaGroupAggregateArgs>): Prisma.PrismaPromise<GetMultimediaGroupAggregateType<T>>

    /**
     * Group by MultimediaGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends MultimediaGroupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: MultimediaGroupGroupByArgs['orderBy'] }
        : { orderBy?: MultimediaGroupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, MultimediaGroupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetMultimediaGroupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the MultimediaGroup model
   */
  readonly fields: MultimediaGroupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for MultimediaGroup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__MultimediaGroupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the MultimediaGroup model
   */
  interface MultimediaGroupFieldRefs {
    readonly id: FieldRef<"MultimediaGroup", 'Int'>
    readonly school_id: FieldRef<"MultimediaGroup", 'Int'>
    readonly branch_id: FieldRef<"MultimediaGroup", 'Int'>
    readonly multimedia_group_name: FieldRef<"MultimediaGroup", 'String'>
    readonly multimedia_group_desc: FieldRef<"MultimediaGroup", 'String'>
    readonly multimedia_group_active: FieldRef<"MultimediaGroup", 'Int'>
    readonly created_by: FieldRef<"MultimediaGroup", 'Int'>
    readonly created_at: FieldRef<"MultimediaGroup", 'DateTime'>
    readonly updated_at: FieldRef<"MultimediaGroup", 'DateTime'>
    readonly deleted_at: FieldRef<"MultimediaGroup", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * MultimediaGroup findUnique
   */
  export type MultimediaGroupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter, which MultimediaGroup to fetch.
     */
    where: MultimediaGroupWhereUniqueInput
  }

  /**
   * MultimediaGroup findUniqueOrThrow
   */
  export type MultimediaGroupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter, which MultimediaGroup to fetch.
     */
    where: MultimediaGroupWhereUniqueInput
  }

  /**
   * MultimediaGroup findFirst
   */
  export type MultimediaGroupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter, which MultimediaGroup to fetch.
     */
    where?: MultimediaGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MultimediaGroups to fetch.
     */
    orderBy?: MultimediaGroupOrderByWithRelationInput | MultimediaGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for MultimediaGroups.
     */
    cursor?: MultimediaGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MultimediaGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MultimediaGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of MultimediaGroups.
     */
    distinct?: MultimediaGroupScalarFieldEnum | MultimediaGroupScalarFieldEnum[]
  }

  /**
   * MultimediaGroup findFirstOrThrow
   */
  export type MultimediaGroupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter, which MultimediaGroup to fetch.
     */
    where?: MultimediaGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MultimediaGroups to fetch.
     */
    orderBy?: MultimediaGroupOrderByWithRelationInput | MultimediaGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for MultimediaGroups.
     */
    cursor?: MultimediaGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MultimediaGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MultimediaGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of MultimediaGroups.
     */
    distinct?: MultimediaGroupScalarFieldEnum | MultimediaGroupScalarFieldEnum[]
  }

  /**
   * MultimediaGroup findMany
   */
  export type MultimediaGroupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter, which MultimediaGroups to fetch.
     */
    where?: MultimediaGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MultimediaGroups to fetch.
     */
    orderBy?: MultimediaGroupOrderByWithRelationInput | MultimediaGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing MultimediaGroups.
     */
    cursor?: MultimediaGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MultimediaGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MultimediaGroups.
     */
    skip?: number
    distinct?: MultimediaGroupScalarFieldEnum | MultimediaGroupScalarFieldEnum[]
  }

  /**
   * MultimediaGroup create
   */
  export type MultimediaGroupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * The data needed to create a MultimediaGroup.
     */
    data: XOR<MultimediaGroupCreateInput, MultimediaGroupUncheckedCreateInput>
  }

  /**
   * MultimediaGroup createMany
   */
  export type MultimediaGroupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many MultimediaGroups.
     */
    data: MultimediaGroupCreateManyInput | MultimediaGroupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * MultimediaGroup update
   */
  export type MultimediaGroupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * The data needed to update a MultimediaGroup.
     */
    data: XOR<MultimediaGroupUpdateInput, MultimediaGroupUncheckedUpdateInput>
    /**
     * Choose, which MultimediaGroup to update.
     */
    where: MultimediaGroupWhereUniqueInput
  }

  /**
   * MultimediaGroup updateMany
   */
  export type MultimediaGroupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update MultimediaGroups.
     */
    data: XOR<MultimediaGroupUpdateManyMutationInput, MultimediaGroupUncheckedUpdateManyInput>
    /**
     * Filter which MultimediaGroups to update
     */
    where?: MultimediaGroupWhereInput
    /**
     * Limit how many MultimediaGroups to update.
     */
    limit?: number
  }

  /**
   * MultimediaGroup upsert
   */
  export type MultimediaGroupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * The filter to search for the MultimediaGroup to update in case it exists.
     */
    where: MultimediaGroupWhereUniqueInput
    /**
     * In case the MultimediaGroup found by the `where` argument doesn't exist, create a new MultimediaGroup with this data.
     */
    create: XOR<MultimediaGroupCreateInput, MultimediaGroupUncheckedCreateInput>
    /**
     * In case the MultimediaGroup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<MultimediaGroupUpdateInput, MultimediaGroupUncheckedUpdateInput>
  }

  /**
   * MultimediaGroup delete
   */
  export type MultimediaGroupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
    /**
     * Filter which MultimediaGroup to delete.
     */
    where: MultimediaGroupWhereUniqueInput
  }

  /**
   * MultimediaGroup deleteMany
   */
  export type MultimediaGroupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which MultimediaGroups to delete
     */
    where?: MultimediaGroupWhereInput
    /**
     * Limit how many MultimediaGroups to delete.
     */
    limit?: number
  }

  /**
   * MultimediaGroup without action
   */
  export type MultimediaGroupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MultimediaGroup
     */
    select?: MultimediaGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MultimediaGroup
     */
    omit?: MultimediaGroupOmit<ExtArgs> | null
  }


  /**
   * Model Multimedia
   */

  export type AggregateMultimedia = {
    _count: MultimediaCountAggregateOutputType | null
    _avg: MultimediaAvgAggregateOutputType | null
    _sum: MultimediaSumAggregateOutputType | null
    _min: MultimediaMinAggregateOutputType | null
    _max: MultimediaMaxAggregateOutputType | null
  }

  export type MultimediaAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_is_image: number | null
    multimedia_active: number | null
    created_by: number | null
  }

  export type MultimediaSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_is_image: number | null
    multimedia_active: number | null
    created_by: number | null
  }

  export type MultimediaMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_is_image: number | null
    multimedia_name: string | null
    multimedia_desc: string | null
    multimedia_path: string | null
    multimedia_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type MultimediaMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    multimedia_is_image: number | null
    multimedia_name: string | null
    multimedia_desc: string | null
    multimedia_path: string | null
    multimedia_active: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type MultimediaCountAggregateOutputType = {
    id: number
    school_id: number
    branch_id: number
    multimedia_is_image: number
    multimedia_name: number
    multimedia_desc: number
    multimedia_path: number
    multimedia_active: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type MultimediaAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_is_image?: true
    multimedia_active?: true
    created_by?: true
  }

  export type MultimediaSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_is_image?: true
    multimedia_active?: true
    created_by?: true
  }

  export type MultimediaMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_is_image?: true
    multimedia_name?: true
    multimedia_desc?: true
    multimedia_path?: true
    multimedia_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type MultimediaMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_is_image?: true
    multimedia_name?: true
    multimedia_desc?: true
    multimedia_path?: true
    multimedia_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type MultimediaCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    multimedia_is_image?: true
    multimedia_name?: true
    multimedia_desc?: true
    multimedia_path?: true
    multimedia_active?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type MultimediaAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Multimedia to aggregate.
     */
    where?: MultimediaWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Multimedias to fetch.
     */
    orderBy?: MultimediaOrderByWithRelationInput | MultimediaOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: MultimediaWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Multimedias from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Multimedias.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Multimedias
    **/
    _count?: true | MultimediaCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: MultimediaAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: MultimediaSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: MultimediaMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: MultimediaMaxAggregateInputType
  }

  export type GetMultimediaAggregateType<T extends MultimediaAggregateArgs> = {
        [P in keyof T & keyof AggregateMultimedia]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateMultimedia[P]>
      : GetScalarType<T[P], AggregateMultimedia[P]>
  }




  export type MultimediaGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: MultimediaWhereInput
    orderBy?: MultimediaOrderByWithAggregationInput | MultimediaOrderByWithAggregationInput[]
    by: MultimediaScalarFieldEnum[] | MultimediaScalarFieldEnum
    having?: MultimediaScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: MultimediaCountAggregateInputType | true
    _avg?: MultimediaAvgAggregateInputType
    _sum?: MultimediaSumAggregateInputType
    _min?: MultimediaMinAggregateInputType
    _max?: MultimediaMaxAggregateInputType
  }

  export type MultimediaGroupByOutputType = {
    id: number
    school_id: number
    branch_id: number | null
    multimedia_is_image: number
    multimedia_name: string
    multimedia_desc: string | null
    multimedia_path: string
    multimedia_active: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: MultimediaCountAggregateOutputType | null
    _avg: MultimediaAvgAggregateOutputType | null
    _sum: MultimediaSumAggregateOutputType | null
    _min: MultimediaMinAggregateOutputType | null
    _max: MultimediaMaxAggregateOutputType | null
  }

  type GetMultimediaGroupByPayload<T extends MultimediaGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<MultimediaGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof MultimediaGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], MultimediaGroupByOutputType[P]>
            : GetScalarType<T[P], MultimediaGroupByOutputType[P]>
        }
      >
    >


  export type MultimediaSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    multimedia_is_image?: boolean
    multimedia_name?: boolean
    multimedia_desc?: boolean
    multimedia_path?: boolean
    multimedia_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    branch?: boolean | Multimedia$branchArgs<ExtArgs>
  }, ExtArgs["result"]["multimedia"]>



  export type MultimediaSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    multimedia_is_image?: boolean
    multimedia_name?: boolean
    multimedia_desc?: boolean
    multimedia_path?: boolean
    multimedia_active?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type MultimediaOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_id" | "multimedia_is_image" | "multimedia_name" | "multimedia_desc" | "multimedia_path" | "multimedia_active" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["multimedia"]>
  export type MultimediaInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    branch?: boolean | Multimedia$branchArgs<ExtArgs>
  }

  export type $MultimediaPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Multimedia"
    objects: {
      branch: Prisma.$BranchPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      branch_id: number | null
      multimedia_is_image: number
      multimedia_name: string
      multimedia_desc: string | null
      multimedia_path: string
      multimedia_active: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["multimedia"]>
    composites: {}
  }

  type MultimediaGetPayload<S extends boolean | null | undefined | MultimediaDefaultArgs> = $Result.GetResult<Prisma.$MultimediaPayload, S>

  type MultimediaCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<MultimediaFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: MultimediaCountAggregateInputType | true
    }

  export interface MultimediaDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Multimedia'], meta: { name: 'Multimedia' } }
    /**
     * Find zero or one Multimedia that matches the filter.
     * @param {MultimediaFindUniqueArgs} args - Arguments to find a Multimedia
     * @example
     * // Get one Multimedia
     * const multimedia = await prisma.multimedia.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends MultimediaFindUniqueArgs>(args: SelectSubset<T, MultimediaFindUniqueArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Multimedia that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {MultimediaFindUniqueOrThrowArgs} args - Arguments to find a Multimedia
     * @example
     * // Get one Multimedia
     * const multimedia = await prisma.multimedia.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends MultimediaFindUniqueOrThrowArgs>(args: SelectSubset<T, MultimediaFindUniqueOrThrowArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Multimedia that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaFindFirstArgs} args - Arguments to find a Multimedia
     * @example
     * // Get one Multimedia
     * const multimedia = await prisma.multimedia.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends MultimediaFindFirstArgs>(args?: SelectSubset<T, MultimediaFindFirstArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Multimedia that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaFindFirstOrThrowArgs} args - Arguments to find a Multimedia
     * @example
     * // Get one Multimedia
     * const multimedia = await prisma.multimedia.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends MultimediaFindFirstOrThrowArgs>(args?: SelectSubset<T, MultimediaFindFirstOrThrowArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Multimedias that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Multimedias
     * const multimedias = await prisma.multimedia.findMany()
     * 
     * // Get first 10 Multimedias
     * const multimedias = await prisma.multimedia.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const multimediaWithIdOnly = await prisma.multimedia.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends MultimediaFindManyArgs>(args?: SelectSubset<T, MultimediaFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Multimedia.
     * @param {MultimediaCreateArgs} args - Arguments to create a Multimedia.
     * @example
     * // Create one Multimedia
     * const Multimedia = await prisma.multimedia.create({
     *   data: {
     *     // ... data to create a Multimedia
     *   }
     * })
     * 
     */
    create<T extends MultimediaCreateArgs>(args: SelectSubset<T, MultimediaCreateArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Multimedias.
     * @param {MultimediaCreateManyArgs} args - Arguments to create many Multimedias.
     * @example
     * // Create many Multimedias
     * const multimedia = await prisma.multimedia.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends MultimediaCreateManyArgs>(args?: SelectSubset<T, MultimediaCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Multimedia.
     * @param {MultimediaDeleteArgs} args - Arguments to delete one Multimedia.
     * @example
     * // Delete one Multimedia
     * const Multimedia = await prisma.multimedia.delete({
     *   where: {
     *     // ... filter to delete one Multimedia
     *   }
     * })
     * 
     */
    delete<T extends MultimediaDeleteArgs>(args: SelectSubset<T, MultimediaDeleteArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Multimedia.
     * @param {MultimediaUpdateArgs} args - Arguments to update one Multimedia.
     * @example
     * // Update one Multimedia
     * const multimedia = await prisma.multimedia.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends MultimediaUpdateArgs>(args: SelectSubset<T, MultimediaUpdateArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Multimedias.
     * @param {MultimediaDeleteManyArgs} args - Arguments to filter Multimedias to delete.
     * @example
     * // Delete a few Multimedias
     * const { count } = await prisma.multimedia.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends MultimediaDeleteManyArgs>(args?: SelectSubset<T, MultimediaDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Multimedias.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Multimedias
     * const multimedia = await prisma.multimedia.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends MultimediaUpdateManyArgs>(args: SelectSubset<T, MultimediaUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Multimedia.
     * @param {MultimediaUpsertArgs} args - Arguments to update or create a Multimedia.
     * @example
     * // Update or create a Multimedia
     * const multimedia = await prisma.multimedia.upsert({
     *   create: {
     *     // ... data to create a Multimedia
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Multimedia we want to update
     *   }
     * })
     */
    upsert<T extends MultimediaUpsertArgs>(args: SelectSubset<T, MultimediaUpsertArgs<ExtArgs>>): Prisma__MultimediaClient<$Result.GetResult<Prisma.$MultimediaPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Multimedias.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaCountArgs} args - Arguments to filter Multimedias to count.
     * @example
     * // Count the number of Multimedias
     * const count = await prisma.multimedia.count({
     *   where: {
     *     // ... the filter for the Multimedias we want to count
     *   }
     * })
    **/
    count<T extends MultimediaCountArgs>(
      args?: Subset<T, MultimediaCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], MultimediaCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Multimedia.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends MultimediaAggregateArgs>(args: Subset<T, MultimediaAggregateArgs>): Prisma.PrismaPromise<GetMultimediaAggregateType<T>>

    /**
     * Group by Multimedia.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MultimediaGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends MultimediaGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: MultimediaGroupByArgs['orderBy'] }
        : { orderBy?: MultimediaGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, MultimediaGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetMultimediaGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Multimedia model
   */
  readonly fields: MultimediaFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Multimedia.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__MultimediaClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    branch<T extends Multimedia$branchArgs<ExtArgs> = {}>(args?: Subset<T, Multimedia$branchArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Multimedia model
   */
  interface MultimediaFieldRefs {
    readonly id: FieldRef<"Multimedia", 'Int'>
    readonly school_id: FieldRef<"Multimedia", 'Int'>
    readonly branch_id: FieldRef<"Multimedia", 'Int'>
    readonly multimedia_is_image: FieldRef<"Multimedia", 'Int'>
    readonly multimedia_name: FieldRef<"Multimedia", 'String'>
    readonly multimedia_desc: FieldRef<"Multimedia", 'String'>
    readonly multimedia_path: FieldRef<"Multimedia", 'String'>
    readonly multimedia_active: FieldRef<"Multimedia", 'Int'>
    readonly created_by: FieldRef<"Multimedia", 'Int'>
    readonly created_at: FieldRef<"Multimedia", 'DateTime'>
    readonly updated_at: FieldRef<"Multimedia", 'DateTime'>
    readonly deleted_at: FieldRef<"Multimedia", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Multimedia findUnique
   */
  export type MultimediaFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter, which Multimedia to fetch.
     */
    where: MultimediaWhereUniqueInput
  }

  /**
   * Multimedia findUniqueOrThrow
   */
  export type MultimediaFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter, which Multimedia to fetch.
     */
    where: MultimediaWhereUniqueInput
  }

  /**
   * Multimedia findFirst
   */
  export type MultimediaFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter, which Multimedia to fetch.
     */
    where?: MultimediaWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Multimedias to fetch.
     */
    orderBy?: MultimediaOrderByWithRelationInput | MultimediaOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Multimedias.
     */
    cursor?: MultimediaWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Multimedias from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Multimedias.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Multimedias.
     */
    distinct?: MultimediaScalarFieldEnum | MultimediaScalarFieldEnum[]
  }

  /**
   * Multimedia findFirstOrThrow
   */
  export type MultimediaFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter, which Multimedia to fetch.
     */
    where?: MultimediaWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Multimedias to fetch.
     */
    orderBy?: MultimediaOrderByWithRelationInput | MultimediaOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Multimedias.
     */
    cursor?: MultimediaWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Multimedias from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Multimedias.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Multimedias.
     */
    distinct?: MultimediaScalarFieldEnum | MultimediaScalarFieldEnum[]
  }

  /**
   * Multimedia findMany
   */
  export type MultimediaFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter, which Multimedias to fetch.
     */
    where?: MultimediaWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Multimedias to fetch.
     */
    orderBy?: MultimediaOrderByWithRelationInput | MultimediaOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Multimedias.
     */
    cursor?: MultimediaWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Multimedias from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Multimedias.
     */
    skip?: number
    distinct?: MultimediaScalarFieldEnum | MultimediaScalarFieldEnum[]
  }

  /**
   * Multimedia create
   */
  export type MultimediaCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * The data needed to create a Multimedia.
     */
    data: XOR<MultimediaCreateInput, MultimediaUncheckedCreateInput>
  }

  /**
   * Multimedia createMany
   */
  export type MultimediaCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Multimedias.
     */
    data: MultimediaCreateManyInput | MultimediaCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Multimedia update
   */
  export type MultimediaUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * The data needed to update a Multimedia.
     */
    data: XOR<MultimediaUpdateInput, MultimediaUncheckedUpdateInput>
    /**
     * Choose, which Multimedia to update.
     */
    where: MultimediaWhereUniqueInput
  }

  /**
   * Multimedia updateMany
   */
  export type MultimediaUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Multimedias.
     */
    data: XOR<MultimediaUpdateManyMutationInput, MultimediaUncheckedUpdateManyInput>
    /**
     * Filter which Multimedias to update
     */
    where?: MultimediaWhereInput
    /**
     * Limit how many Multimedias to update.
     */
    limit?: number
  }

  /**
   * Multimedia upsert
   */
  export type MultimediaUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * The filter to search for the Multimedia to update in case it exists.
     */
    where: MultimediaWhereUniqueInput
    /**
     * In case the Multimedia found by the `where` argument doesn't exist, create a new Multimedia with this data.
     */
    create: XOR<MultimediaCreateInput, MultimediaUncheckedCreateInput>
    /**
     * In case the Multimedia was found with the provided `where` argument, update it with this data.
     */
    update: XOR<MultimediaUpdateInput, MultimediaUncheckedUpdateInput>
  }

  /**
   * Multimedia delete
   */
  export type MultimediaDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
    /**
     * Filter which Multimedia to delete.
     */
    where: MultimediaWhereUniqueInput
  }

  /**
   * Multimedia deleteMany
   */
  export type MultimediaDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Multimedias to delete
     */
    where?: MultimediaWhereInput
    /**
     * Limit how many Multimedias to delete.
     */
    limit?: number
  }

  /**
   * Multimedia.branch
   */
  export type Multimedia$branchArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
  }

  /**
   * Multimedia without action
   */
  export type MultimediaDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Multimedia
     */
    select?: MultimediaSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Multimedia
     */
    omit?: MultimediaOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: MultimediaInclude<ExtArgs> | null
  }


  /**
   * Model LibraryBook
   */

  export type AggregateLibraryBook = {
    _count: LibraryBookCountAggregateOutputType | null
    _avg: LibraryBookAvgAggregateOutputType | null
    _sum: LibraryBookSumAggregateOutputType | null
    _min: LibraryBookMinAggregateOutputType | null
    _max: LibraryBookMaxAggregateOutputType | null
  }

  export type LibraryBookAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    created_by: number | null
  }

  export type LibraryBookSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    created_by: number | null
  }

  export type LibraryBookMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    book_name: string | null
    book_desc: string | null
    book_author_name: string | null
    book_cover: string | null
    book_path: string | null
    book_type: $Enums.book_type | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type LibraryBookMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    book_name: string | null
    book_desc: string | null
    book_author_name: string | null
    book_cover: string | null
    book_path: string | null
    book_type: $Enums.book_type | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type LibraryBookCountAggregateOutputType = {
    id: number
    school_id: number
    branch_id: number
    book_name: number
    book_desc: number
    book_author_name: number
    book_cover: number
    book_path: number
    book_type: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type LibraryBookAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    created_by?: true
  }

  export type LibraryBookSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    created_by?: true
  }

  export type LibraryBookMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    book_name?: true
    book_desc?: true
    book_author_name?: true
    book_cover?: true
    book_path?: true
    book_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type LibraryBookMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    book_name?: true
    book_desc?: true
    book_author_name?: true
    book_cover?: true
    book_path?: true
    book_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type LibraryBookCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    book_name?: true
    book_desc?: true
    book_author_name?: true
    book_cover?: true
    book_path?: true
    book_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type LibraryBookAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which LibraryBook to aggregate.
     */
    where?: LibraryBookWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryBooks to fetch.
     */
    orderBy?: LibraryBookOrderByWithRelationInput | LibraryBookOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: LibraryBookWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryBooks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryBooks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned LibraryBooks
    **/
    _count?: true | LibraryBookCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: LibraryBookAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: LibraryBookSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: LibraryBookMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: LibraryBookMaxAggregateInputType
  }

  export type GetLibraryBookAggregateType<T extends LibraryBookAggregateArgs> = {
        [P in keyof T & keyof AggregateLibraryBook]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateLibraryBook[P]>
      : GetScalarType<T[P], AggregateLibraryBook[P]>
  }




  export type LibraryBookGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: LibraryBookWhereInput
    orderBy?: LibraryBookOrderByWithAggregationInput | LibraryBookOrderByWithAggregationInput[]
    by: LibraryBookScalarFieldEnum[] | LibraryBookScalarFieldEnum
    having?: LibraryBookScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: LibraryBookCountAggregateInputType | true
    _avg?: LibraryBookAvgAggregateInputType
    _sum?: LibraryBookSumAggregateInputType
    _min?: LibraryBookMinAggregateInputType
    _max?: LibraryBookMaxAggregateInputType
  }

  export type LibraryBookGroupByOutputType = {
    id: number
    school_id: number | null
    branch_id: number
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover: string | null
    book_path: string | null
    book_type: $Enums.book_type
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: LibraryBookCountAggregateOutputType | null
    _avg: LibraryBookAvgAggregateOutputType | null
    _sum: LibraryBookSumAggregateOutputType | null
    _min: LibraryBookMinAggregateOutputType | null
    _max: LibraryBookMaxAggregateOutputType | null
  }

  type GetLibraryBookGroupByPayload<T extends LibraryBookGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<LibraryBookGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof LibraryBookGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], LibraryBookGroupByOutputType[P]>
            : GetScalarType<T[P], LibraryBookGroupByOutputType[P]>
        }
      >
    >


  export type LibraryBookSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    book_name?: boolean
    book_desc?: boolean
    book_author_name?: boolean
    book_cover?: boolean
    book_path?: boolean
    book_type?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    branch?: boolean | LibraryBook$branchArgs<ExtArgs>
  }, ExtArgs["result"]["libraryBook"]>



  export type LibraryBookSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    book_name?: boolean
    book_desc?: boolean
    book_author_name?: boolean
    book_cover?: boolean
    book_path?: boolean
    book_type?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type LibraryBookOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_id" | "book_name" | "book_desc" | "book_author_name" | "book_cover" | "book_path" | "book_type" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["libraryBook"]>
  export type LibraryBookInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    branch?: boolean | LibraryBook$branchArgs<ExtArgs>
  }

  export type $LibraryBookPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "LibraryBook"
    objects: {
      branch: Prisma.$BranchPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number | null
      branch_id: number
      book_name: string
      book_desc: string
      book_author_name: string
      book_cover: string | null
      book_path: string | null
      book_type: $Enums.book_type
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["libraryBook"]>
    composites: {}
  }

  type LibraryBookGetPayload<S extends boolean | null | undefined | LibraryBookDefaultArgs> = $Result.GetResult<Prisma.$LibraryBookPayload, S>

  type LibraryBookCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<LibraryBookFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: LibraryBookCountAggregateInputType | true
    }

  export interface LibraryBookDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['LibraryBook'], meta: { name: 'LibraryBook' } }
    /**
     * Find zero or one LibraryBook that matches the filter.
     * @param {LibraryBookFindUniqueArgs} args - Arguments to find a LibraryBook
     * @example
     * // Get one LibraryBook
     * const libraryBook = await prisma.libraryBook.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends LibraryBookFindUniqueArgs>(args: SelectSubset<T, LibraryBookFindUniqueArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one LibraryBook that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {LibraryBookFindUniqueOrThrowArgs} args - Arguments to find a LibraryBook
     * @example
     * // Get one LibraryBook
     * const libraryBook = await prisma.libraryBook.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends LibraryBookFindUniqueOrThrowArgs>(args: SelectSubset<T, LibraryBookFindUniqueOrThrowArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first LibraryBook that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookFindFirstArgs} args - Arguments to find a LibraryBook
     * @example
     * // Get one LibraryBook
     * const libraryBook = await prisma.libraryBook.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends LibraryBookFindFirstArgs>(args?: SelectSubset<T, LibraryBookFindFirstArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first LibraryBook that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookFindFirstOrThrowArgs} args - Arguments to find a LibraryBook
     * @example
     * // Get one LibraryBook
     * const libraryBook = await prisma.libraryBook.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends LibraryBookFindFirstOrThrowArgs>(args?: SelectSubset<T, LibraryBookFindFirstOrThrowArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more LibraryBooks that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all LibraryBooks
     * const libraryBooks = await prisma.libraryBook.findMany()
     * 
     * // Get first 10 LibraryBooks
     * const libraryBooks = await prisma.libraryBook.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const libraryBookWithIdOnly = await prisma.libraryBook.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends LibraryBookFindManyArgs>(args?: SelectSubset<T, LibraryBookFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a LibraryBook.
     * @param {LibraryBookCreateArgs} args - Arguments to create a LibraryBook.
     * @example
     * // Create one LibraryBook
     * const LibraryBook = await prisma.libraryBook.create({
     *   data: {
     *     // ... data to create a LibraryBook
     *   }
     * })
     * 
     */
    create<T extends LibraryBookCreateArgs>(args: SelectSubset<T, LibraryBookCreateArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many LibraryBooks.
     * @param {LibraryBookCreateManyArgs} args - Arguments to create many LibraryBooks.
     * @example
     * // Create many LibraryBooks
     * const libraryBook = await prisma.libraryBook.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends LibraryBookCreateManyArgs>(args?: SelectSubset<T, LibraryBookCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a LibraryBook.
     * @param {LibraryBookDeleteArgs} args - Arguments to delete one LibraryBook.
     * @example
     * // Delete one LibraryBook
     * const LibraryBook = await prisma.libraryBook.delete({
     *   where: {
     *     // ... filter to delete one LibraryBook
     *   }
     * })
     * 
     */
    delete<T extends LibraryBookDeleteArgs>(args: SelectSubset<T, LibraryBookDeleteArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one LibraryBook.
     * @param {LibraryBookUpdateArgs} args - Arguments to update one LibraryBook.
     * @example
     * // Update one LibraryBook
     * const libraryBook = await prisma.libraryBook.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends LibraryBookUpdateArgs>(args: SelectSubset<T, LibraryBookUpdateArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more LibraryBooks.
     * @param {LibraryBookDeleteManyArgs} args - Arguments to filter LibraryBooks to delete.
     * @example
     * // Delete a few LibraryBooks
     * const { count } = await prisma.libraryBook.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends LibraryBookDeleteManyArgs>(args?: SelectSubset<T, LibraryBookDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more LibraryBooks.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many LibraryBooks
     * const libraryBook = await prisma.libraryBook.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends LibraryBookUpdateManyArgs>(args: SelectSubset<T, LibraryBookUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one LibraryBook.
     * @param {LibraryBookUpsertArgs} args - Arguments to update or create a LibraryBook.
     * @example
     * // Update or create a LibraryBook
     * const libraryBook = await prisma.libraryBook.upsert({
     *   create: {
     *     // ... data to create a LibraryBook
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the LibraryBook we want to update
     *   }
     * })
     */
    upsert<T extends LibraryBookUpsertArgs>(args: SelectSubset<T, LibraryBookUpsertArgs<ExtArgs>>): Prisma__LibraryBookClient<$Result.GetResult<Prisma.$LibraryBookPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of LibraryBooks.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookCountArgs} args - Arguments to filter LibraryBooks to count.
     * @example
     * // Count the number of LibraryBooks
     * const count = await prisma.libraryBook.count({
     *   where: {
     *     // ... the filter for the LibraryBooks we want to count
     *   }
     * })
    **/
    count<T extends LibraryBookCountArgs>(
      args?: Subset<T, LibraryBookCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], LibraryBookCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a LibraryBook.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends LibraryBookAggregateArgs>(args: Subset<T, LibraryBookAggregateArgs>): Prisma.PrismaPromise<GetLibraryBookAggregateType<T>>

    /**
     * Group by LibraryBook.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryBookGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends LibraryBookGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: LibraryBookGroupByArgs['orderBy'] }
        : { orderBy?: LibraryBookGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, LibraryBookGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetLibraryBookGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the LibraryBook model
   */
  readonly fields: LibraryBookFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for LibraryBook.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__LibraryBookClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    branch<T extends LibraryBook$branchArgs<ExtArgs> = {}>(args?: Subset<T, LibraryBook$branchArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the LibraryBook model
   */
  interface LibraryBookFieldRefs {
    readonly id: FieldRef<"LibraryBook", 'Int'>
    readonly school_id: FieldRef<"LibraryBook", 'Int'>
    readonly branch_id: FieldRef<"LibraryBook", 'Int'>
    readonly book_name: FieldRef<"LibraryBook", 'String'>
    readonly book_desc: FieldRef<"LibraryBook", 'String'>
    readonly book_author_name: FieldRef<"LibraryBook", 'String'>
    readonly book_cover: FieldRef<"LibraryBook", 'String'>
    readonly book_path: FieldRef<"LibraryBook", 'String'>
    readonly book_type: FieldRef<"LibraryBook", 'book_type'>
    readonly created_by: FieldRef<"LibraryBook", 'Int'>
    readonly created_at: FieldRef<"LibraryBook", 'DateTime'>
    readonly updated_at: FieldRef<"LibraryBook", 'DateTime'>
    readonly deleted_at: FieldRef<"LibraryBook", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * LibraryBook findUnique
   */
  export type LibraryBookFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter, which LibraryBook to fetch.
     */
    where: LibraryBookWhereUniqueInput
  }

  /**
   * LibraryBook findUniqueOrThrow
   */
  export type LibraryBookFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter, which LibraryBook to fetch.
     */
    where: LibraryBookWhereUniqueInput
  }

  /**
   * LibraryBook findFirst
   */
  export type LibraryBookFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter, which LibraryBook to fetch.
     */
    where?: LibraryBookWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryBooks to fetch.
     */
    orderBy?: LibraryBookOrderByWithRelationInput | LibraryBookOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for LibraryBooks.
     */
    cursor?: LibraryBookWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryBooks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryBooks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of LibraryBooks.
     */
    distinct?: LibraryBookScalarFieldEnum | LibraryBookScalarFieldEnum[]
  }

  /**
   * LibraryBook findFirstOrThrow
   */
  export type LibraryBookFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter, which LibraryBook to fetch.
     */
    where?: LibraryBookWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryBooks to fetch.
     */
    orderBy?: LibraryBookOrderByWithRelationInput | LibraryBookOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for LibraryBooks.
     */
    cursor?: LibraryBookWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryBooks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryBooks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of LibraryBooks.
     */
    distinct?: LibraryBookScalarFieldEnum | LibraryBookScalarFieldEnum[]
  }

  /**
   * LibraryBook findMany
   */
  export type LibraryBookFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter, which LibraryBooks to fetch.
     */
    where?: LibraryBookWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryBooks to fetch.
     */
    orderBy?: LibraryBookOrderByWithRelationInput | LibraryBookOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing LibraryBooks.
     */
    cursor?: LibraryBookWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryBooks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryBooks.
     */
    skip?: number
    distinct?: LibraryBookScalarFieldEnum | LibraryBookScalarFieldEnum[]
  }

  /**
   * LibraryBook create
   */
  export type LibraryBookCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * The data needed to create a LibraryBook.
     */
    data: XOR<LibraryBookCreateInput, LibraryBookUncheckedCreateInput>
  }

  /**
   * LibraryBook createMany
   */
  export type LibraryBookCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many LibraryBooks.
     */
    data: LibraryBookCreateManyInput | LibraryBookCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * LibraryBook update
   */
  export type LibraryBookUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * The data needed to update a LibraryBook.
     */
    data: XOR<LibraryBookUpdateInput, LibraryBookUncheckedUpdateInput>
    /**
     * Choose, which LibraryBook to update.
     */
    where: LibraryBookWhereUniqueInput
  }

  /**
   * LibraryBook updateMany
   */
  export type LibraryBookUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update LibraryBooks.
     */
    data: XOR<LibraryBookUpdateManyMutationInput, LibraryBookUncheckedUpdateManyInput>
    /**
     * Filter which LibraryBooks to update
     */
    where?: LibraryBookWhereInput
    /**
     * Limit how many LibraryBooks to update.
     */
    limit?: number
  }

  /**
   * LibraryBook upsert
   */
  export type LibraryBookUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * The filter to search for the LibraryBook to update in case it exists.
     */
    where: LibraryBookWhereUniqueInput
    /**
     * In case the LibraryBook found by the `where` argument doesn't exist, create a new LibraryBook with this data.
     */
    create: XOR<LibraryBookCreateInput, LibraryBookUncheckedCreateInput>
    /**
     * In case the LibraryBook was found with the provided `where` argument, update it with this data.
     */
    update: XOR<LibraryBookUpdateInput, LibraryBookUncheckedUpdateInput>
  }

  /**
   * LibraryBook delete
   */
  export type LibraryBookDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
    /**
     * Filter which LibraryBook to delete.
     */
    where: LibraryBookWhereUniqueInput
  }

  /**
   * LibraryBook deleteMany
   */
  export type LibraryBookDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which LibraryBooks to delete
     */
    where?: LibraryBookWhereInput
    /**
     * Limit how many LibraryBooks to delete.
     */
    limit?: number
  }

  /**
   * LibraryBook.branch
   */
  export type LibraryBook$branchArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
  }

  /**
   * LibraryBook without action
   */
  export type LibraryBookDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryBook
     */
    select?: LibraryBookSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryBook
     */
    omit?: LibraryBookOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: LibraryBookInclude<ExtArgs> | null
  }


  /**
   * Model IdCard
   */

  export type AggregateIdCard = {
    _count: IdCardCountAggregateOutputType | null
    _avg: IdCardAvgAggregateOutputType | null
    _sum: IdCardSumAggregateOutputType | null
    _min: IdCardMinAggregateOutputType | null
    _max: IdCardMaxAggregateOutputType | null
  }

  export type IdCardAvgAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type IdCardSumAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type IdCardMinAggregateOutputType = {
    id: number | null
    id_card_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type IdCardMaxAggregateOutputType = {
    id: number | null
    id_card_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type IdCardCountAggregateOutputType = {
    id: number
    id_card_no: number
    issued_on: number
    expired_on: number
    fare_amont: number
    acknowledged_from_school: number
    acknowledged_from_school_by: number
    acknowledged_from_school_on: number
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number
    acknowledged_from_admin_on: number
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type IdCardAvgAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type IdCardSumAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type IdCardMinAggregateInputType = {
    id?: true
    id_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type IdCardMaxAggregateInputType = {
    id?: true
    id_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type IdCardCountAggregateInputType = {
    id?: true
    id_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type IdCardAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which IdCard to aggregate.
     */
    where?: IdCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of IdCards to fetch.
     */
    orderBy?: IdCardOrderByWithRelationInput | IdCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: IdCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` IdCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` IdCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned IdCards
    **/
    _count?: true | IdCardCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: IdCardAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: IdCardSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: IdCardMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: IdCardMaxAggregateInputType
  }

  export type GetIdCardAggregateType<T extends IdCardAggregateArgs> = {
        [P in keyof T & keyof AggregateIdCard]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateIdCard[P]>
      : GetScalarType<T[P], AggregateIdCard[P]>
  }




  export type IdCardGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: IdCardWhereInput
    orderBy?: IdCardOrderByWithAggregationInput | IdCardOrderByWithAggregationInput[]
    by: IdCardScalarFieldEnum[] | IdCardScalarFieldEnum
    having?: IdCardScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: IdCardCountAggregateInputType | true
    _avg?: IdCardAvgAggregateInputType
    _sum?: IdCardSumAggregateInputType
    _min?: IdCardMinAggregateInputType
    _max?: IdCardMaxAggregateInputType
  }

  export type IdCardGroupByOutputType = {
    id: number
    id_card_no: string
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal
    acknowledged_from_school: number
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: IdCardCountAggregateOutputType | null
    _avg: IdCardAvgAggregateOutputType | null
    _sum: IdCardSumAggregateOutputType | null
    _min: IdCardMinAggregateOutputType | null
    _max: IdCardMaxAggregateOutputType | null
  }

  type GetIdCardGroupByPayload<T extends IdCardGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<IdCardGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof IdCardGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], IdCardGroupByOutputType[P]>
            : GetScalarType<T[P], IdCardGroupByOutputType[P]>
        }
      >
    >


  export type IdCardSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    id_card_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["idCard"]>



  export type IdCardSelectScalar = {
    id?: boolean
    id_card_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type IdCardOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "id_card_no" | "issued_on" | "expired_on" | "fare_amont" | "acknowledged_from_school" | "acknowledged_from_school_by" | "acknowledged_from_school_on" | "acknowledged_from_admin" | "acknowledged_from_admin_by" | "acknowledged_from_admin_on" | "acknowledged_from_superadmin" | "acknowledged_from_superadmin_on" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["idCard"]>

  export type $IdCardPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "IdCard"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      id_card_no: string
      issued_on: Date | null
      expired_on: Date | null
      fare_amont: Prisma.Decimal
      acknowledged_from_school: number
      acknowledged_from_school_by: number | null
      acknowledged_from_school_on: Date | null
      acknowledged_from_admin: number
      acknowledged_from_admin_by: number | null
      acknowledged_from_admin_on: Date | null
      acknowledged_from_superadmin: number
      acknowledged_from_superadmin_on: Date | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["idCard"]>
    composites: {}
  }

  type IdCardGetPayload<S extends boolean | null | undefined | IdCardDefaultArgs> = $Result.GetResult<Prisma.$IdCardPayload, S>

  type IdCardCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<IdCardFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: IdCardCountAggregateInputType | true
    }

  export interface IdCardDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['IdCard'], meta: { name: 'IdCard' } }
    /**
     * Find zero or one IdCard that matches the filter.
     * @param {IdCardFindUniqueArgs} args - Arguments to find a IdCard
     * @example
     * // Get one IdCard
     * const idCard = await prisma.idCard.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends IdCardFindUniqueArgs>(args: SelectSubset<T, IdCardFindUniqueArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one IdCard that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {IdCardFindUniqueOrThrowArgs} args - Arguments to find a IdCard
     * @example
     * // Get one IdCard
     * const idCard = await prisma.idCard.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends IdCardFindUniqueOrThrowArgs>(args: SelectSubset<T, IdCardFindUniqueOrThrowArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first IdCard that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardFindFirstArgs} args - Arguments to find a IdCard
     * @example
     * // Get one IdCard
     * const idCard = await prisma.idCard.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends IdCardFindFirstArgs>(args?: SelectSubset<T, IdCardFindFirstArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first IdCard that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardFindFirstOrThrowArgs} args - Arguments to find a IdCard
     * @example
     * // Get one IdCard
     * const idCard = await prisma.idCard.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends IdCardFindFirstOrThrowArgs>(args?: SelectSubset<T, IdCardFindFirstOrThrowArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more IdCards that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all IdCards
     * const idCards = await prisma.idCard.findMany()
     * 
     * // Get first 10 IdCards
     * const idCards = await prisma.idCard.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const idCardWithIdOnly = await prisma.idCard.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends IdCardFindManyArgs>(args?: SelectSubset<T, IdCardFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a IdCard.
     * @param {IdCardCreateArgs} args - Arguments to create a IdCard.
     * @example
     * // Create one IdCard
     * const IdCard = await prisma.idCard.create({
     *   data: {
     *     // ... data to create a IdCard
     *   }
     * })
     * 
     */
    create<T extends IdCardCreateArgs>(args: SelectSubset<T, IdCardCreateArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many IdCards.
     * @param {IdCardCreateManyArgs} args - Arguments to create many IdCards.
     * @example
     * // Create many IdCards
     * const idCard = await prisma.idCard.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends IdCardCreateManyArgs>(args?: SelectSubset<T, IdCardCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a IdCard.
     * @param {IdCardDeleteArgs} args - Arguments to delete one IdCard.
     * @example
     * // Delete one IdCard
     * const IdCard = await prisma.idCard.delete({
     *   where: {
     *     // ... filter to delete one IdCard
     *   }
     * })
     * 
     */
    delete<T extends IdCardDeleteArgs>(args: SelectSubset<T, IdCardDeleteArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one IdCard.
     * @param {IdCardUpdateArgs} args - Arguments to update one IdCard.
     * @example
     * // Update one IdCard
     * const idCard = await prisma.idCard.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends IdCardUpdateArgs>(args: SelectSubset<T, IdCardUpdateArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more IdCards.
     * @param {IdCardDeleteManyArgs} args - Arguments to filter IdCards to delete.
     * @example
     * // Delete a few IdCards
     * const { count } = await prisma.idCard.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends IdCardDeleteManyArgs>(args?: SelectSubset<T, IdCardDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more IdCards.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many IdCards
     * const idCard = await prisma.idCard.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends IdCardUpdateManyArgs>(args: SelectSubset<T, IdCardUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one IdCard.
     * @param {IdCardUpsertArgs} args - Arguments to update or create a IdCard.
     * @example
     * // Update or create a IdCard
     * const idCard = await prisma.idCard.upsert({
     *   create: {
     *     // ... data to create a IdCard
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the IdCard we want to update
     *   }
     * })
     */
    upsert<T extends IdCardUpsertArgs>(args: SelectSubset<T, IdCardUpsertArgs<ExtArgs>>): Prisma__IdCardClient<$Result.GetResult<Prisma.$IdCardPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of IdCards.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardCountArgs} args - Arguments to filter IdCards to count.
     * @example
     * // Count the number of IdCards
     * const count = await prisma.idCard.count({
     *   where: {
     *     // ... the filter for the IdCards we want to count
     *   }
     * })
    **/
    count<T extends IdCardCountArgs>(
      args?: Subset<T, IdCardCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], IdCardCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a IdCard.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends IdCardAggregateArgs>(args: Subset<T, IdCardAggregateArgs>): Prisma.PrismaPromise<GetIdCardAggregateType<T>>

    /**
     * Group by IdCard.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {IdCardGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends IdCardGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: IdCardGroupByArgs['orderBy'] }
        : { orderBy?: IdCardGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, IdCardGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetIdCardGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the IdCard model
   */
  readonly fields: IdCardFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for IdCard.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__IdCardClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the IdCard model
   */
  interface IdCardFieldRefs {
    readonly id: FieldRef<"IdCard", 'Int'>
    readonly id_card_no: FieldRef<"IdCard", 'String'>
    readonly issued_on: FieldRef<"IdCard", 'DateTime'>
    readonly expired_on: FieldRef<"IdCard", 'DateTime'>
    readonly fare_amont: FieldRef<"IdCard", 'Decimal'>
    readonly acknowledged_from_school: FieldRef<"IdCard", 'Int'>
    readonly acknowledged_from_school_by: FieldRef<"IdCard", 'Int'>
    readonly acknowledged_from_school_on: FieldRef<"IdCard", 'DateTime'>
    readonly acknowledged_from_admin: FieldRef<"IdCard", 'Int'>
    readonly acknowledged_from_admin_by: FieldRef<"IdCard", 'Int'>
    readonly acknowledged_from_admin_on: FieldRef<"IdCard", 'DateTime'>
    readonly acknowledged_from_superadmin: FieldRef<"IdCard", 'Int'>
    readonly acknowledged_from_superadmin_on: FieldRef<"IdCard", 'DateTime'>
    readonly created_by: FieldRef<"IdCard", 'Int'>
    readonly created_at: FieldRef<"IdCard", 'DateTime'>
    readonly updated_at: FieldRef<"IdCard", 'DateTime'>
    readonly deleted_at: FieldRef<"IdCard", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * IdCard findUnique
   */
  export type IdCardFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter, which IdCard to fetch.
     */
    where: IdCardWhereUniqueInput
  }

  /**
   * IdCard findUniqueOrThrow
   */
  export type IdCardFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter, which IdCard to fetch.
     */
    where: IdCardWhereUniqueInput
  }

  /**
   * IdCard findFirst
   */
  export type IdCardFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter, which IdCard to fetch.
     */
    where?: IdCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of IdCards to fetch.
     */
    orderBy?: IdCardOrderByWithRelationInput | IdCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for IdCards.
     */
    cursor?: IdCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` IdCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` IdCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of IdCards.
     */
    distinct?: IdCardScalarFieldEnum | IdCardScalarFieldEnum[]
  }

  /**
   * IdCard findFirstOrThrow
   */
  export type IdCardFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter, which IdCard to fetch.
     */
    where?: IdCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of IdCards to fetch.
     */
    orderBy?: IdCardOrderByWithRelationInput | IdCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for IdCards.
     */
    cursor?: IdCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` IdCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` IdCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of IdCards.
     */
    distinct?: IdCardScalarFieldEnum | IdCardScalarFieldEnum[]
  }

  /**
   * IdCard findMany
   */
  export type IdCardFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter, which IdCards to fetch.
     */
    where?: IdCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of IdCards to fetch.
     */
    orderBy?: IdCardOrderByWithRelationInput | IdCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing IdCards.
     */
    cursor?: IdCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` IdCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` IdCards.
     */
    skip?: number
    distinct?: IdCardScalarFieldEnum | IdCardScalarFieldEnum[]
  }

  /**
   * IdCard create
   */
  export type IdCardCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * The data needed to create a IdCard.
     */
    data: XOR<IdCardCreateInput, IdCardUncheckedCreateInput>
  }

  /**
   * IdCard createMany
   */
  export type IdCardCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many IdCards.
     */
    data: IdCardCreateManyInput | IdCardCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * IdCard update
   */
  export type IdCardUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * The data needed to update a IdCard.
     */
    data: XOR<IdCardUpdateInput, IdCardUncheckedUpdateInput>
    /**
     * Choose, which IdCard to update.
     */
    where: IdCardWhereUniqueInput
  }

  /**
   * IdCard updateMany
   */
  export type IdCardUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update IdCards.
     */
    data: XOR<IdCardUpdateManyMutationInput, IdCardUncheckedUpdateManyInput>
    /**
     * Filter which IdCards to update
     */
    where?: IdCardWhereInput
    /**
     * Limit how many IdCards to update.
     */
    limit?: number
  }

  /**
   * IdCard upsert
   */
  export type IdCardUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * The filter to search for the IdCard to update in case it exists.
     */
    where: IdCardWhereUniqueInput
    /**
     * In case the IdCard found by the `where` argument doesn't exist, create a new IdCard with this data.
     */
    create: XOR<IdCardCreateInput, IdCardUncheckedCreateInput>
    /**
     * In case the IdCard was found with the provided `where` argument, update it with this data.
     */
    update: XOR<IdCardUpdateInput, IdCardUncheckedUpdateInput>
  }

  /**
   * IdCard delete
   */
  export type IdCardDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
    /**
     * Filter which IdCard to delete.
     */
    where: IdCardWhereUniqueInput
  }

  /**
   * IdCard deleteMany
   */
  export type IdCardDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which IdCards to delete
     */
    where?: IdCardWhereInput
    /**
     * Limit how many IdCards to delete.
     */
    limit?: number
  }

  /**
   * IdCard without action
   */
  export type IdCardDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the IdCard
     */
    select?: IdCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the IdCard
     */
    omit?: IdCardOmit<ExtArgs> | null
  }


  /**
   * Model LibraryCard
   */

  export type AggregateLibraryCard = {
    _count: LibraryCardCountAggregateOutputType | null
    _avg: LibraryCardAvgAggregateOutputType | null
    _sum: LibraryCardSumAggregateOutputType | null
    _min: LibraryCardMinAggregateOutputType | null
    _max: LibraryCardMaxAggregateOutputType | null
  }

  export type LibraryCardAvgAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type LibraryCardSumAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type LibraryCardMinAggregateOutputType = {
    id: number | null
    library_card_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type LibraryCardMaxAggregateOutputType = {
    id: number | null
    library_card_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type LibraryCardCountAggregateOutputType = {
    id: number
    library_card_no: number
    issued_on: number
    expired_on: number
    fare_amont: number
    acknowledged_from_school: number
    acknowledged_from_school_by: number
    acknowledged_from_school_on: number
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number
    acknowledged_from_admin_on: number
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type LibraryCardAvgAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type LibraryCardSumAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type LibraryCardMinAggregateInputType = {
    id?: true
    library_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type LibraryCardMaxAggregateInputType = {
    id?: true
    library_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type LibraryCardCountAggregateInputType = {
    id?: true
    library_card_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type LibraryCardAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which LibraryCard to aggregate.
     */
    where?: LibraryCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryCards to fetch.
     */
    orderBy?: LibraryCardOrderByWithRelationInput | LibraryCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: LibraryCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned LibraryCards
    **/
    _count?: true | LibraryCardCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: LibraryCardAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: LibraryCardSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: LibraryCardMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: LibraryCardMaxAggregateInputType
  }

  export type GetLibraryCardAggregateType<T extends LibraryCardAggregateArgs> = {
        [P in keyof T & keyof AggregateLibraryCard]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateLibraryCard[P]>
      : GetScalarType<T[P], AggregateLibraryCard[P]>
  }




  export type LibraryCardGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: LibraryCardWhereInput
    orderBy?: LibraryCardOrderByWithAggregationInput | LibraryCardOrderByWithAggregationInput[]
    by: LibraryCardScalarFieldEnum[] | LibraryCardScalarFieldEnum
    having?: LibraryCardScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: LibraryCardCountAggregateInputType | true
    _avg?: LibraryCardAvgAggregateInputType
    _sum?: LibraryCardSumAggregateInputType
    _min?: LibraryCardMinAggregateInputType
    _max?: LibraryCardMaxAggregateInputType
  }

  export type LibraryCardGroupByOutputType = {
    id: number
    library_card_no: string
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal
    acknowledged_from_school: number
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: LibraryCardCountAggregateOutputType | null
    _avg: LibraryCardAvgAggregateOutputType | null
    _sum: LibraryCardSumAggregateOutputType | null
    _min: LibraryCardMinAggregateOutputType | null
    _max: LibraryCardMaxAggregateOutputType | null
  }

  type GetLibraryCardGroupByPayload<T extends LibraryCardGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<LibraryCardGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof LibraryCardGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], LibraryCardGroupByOutputType[P]>
            : GetScalarType<T[P], LibraryCardGroupByOutputType[P]>
        }
      >
    >


  export type LibraryCardSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    library_card_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["libraryCard"]>



  export type LibraryCardSelectScalar = {
    id?: boolean
    library_card_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type LibraryCardOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "library_card_no" | "issued_on" | "expired_on" | "fare_amont" | "acknowledged_from_school" | "acknowledged_from_school_by" | "acknowledged_from_school_on" | "acknowledged_from_admin" | "acknowledged_from_admin_by" | "acknowledged_from_admin_on" | "acknowledged_from_superadmin" | "acknowledged_from_superadmin_on" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["libraryCard"]>

  export type $LibraryCardPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "LibraryCard"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      library_card_no: string
      issued_on: Date | null
      expired_on: Date | null
      fare_amont: Prisma.Decimal
      acknowledged_from_school: number
      acknowledged_from_school_by: number | null
      acknowledged_from_school_on: Date | null
      acknowledged_from_admin: number
      acknowledged_from_admin_by: number | null
      acknowledged_from_admin_on: Date | null
      acknowledged_from_superadmin: number
      acknowledged_from_superadmin_on: Date | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["libraryCard"]>
    composites: {}
  }

  type LibraryCardGetPayload<S extends boolean | null | undefined | LibraryCardDefaultArgs> = $Result.GetResult<Prisma.$LibraryCardPayload, S>

  type LibraryCardCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<LibraryCardFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: LibraryCardCountAggregateInputType | true
    }

  export interface LibraryCardDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['LibraryCard'], meta: { name: 'LibraryCard' } }
    /**
     * Find zero or one LibraryCard that matches the filter.
     * @param {LibraryCardFindUniqueArgs} args - Arguments to find a LibraryCard
     * @example
     * // Get one LibraryCard
     * const libraryCard = await prisma.libraryCard.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends LibraryCardFindUniqueArgs>(args: SelectSubset<T, LibraryCardFindUniqueArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one LibraryCard that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {LibraryCardFindUniqueOrThrowArgs} args - Arguments to find a LibraryCard
     * @example
     * // Get one LibraryCard
     * const libraryCard = await prisma.libraryCard.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends LibraryCardFindUniqueOrThrowArgs>(args: SelectSubset<T, LibraryCardFindUniqueOrThrowArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first LibraryCard that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardFindFirstArgs} args - Arguments to find a LibraryCard
     * @example
     * // Get one LibraryCard
     * const libraryCard = await prisma.libraryCard.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends LibraryCardFindFirstArgs>(args?: SelectSubset<T, LibraryCardFindFirstArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first LibraryCard that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardFindFirstOrThrowArgs} args - Arguments to find a LibraryCard
     * @example
     * // Get one LibraryCard
     * const libraryCard = await prisma.libraryCard.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends LibraryCardFindFirstOrThrowArgs>(args?: SelectSubset<T, LibraryCardFindFirstOrThrowArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more LibraryCards that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all LibraryCards
     * const libraryCards = await prisma.libraryCard.findMany()
     * 
     * // Get first 10 LibraryCards
     * const libraryCards = await prisma.libraryCard.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const libraryCardWithIdOnly = await prisma.libraryCard.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends LibraryCardFindManyArgs>(args?: SelectSubset<T, LibraryCardFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a LibraryCard.
     * @param {LibraryCardCreateArgs} args - Arguments to create a LibraryCard.
     * @example
     * // Create one LibraryCard
     * const LibraryCard = await prisma.libraryCard.create({
     *   data: {
     *     // ... data to create a LibraryCard
     *   }
     * })
     * 
     */
    create<T extends LibraryCardCreateArgs>(args: SelectSubset<T, LibraryCardCreateArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many LibraryCards.
     * @param {LibraryCardCreateManyArgs} args - Arguments to create many LibraryCards.
     * @example
     * // Create many LibraryCards
     * const libraryCard = await prisma.libraryCard.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends LibraryCardCreateManyArgs>(args?: SelectSubset<T, LibraryCardCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a LibraryCard.
     * @param {LibraryCardDeleteArgs} args - Arguments to delete one LibraryCard.
     * @example
     * // Delete one LibraryCard
     * const LibraryCard = await prisma.libraryCard.delete({
     *   where: {
     *     // ... filter to delete one LibraryCard
     *   }
     * })
     * 
     */
    delete<T extends LibraryCardDeleteArgs>(args: SelectSubset<T, LibraryCardDeleteArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one LibraryCard.
     * @param {LibraryCardUpdateArgs} args - Arguments to update one LibraryCard.
     * @example
     * // Update one LibraryCard
     * const libraryCard = await prisma.libraryCard.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends LibraryCardUpdateArgs>(args: SelectSubset<T, LibraryCardUpdateArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more LibraryCards.
     * @param {LibraryCardDeleteManyArgs} args - Arguments to filter LibraryCards to delete.
     * @example
     * // Delete a few LibraryCards
     * const { count } = await prisma.libraryCard.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends LibraryCardDeleteManyArgs>(args?: SelectSubset<T, LibraryCardDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more LibraryCards.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many LibraryCards
     * const libraryCard = await prisma.libraryCard.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends LibraryCardUpdateManyArgs>(args: SelectSubset<T, LibraryCardUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one LibraryCard.
     * @param {LibraryCardUpsertArgs} args - Arguments to update or create a LibraryCard.
     * @example
     * // Update or create a LibraryCard
     * const libraryCard = await prisma.libraryCard.upsert({
     *   create: {
     *     // ... data to create a LibraryCard
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the LibraryCard we want to update
     *   }
     * })
     */
    upsert<T extends LibraryCardUpsertArgs>(args: SelectSubset<T, LibraryCardUpsertArgs<ExtArgs>>): Prisma__LibraryCardClient<$Result.GetResult<Prisma.$LibraryCardPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of LibraryCards.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardCountArgs} args - Arguments to filter LibraryCards to count.
     * @example
     * // Count the number of LibraryCards
     * const count = await prisma.libraryCard.count({
     *   where: {
     *     // ... the filter for the LibraryCards we want to count
     *   }
     * })
    **/
    count<T extends LibraryCardCountArgs>(
      args?: Subset<T, LibraryCardCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], LibraryCardCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a LibraryCard.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends LibraryCardAggregateArgs>(args: Subset<T, LibraryCardAggregateArgs>): Prisma.PrismaPromise<GetLibraryCardAggregateType<T>>

    /**
     * Group by LibraryCard.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {LibraryCardGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends LibraryCardGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: LibraryCardGroupByArgs['orderBy'] }
        : { orderBy?: LibraryCardGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, LibraryCardGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetLibraryCardGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the LibraryCard model
   */
  readonly fields: LibraryCardFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for LibraryCard.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__LibraryCardClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the LibraryCard model
   */
  interface LibraryCardFieldRefs {
    readonly id: FieldRef<"LibraryCard", 'Int'>
    readonly library_card_no: FieldRef<"LibraryCard", 'String'>
    readonly issued_on: FieldRef<"LibraryCard", 'DateTime'>
    readonly expired_on: FieldRef<"LibraryCard", 'DateTime'>
    readonly fare_amont: FieldRef<"LibraryCard", 'Decimal'>
    readonly acknowledged_from_school: FieldRef<"LibraryCard", 'Int'>
    readonly acknowledged_from_school_by: FieldRef<"LibraryCard", 'Int'>
    readonly acknowledged_from_school_on: FieldRef<"LibraryCard", 'DateTime'>
    readonly acknowledged_from_admin: FieldRef<"LibraryCard", 'Int'>
    readonly acknowledged_from_admin_by: FieldRef<"LibraryCard", 'Int'>
    readonly acknowledged_from_admin_on: FieldRef<"LibraryCard", 'DateTime'>
    readonly acknowledged_from_superadmin: FieldRef<"LibraryCard", 'Int'>
    readonly acknowledged_from_superadmin_on: FieldRef<"LibraryCard", 'DateTime'>
    readonly created_by: FieldRef<"LibraryCard", 'Int'>
    readonly created_at: FieldRef<"LibraryCard", 'DateTime'>
    readonly updated_at: FieldRef<"LibraryCard", 'DateTime'>
    readonly deleted_at: FieldRef<"LibraryCard", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * LibraryCard findUnique
   */
  export type LibraryCardFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter, which LibraryCard to fetch.
     */
    where: LibraryCardWhereUniqueInput
  }

  /**
   * LibraryCard findUniqueOrThrow
   */
  export type LibraryCardFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter, which LibraryCard to fetch.
     */
    where: LibraryCardWhereUniqueInput
  }

  /**
   * LibraryCard findFirst
   */
  export type LibraryCardFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter, which LibraryCard to fetch.
     */
    where?: LibraryCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryCards to fetch.
     */
    orderBy?: LibraryCardOrderByWithRelationInput | LibraryCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for LibraryCards.
     */
    cursor?: LibraryCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of LibraryCards.
     */
    distinct?: LibraryCardScalarFieldEnum | LibraryCardScalarFieldEnum[]
  }

  /**
   * LibraryCard findFirstOrThrow
   */
  export type LibraryCardFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter, which LibraryCard to fetch.
     */
    where?: LibraryCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryCards to fetch.
     */
    orderBy?: LibraryCardOrderByWithRelationInput | LibraryCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for LibraryCards.
     */
    cursor?: LibraryCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryCards.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of LibraryCards.
     */
    distinct?: LibraryCardScalarFieldEnum | LibraryCardScalarFieldEnum[]
  }

  /**
   * LibraryCard findMany
   */
  export type LibraryCardFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter, which LibraryCards to fetch.
     */
    where?: LibraryCardWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of LibraryCards to fetch.
     */
    orderBy?: LibraryCardOrderByWithRelationInput | LibraryCardOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing LibraryCards.
     */
    cursor?: LibraryCardWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` LibraryCards from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` LibraryCards.
     */
    skip?: number
    distinct?: LibraryCardScalarFieldEnum | LibraryCardScalarFieldEnum[]
  }

  /**
   * LibraryCard create
   */
  export type LibraryCardCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * The data needed to create a LibraryCard.
     */
    data: XOR<LibraryCardCreateInput, LibraryCardUncheckedCreateInput>
  }

  /**
   * LibraryCard createMany
   */
  export type LibraryCardCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many LibraryCards.
     */
    data: LibraryCardCreateManyInput | LibraryCardCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * LibraryCard update
   */
  export type LibraryCardUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * The data needed to update a LibraryCard.
     */
    data: XOR<LibraryCardUpdateInput, LibraryCardUncheckedUpdateInput>
    /**
     * Choose, which LibraryCard to update.
     */
    where: LibraryCardWhereUniqueInput
  }

  /**
   * LibraryCard updateMany
   */
  export type LibraryCardUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update LibraryCards.
     */
    data: XOR<LibraryCardUpdateManyMutationInput, LibraryCardUncheckedUpdateManyInput>
    /**
     * Filter which LibraryCards to update
     */
    where?: LibraryCardWhereInput
    /**
     * Limit how many LibraryCards to update.
     */
    limit?: number
  }

  /**
   * LibraryCard upsert
   */
  export type LibraryCardUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * The filter to search for the LibraryCard to update in case it exists.
     */
    where: LibraryCardWhereUniqueInput
    /**
     * In case the LibraryCard found by the `where` argument doesn't exist, create a new LibraryCard with this data.
     */
    create: XOR<LibraryCardCreateInput, LibraryCardUncheckedCreateInput>
    /**
     * In case the LibraryCard was found with the provided `where` argument, update it with this data.
     */
    update: XOR<LibraryCardUpdateInput, LibraryCardUncheckedUpdateInput>
  }

  /**
   * LibraryCard delete
   */
  export type LibraryCardDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
    /**
     * Filter which LibraryCard to delete.
     */
    where: LibraryCardWhereUniqueInput
  }

  /**
   * LibraryCard deleteMany
   */
  export type LibraryCardDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which LibraryCards to delete
     */
    where?: LibraryCardWhereInput
    /**
     * Limit how many LibraryCards to delete.
     */
    limit?: number
  }

  /**
   * LibraryCard without action
   */
  export type LibraryCardDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the LibraryCard
     */
    select?: LibraryCardSelect<ExtArgs> | null
    /**
     * Omit specific fields from the LibraryCard
     */
    omit?: LibraryCardOmit<ExtArgs> | null
  }


  /**
   * Model ResultSerialNumbers
   */

  export type AggregateResultSerialNumbers = {
    _count: ResultSerialNumbersCountAggregateOutputType | null
    _avg: ResultSerialNumbersAvgAggregateOutputType | null
    _sum: ResultSerialNumbersSumAggregateOutputType | null
    _min: ResultSerialNumbersMinAggregateOutputType | null
    _max: ResultSerialNumbersMaxAggregateOutputType | null
  }

  export type ResultSerialNumbersAvgAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type ResultSerialNumbersSumAggregateOutputType = {
    id: number | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_superadmin: number | null
    created_by: number | null
  }

  export type ResultSerialNumbersMinAggregateOutputType = {
    id: number | null
    serial_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ResultSerialNumbersMaxAggregateOutputType = {
    id: number | null
    serial_no: string | null
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal | null
    acknowledged_from_school: number | null
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number | null
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number | null
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ResultSerialNumbersCountAggregateOutputType = {
    id: number
    serial_no: number
    issued_on: number
    expired_on: number
    fare_amont: number
    acknowledged_from_school: number
    acknowledged_from_school_by: number
    acknowledged_from_school_on: number
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number
    acknowledged_from_admin_on: number
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ResultSerialNumbersAvgAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type ResultSerialNumbersSumAggregateInputType = {
    id?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_superadmin?: true
    created_by?: true
  }

  export type ResultSerialNumbersMinAggregateInputType = {
    id?: true
    serial_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ResultSerialNumbersMaxAggregateInputType = {
    id?: true
    serial_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ResultSerialNumbersCountAggregateInputType = {
    id?: true
    serial_no?: true
    issued_on?: true
    expired_on?: true
    fare_amont?: true
    acknowledged_from_school?: true
    acknowledged_from_school_by?: true
    acknowledged_from_school_on?: true
    acknowledged_from_admin?: true
    acknowledged_from_admin_by?: true
    acknowledged_from_admin_on?: true
    acknowledged_from_superadmin?: true
    acknowledged_from_superadmin_on?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ResultSerialNumbersAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ResultSerialNumbers to aggregate.
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ResultSerialNumbers to fetch.
     */
    orderBy?: ResultSerialNumbersOrderByWithRelationInput | ResultSerialNumbersOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ResultSerialNumbersWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ResultSerialNumbers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ResultSerialNumbers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ResultSerialNumbers
    **/
    _count?: true | ResultSerialNumbersCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ResultSerialNumbersAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ResultSerialNumbersSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ResultSerialNumbersMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ResultSerialNumbersMaxAggregateInputType
  }

  export type GetResultSerialNumbersAggregateType<T extends ResultSerialNumbersAggregateArgs> = {
        [P in keyof T & keyof AggregateResultSerialNumbers]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateResultSerialNumbers[P]>
      : GetScalarType<T[P], AggregateResultSerialNumbers[P]>
  }




  export type ResultSerialNumbersGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ResultSerialNumbersWhereInput
    orderBy?: ResultSerialNumbersOrderByWithAggregationInput | ResultSerialNumbersOrderByWithAggregationInput[]
    by: ResultSerialNumbersScalarFieldEnum[] | ResultSerialNumbersScalarFieldEnum
    having?: ResultSerialNumbersScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ResultSerialNumbersCountAggregateInputType | true
    _avg?: ResultSerialNumbersAvgAggregateInputType
    _sum?: ResultSerialNumbersSumAggregateInputType
    _min?: ResultSerialNumbersMinAggregateInputType
    _max?: ResultSerialNumbersMaxAggregateInputType
  }

  export type ResultSerialNumbersGroupByOutputType = {
    id: number
    serial_no: string
    issued_on: Date | null
    expired_on: Date | null
    fare_amont: Decimal
    acknowledged_from_school: number
    acknowledged_from_school_by: number | null
    acknowledged_from_school_on: Date | null
    acknowledged_from_admin: number
    acknowledged_from_admin_by: number | null
    acknowledged_from_admin_on: Date | null
    acknowledged_from_superadmin: number
    acknowledged_from_superadmin_on: Date | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ResultSerialNumbersCountAggregateOutputType | null
    _avg: ResultSerialNumbersAvgAggregateOutputType | null
    _sum: ResultSerialNumbersSumAggregateOutputType | null
    _min: ResultSerialNumbersMinAggregateOutputType | null
    _max: ResultSerialNumbersMaxAggregateOutputType | null
  }

  type GetResultSerialNumbersGroupByPayload<T extends ResultSerialNumbersGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ResultSerialNumbersGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ResultSerialNumbersGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ResultSerialNumbersGroupByOutputType[P]>
            : GetScalarType<T[P], ResultSerialNumbersGroupByOutputType[P]>
        }
      >
    >


  export type ResultSerialNumbersSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    serial_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["resultSerialNumbers"]>



  export type ResultSerialNumbersSelectScalar = {
    id?: boolean
    serial_no?: boolean
    issued_on?: boolean
    expired_on?: boolean
    fare_amont?: boolean
    acknowledged_from_school?: boolean
    acknowledged_from_school_by?: boolean
    acknowledged_from_school_on?: boolean
    acknowledged_from_admin?: boolean
    acknowledged_from_admin_by?: boolean
    acknowledged_from_admin_on?: boolean
    acknowledged_from_superadmin?: boolean
    acknowledged_from_superadmin_on?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ResultSerialNumbersOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "serial_no" | "issued_on" | "expired_on" | "fare_amont" | "acknowledged_from_school" | "acknowledged_from_school_by" | "acknowledged_from_school_on" | "acknowledged_from_admin" | "acknowledged_from_admin_by" | "acknowledged_from_admin_on" | "acknowledged_from_superadmin" | "acknowledged_from_superadmin_on" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["resultSerialNumbers"]>

  export type $ResultSerialNumbersPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ResultSerialNumbers"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      serial_no: string
      issued_on: Date | null
      expired_on: Date | null
      fare_amont: Prisma.Decimal
      acknowledged_from_school: number
      acknowledged_from_school_by: number | null
      acknowledged_from_school_on: Date | null
      acknowledged_from_admin: number
      acknowledged_from_admin_by: number | null
      acknowledged_from_admin_on: Date | null
      acknowledged_from_superadmin: number
      acknowledged_from_superadmin_on: Date | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["resultSerialNumbers"]>
    composites: {}
  }

  type ResultSerialNumbersGetPayload<S extends boolean | null | undefined | ResultSerialNumbersDefaultArgs> = $Result.GetResult<Prisma.$ResultSerialNumbersPayload, S>

  type ResultSerialNumbersCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ResultSerialNumbersFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ResultSerialNumbersCountAggregateInputType | true
    }

  export interface ResultSerialNumbersDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ResultSerialNumbers'], meta: { name: 'ResultSerialNumbers' } }
    /**
     * Find zero or one ResultSerialNumbers that matches the filter.
     * @param {ResultSerialNumbersFindUniqueArgs} args - Arguments to find a ResultSerialNumbers
     * @example
     * // Get one ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ResultSerialNumbersFindUniqueArgs>(args: SelectSubset<T, ResultSerialNumbersFindUniqueArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ResultSerialNumbers that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ResultSerialNumbersFindUniqueOrThrowArgs} args - Arguments to find a ResultSerialNumbers
     * @example
     * // Get one ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ResultSerialNumbersFindUniqueOrThrowArgs>(args: SelectSubset<T, ResultSerialNumbersFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ResultSerialNumbers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersFindFirstArgs} args - Arguments to find a ResultSerialNumbers
     * @example
     * // Get one ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ResultSerialNumbersFindFirstArgs>(args?: SelectSubset<T, ResultSerialNumbersFindFirstArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ResultSerialNumbers that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersFindFirstOrThrowArgs} args - Arguments to find a ResultSerialNumbers
     * @example
     * // Get one ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ResultSerialNumbersFindFirstOrThrowArgs>(args?: SelectSubset<T, ResultSerialNumbersFindFirstOrThrowArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ResultSerialNumbers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findMany()
     * 
     * // Get first 10 ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const resultSerialNumbersWithIdOnly = await prisma.resultSerialNumbers.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ResultSerialNumbersFindManyArgs>(args?: SelectSubset<T, ResultSerialNumbersFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ResultSerialNumbers.
     * @param {ResultSerialNumbersCreateArgs} args - Arguments to create a ResultSerialNumbers.
     * @example
     * // Create one ResultSerialNumbers
     * const ResultSerialNumbers = await prisma.resultSerialNumbers.create({
     *   data: {
     *     // ... data to create a ResultSerialNumbers
     *   }
     * })
     * 
     */
    create<T extends ResultSerialNumbersCreateArgs>(args: SelectSubset<T, ResultSerialNumbersCreateArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ResultSerialNumbers.
     * @param {ResultSerialNumbersCreateManyArgs} args - Arguments to create many ResultSerialNumbers.
     * @example
     * // Create many ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ResultSerialNumbersCreateManyArgs>(args?: SelectSubset<T, ResultSerialNumbersCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ResultSerialNumbers.
     * @param {ResultSerialNumbersDeleteArgs} args - Arguments to delete one ResultSerialNumbers.
     * @example
     * // Delete one ResultSerialNumbers
     * const ResultSerialNumbers = await prisma.resultSerialNumbers.delete({
     *   where: {
     *     // ... filter to delete one ResultSerialNumbers
     *   }
     * })
     * 
     */
    delete<T extends ResultSerialNumbersDeleteArgs>(args: SelectSubset<T, ResultSerialNumbersDeleteArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ResultSerialNumbers.
     * @param {ResultSerialNumbersUpdateArgs} args - Arguments to update one ResultSerialNumbers.
     * @example
     * // Update one ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ResultSerialNumbersUpdateArgs>(args: SelectSubset<T, ResultSerialNumbersUpdateArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ResultSerialNumbers.
     * @param {ResultSerialNumbersDeleteManyArgs} args - Arguments to filter ResultSerialNumbers to delete.
     * @example
     * // Delete a few ResultSerialNumbers
     * const { count } = await prisma.resultSerialNumbers.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ResultSerialNumbersDeleteManyArgs>(args?: SelectSubset<T, ResultSerialNumbersDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ResultSerialNumbers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ResultSerialNumbersUpdateManyArgs>(args: SelectSubset<T, ResultSerialNumbersUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ResultSerialNumbers.
     * @param {ResultSerialNumbersUpsertArgs} args - Arguments to update or create a ResultSerialNumbers.
     * @example
     * // Update or create a ResultSerialNumbers
     * const resultSerialNumbers = await prisma.resultSerialNumbers.upsert({
     *   create: {
     *     // ... data to create a ResultSerialNumbers
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ResultSerialNumbers we want to update
     *   }
     * })
     */
    upsert<T extends ResultSerialNumbersUpsertArgs>(args: SelectSubset<T, ResultSerialNumbersUpsertArgs<ExtArgs>>): Prisma__ResultSerialNumbersClient<$Result.GetResult<Prisma.$ResultSerialNumbersPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ResultSerialNumbers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersCountArgs} args - Arguments to filter ResultSerialNumbers to count.
     * @example
     * // Count the number of ResultSerialNumbers
     * const count = await prisma.resultSerialNumbers.count({
     *   where: {
     *     // ... the filter for the ResultSerialNumbers we want to count
     *   }
     * })
    **/
    count<T extends ResultSerialNumbersCountArgs>(
      args?: Subset<T, ResultSerialNumbersCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ResultSerialNumbersCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ResultSerialNumbers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ResultSerialNumbersAggregateArgs>(args: Subset<T, ResultSerialNumbersAggregateArgs>): Prisma.PrismaPromise<GetResultSerialNumbersAggregateType<T>>

    /**
     * Group by ResultSerialNumbers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ResultSerialNumbersGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ResultSerialNumbersGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ResultSerialNumbersGroupByArgs['orderBy'] }
        : { orderBy?: ResultSerialNumbersGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ResultSerialNumbersGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetResultSerialNumbersGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ResultSerialNumbers model
   */
  readonly fields: ResultSerialNumbersFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ResultSerialNumbers.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ResultSerialNumbersClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ResultSerialNumbers model
   */
  interface ResultSerialNumbersFieldRefs {
    readonly id: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly serial_no: FieldRef<"ResultSerialNumbers", 'String'>
    readonly issued_on: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly expired_on: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly fare_amont: FieldRef<"ResultSerialNumbers", 'Decimal'>
    readonly acknowledged_from_school: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly acknowledged_from_school_by: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly acknowledged_from_school_on: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly acknowledged_from_admin: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly acknowledged_from_admin_by: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly acknowledged_from_admin_on: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly acknowledged_from_superadmin: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly acknowledged_from_superadmin_on: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly created_by: FieldRef<"ResultSerialNumbers", 'Int'>
    readonly created_at: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly updated_at: FieldRef<"ResultSerialNumbers", 'DateTime'>
    readonly deleted_at: FieldRef<"ResultSerialNumbers", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ResultSerialNumbers findUnique
   */
  export type ResultSerialNumbersFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter, which ResultSerialNumbers to fetch.
     */
    where: ResultSerialNumbersWhereUniqueInput
  }

  /**
   * ResultSerialNumbers findUniqueOrThrow
   */
  export type ResultSerialNumbersFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter, which ResultSerialNumbers to fetch.
     */
    where: ResultSerialNumbersWhereUniqueInput
  }

  /**
   * ResultSerialNumbers findFirst
   */
  export type ResultSerialNumbersFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter, which ResultSerialNumbers to fetch.
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ResultSerialNumbers to fetch.
     */
    orderBy?: ResultSerialNumbersOrderByWithRelationInput | ResultSerialNumbersOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ResultSerialNumbers.
     */
    cursor?: ResultSerialNumbersWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ResultSerialNumbers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ResultSerialNumbers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ResultSerialNumbers.
     */
    distinct?: ResultSerialNumbersScalarFieldEnum | ResultSerialNumbersScalarFieldEnum[]
  }

  /**
   * ResultSerialNumbers findFirstOrThrow
   */
  export type ResultSerialNumbersFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter, which ResultSerialNumbers to fetch.
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ResultSerialNumbers to fetch.
     */
    orderBy?: ResultSerialNumbersOrderByWithRelationInput | ResultSerialNumbersOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ResultSerialNumbers.
     */
    cursor?: ResultSerialNumbersWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ResultSerialNumbers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ResultSerialNumbers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ResultSerialNumbers.
     */
    distinct?: ResultSerialNumbersScalarFieldEnum | ResultSerialNumbersScalarFieldEnum[]
  }

  /**
   * ResultSerialNumbers findMany
   */
  export type ResultSerialNumbersFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter, which ResultSerialNumbers to fetch.
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ResultSerialNumbers to fetch.
     */
    orderBy?: ResultSerialNumbersOrderByWithRelationInput | ResultSerialNumbersOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ResultSerialNumbers.
     */
    cursor?: ResultSerialNumbersWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ResultSerialNumbers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ResultSerialNumbers.
     */
    skip?: number
    distinct?: ResultSerialNumbersScalarFieldEnum | ResultSerialNumbersScalarFieldEnum[]
  }

  /**
   * ResultSerialNumbers create
   */
  export type ResultSerialNumbersCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * The data needed to create a ResultSerialNumbers.
     */
    data: XOR<ResultSerialNumbersCreateInput, ResultSerialNumbersUncheckedCreateInput>
  }

  /**
   * ResultSerialNumbers createMany
   */
  export type ResultSerialNumbersCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ResultSerialNumbers.
     */
    data: ResultSerialNumbersCreateManyInput | ResultSerialNumbersCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ResultSerialNumbers update
   */
  export type ResultSerialNumbersUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * The data needed to update a ResultSerialNumbers.
     */
    data: XOR<ResultSerialNumbersUpdateInput, ResultSerialNumbersUncheckedUpdateInput>
    /**
     * Choose, which ResultSerialNumbers to update.
     */
    where: ResultSerialNumbersWhereUniqueInput
  }

  /**
   * ResultSerialNumbers updateMany
   */
  export type ResultSerialNumbersUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ResultSerialNumbers.
     */
    data: XOR<ResultSerialNumbersUpdateManyMutationInput, ResultSerialNumbersUncheckedUpdateManyInput>
    /**
     * Filter which ResultSerialNumbers to update
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * Limit how many ResultSerialNumbers to update.
     */
    limit?: number
  }

  /**
   * ResultSerialNumbers upsert
   */
  export type ResultSerialNumbersUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * The filter to search for the ResultSerialNumbers to update in case it exists.
     */
    where: ResultSerialNumbersWhereUniqueInput
    /**
     * In case the ResultSerialNumbers found by the `where` argument doesn't exist, create a new ResultSerialNumbers with this data.
     */
    create: XOR<ResultSerialNumbersCreateInput, ResultSerialNumbersUncheckedCreateInput>
    /**
     * In case the ResultSerialNumbers was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ResultSerialNumbersUpdateInput, ResultSerialNumbersUncheckedUpdateInput>
  }

  /**
   * ResultSerialNumbers delete
   */
  export type ResultSerialNumbersDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
    /**
     * Filter which ResultSerialNumbers to delete.
     */
    where: ResultSerialNumbersWhereUniqueInput
  }

  /**
   * ResultSerialNumbers deleteMany
   */
  export type ResultSerialNumbersDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ResultSerialNumbers to delete
     */
    where?: ResultSerialNumbersWhereInput
    /**
     * Limit how many ResultSerialNumbers to delete.
     */
    limit?: number
  }

  /**
   * ResultSerialNumbers without action
   */
  export type ResultSerialNumbersDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ResultSerialNumbers
     */
    select?: ResultSerialNumbersSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ResultSerialNumbers
     */
    omit?: ResultSerialNumbersOmit<ExtArgs> | null
  }


  /**
   * Model SessionTerm
   */

  export type AggregateSessionTerm = {
    _count: SessionTermCountAggregateOutputType | null
    _avg: SessionTermAvgAggregateOutputType | null
    _sum: SessionTermSumAggregateOutputType | null
    _min: SessionTermMinAggregateOutputType | null
    _max: SessionTermMaxAggregateOutputType | null
  }

  export type SessionTermAvgAggregateOutputType = {
    id: number | null
    session_id: number | null
    term_id: number | null
    session_term_visible: number | null
    session_term_locked: number | null
    session_term_current: number | null
    session_term_clone_details: number | null
    session_term_clone_details_from: number | null
    session_term_clone_details_from_id: number | null
    session_term_clone_classinstances: number | null
    session_terms_clone_subjects: number | null
    session_terms_clone_scoresetup: number | null
    created_by: number | null
  }

  export type SessionTermSumAggregateOutputType = {
    id: number | null
    session_id: number | null
    term_id: number | null
    session_term_visible: number | null
    session_term_locked: number | null
    session_term_current: number | null
    session_term_clone_details: number | null
    session_term_clone_details_from: number | null
    session_term_clone_details_from_id: number | null
    session_term_clone_classinstances: number | null
    session_terms_clone_subjects: number | null
    session_terms_clone_scoresetup: number | null
    created_by: number | null
  }

  export type SessionTermMinAggregateOutputType = {
    id: number | null
    session_id: number | null
    term_id: number | null
    session_term_name: string | null
    session_term_visible: number | null
    session_term_locked: number | null
    session_term_current: number | null
    session_term_clone_details: number | null
    session_term_clone_details_from: number | null
    session_term_clone_details_from_id: number | null
    session_term_clone_classinstances: number | null
    session_terms_clone_subjects: number | null
    session_terms_clone_scoresetup: number | null
    session_term_start: Date | null
    session_term_end: Date | null
    session_term_next_begin: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionTermMaxAggregateOutputType = {
    id: number | null
    session_id: number | null
    term_id: number | null
    session_term_name: string | null
    session_term_visible: number | null
    session_term_locked: number | null
    session_term_current: number | null
    session_term_clone_details: number | null
    session_term_clone_details_from: number | null
    session_term_clone_details_from_id: number | null
    session_term_clone_classinstances: number | null
    session_terms_clone_subjects: number | null
    session_terms_clone_scoresetup: number | null
    session_term_start: Date | null
    session_term_end: Date | null
    session_term_next_begin: Date | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionTermCountAggregateOutputType = {
    id: number
    session_id: number
    term_id: number
    session_term_name: number
    session_term_visible: number
    session_term_locked: number
    session_term_current: number
    session_term_clone_details: number
    session_term_clone_details_from: number
    session_term_clone_details_from_id: number
    session_term_clone_classinstances: number
    session_terms_clone_subjects: number
    session_terms_clone_scoresetup: number
    session_term_start: number
    session_term_end: number
    session_term_next_begin: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SessionTermAvgAggregateInputType = {
    id?: true
    session_id?: true
    term_id?: true
    session_term_visible?: true
    session_term_locked?: true
    session_term_current?: true
    session_term_clone_details?: true
    session_term_clone_details_from?: true
    session_term_clone_details_from_id?: true
    session_term_clone_classinstances?: true
    session_terms_clone_subjects?: true
    session_terms_clone_scoresetup?: true
    created_by?: true
  }

  export type SessionTermSumAggregateInputType = {
    id?: true
    session_id?: true
    term_id?: true
    session_term_visible?: true
    session_term_locked?: true
    session_term_current?: true
    session_term_clone_details?: true
    session_term_clone_details_from?: true
    session_term_clone_details_from_id?: true
    session_term_clone_classinstances?: true
    session_terms_clone_subjects?: true
    session_terms_clone_scoresetup?: true
    created_by?: true
  }

  export type SessionTermMinAggregateInputType = {
    id?: true
    session_id?: true
    term_id?: true
    session_term_name?: true
    session_term_visible?: true
    session_term_locked?: true
    session_term_current?: true
    session_term_clone_details?: true
    session_term_clone_details_from?: true
    session_term_clone_details_from_id?: true
    session_term_clone_classinstances?: true
    session_terms_clone_subjects?: true
    session_terms_clone_scoresetup?: true
    session_term_start?: true
    session_term_end?: true
    session_term_next_begin?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionTermMaxAggregateInputType = {
    id?: true
    session_id?: true
    term_id?: true
    session_term_name?: true
    session_term_visible?: true
    session_term_locked?: true
    session_term_current?: true
    session_term_clone_details?: true
    session_term_clone_details_from?: true
    session_term_clone_details_from_id?: true
    session_term_clone_classinstances?: true
    session_terms_clone_subjects?: true
    session_terms_clone_scoresetup?: true
    session_term_start?: true
    session_term_end?: true
    session_term_next_begin?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionTermCountAggregateInputType = {
    id?: true
    session_id?: true
    term_id?: true
    session_term_name?: true
    session_term_visible?: true
    session_term_locked?: true
    session_term_current?: true
    session_term_clone_details?: true
    session_term_clone_details_from?: true
    session_term_clone_details_from_id?: true
    session_term_clone_classinstances?: true
    session_terms_clone_subjects?: true
    session_terms_clone_scoresetup?: true
    session_term_start?: true
    session_term_end?: true
    session_term_next_begin?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SessionTermAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionTerm to aggregate.
     */
    where?: SessionTermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionTerms to fetch.
     */
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionTermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionTerms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionTerms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SessionTerms
    **/
    _count?: true | SessionTermCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionTermAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionTermSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionTermMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionTermMaxAggregateInputType
  }

  export type GetSessionTermAggregateType<T extends SessionTermAggregateArgs> = {
        [P in keyof T & keyof AggregateSessionTerm]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSessionTerm[P]>
      : GetScalarType<T[P], AggregateSessionTerm[P]>
  }




  export type SessionTermGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionTermWhereInput
    orderBy?: SessionTermOrderByWithAggregationInput | SessionTermOrderByWithAggregationInput[]
    by: SessionTermScalarFieldEnum[] | SessionTermScalarFieldEnum
    having?: SessionTermScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionTermCountAggregateInputType | true
    _avg?: SessionTermAvgAggregateInputType
    _sum?: SessionTermSumAggregateInputType
    _min?: SessionTermMinAggregateInputType
    _max?: SessionTermMaxAggregateInputType
  }

  export type SessionTermGroupByOutputType = {
    id: number
    session_id: number
    term_id: number
    session_term_name: string
    session_term_visible: number
    session_term_locked: number
    session_term_current: number
    session_term_clone_details: number | null
    session_term_clone_details_from: number | null
    session_term_clone_details_from_id: number | null
    session_term_clone_classinstances: number | null
    session_terms_clone_subjects: number | null
    session_terms_clone_scoresetup: number | null
    session_term_start: Date | null
    session_term_end: Date | null
    session_term_next_begin: Date | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SessionTermCountAggregateOutputType | null
    _avg: SessionTermAvgAggregateOutputType | null
    _sum: SessionTermSumAggregateOutputType | null
    _min: SessionTermMinAggregateOutputType | null
    _max: SessionTermMaxAggregateOutputType | null
  }

  type GetSessionTermGroupByPayload<T extends SessionTermGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionTermGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionTermGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionTermGroupByOutputType[P]>
            : GetScalarType<T[P], SessionTermGroupByOutputType[P]>
        }
      >
    >


  export type SessionTermSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_id?: boolean
    term_id?: boolean
    session_term_name?: boolean
    session_term_visible?: boolean
    session_term_locked?: boolean
    session_term_current?: boolean
    session_term_clone_details?: boolean
    session_term_clone_details_from?: boolean
    session_term_clone_details_from_id?: boolean
    session_term_clone_classinstances?: boolean
    session_terms_clone_subjects?: boolean
    session_terms_clone_scoresetup?: boolean
    session_term_start?: boolean
    session_term_end?: boolean
    session_term_next_begin?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    session?: boolean | SessionTerm$sessionArgs<ExtArgs>
    term?: boolean | SessionTerm$termArgs<ExtArgs>
    sessionclass?: boolean | SessionTerm$sessionclassArgs<ExtArgs>
    _count?: boolean | SessionTermCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["sessionTerm"]>



  export type SessionTermSelectScalar = {
    id?: boolean
    session_id?: boolean
    term_id?: boolean
    session_term_name?: boolean
    session_term_visible?: boolean
    session_term_locked?: boolean
    session_term_current?: boolean
    session_term_clone_details?: boolean
    session_term_clone_details_from?: boolean
    session_term_clone_details_from_id?: boolean
    session_term_clone_classinstances?: boolean
    session_terms_clone_subjects?: boolean
    session_terms_clone_scoresetup?: boolean
    session_term_start?: boolean
    session_term_end?: boolean
    session_term_next_begin?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SessionTermOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_id" | "term_id" | "session_term_name" | "session_term_visible" | "session_term_locked" | "session_term_current" | "session_term_clone_details" | "session_term_clone_details_from" | "session_term_clone_details_from_id" | "session_term_clone_classinstances" | "session_terms_clone_subjects" | "session_terms_clone_scoresetup" | "session_term_start" | "session_term_end" | "session_term_next_begin" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["sessionTerm"]>
  export type SessionTermInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    session?: boolean | SessionTerm$sessionArgs<ExtArgs>
    term?: boolean | SessionTerm$termArgs<ExtArgs>
    sessionclass?: boolean | SessionTerm$sessionclassArgs<ExtArgs>
    _count?: boolean | SessionTermCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $SessionTermPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SessionTerm"
    objects: {
      session: Prisma.$BranchSessionPayload<ExtArgs> | null
      term: Prisma.$TermPayload<ExtArgs> | null
      sessionclass: Prisma.$SessionClassPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_id: number
      term_id: number
      session_term_name: string
      session_term_visible: number
      session_term_locked: number
      session_term_current: number
      session_term_clone_details: number | null
      session_term_clone_details_from: number | null
      session_term_clone_details_from_id: number | null
      session_term_clone_classinstances: number | null
      session_terms_clone_subjects: number | null
      session_terms_clone_scoresetup: number | null
      session_term_start: Date | null
      session_term_end: Date | null
      session_term_next_begin: Date | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["sessionTerm"]>
    composites: {}
  }

  type SessionTermGetPayload<S extends boolean | null | undefined | SessionTermDefaultArgs> = $Result.GetResult<Prisma.$SessionTermPayload, S>

  type SessionTermCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionTermFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionTermCountAggregateInputType | true
    }

  export interface SessionTermDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SessionTerm'], meta: { name: 'SessionTerm' } }
    /**
     * Find zero or one SessionTerm that matches the filter.
     * @param {SessionTermFindUniqueArgs} args - Arguments to find a SessionTerm
     * @example
     * // Get one SessionTerm
     * const sessionTerm = await prisma.sessionTerm.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionTermFindUniqueArgs>(args: SelectSubset<T, SessionTermFindUniqueArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SessionTerm that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionTermFindUniqueOrThrowArgs} args - Arguments to find a SessionTerm
     * @example
     * // Get one SessionTerm
     * const sessionTerm = await prisma.sessionTerm.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionTermFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionTermFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionTerm that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermFindFirstArgs} args - Arguments to find a SessionTerm
     * @example
     * // Get one SessionTerm
     * const sessionTerm = await prisma.sessionTerm.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionTermFindFirstArgs>(args?: SelectSubset<T, SessionTermFindFirstArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionTerm that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermFindFirstOrThrowArgs} args - Arguments to find a SessionTerm
     * @example
     * // Get one SessionTerm
     * const sessionTerm = await prisma.sessionTerm.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionTermFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionTermFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SessionTerms that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SessionTerms
     * const sessionTerms = await prisma.sessionTerm.findMany()
     * 
     * // Get first 10 SessionTerms
     * const sessionTerms = await prisma.sessionTerm.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionTermWithIdOnly = await prisma.sessionTerm.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionTermFindManyArgs>(args?: SelectSubset<T, SessionTermFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SessionTerm.
     * @param {SessionTermCreateArgs} args - Arguments to create a SessionTerm.
     * @example
     * // Create one SessionTerm
     * const SessionTerm = await prisma.sessionTerm.create({
     *   data: {
     *     // ... data to create a SessionTerm
     *   }
     * })
     * 
     */
    create<T extends SessionTermCreateArgs>(args: SelectSubset<T, SessionTermCreateArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SessionTerms.
     * @param {SessionTermCreateManyArgs} args - Arguments to create many SessionTerms.
     * @example
     * // Create many SessionTerms
     * const sessionTerm = await prisma.sessionTerm.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionTermCreateManyArgs>(args?: SelectSubset<T, SessionTermCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SessionTerm.
     * @param {SessionTermDeleteArgs} args - Arguments to delete one SessionTerm.
     * @example
     * // Delete one SessionTerm
     * const SessionTerm = await prisma.sessionTerm.delete({
     *   where: {
     *     // ... filter to delete one SessionTerm
     *   }
     * })
     * 
     */
    delete<T extends SessionTermDeleteArgs>(args: SelectSubset<T, SessionTermDeleteArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SessionTerm.
     * @param {SessionTermUpdateArgs} args - Arguments to update one SessionTerm.
     * @example
     * // Update one SessionTerm
     * const sessionTerm = await prisma.sessionTerm.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionTermUpdateArgs>(args: SelectSubset<T, SessionTermUpdateArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SessionTerms.
     * @param {SessionTermDeleteManyArgs} args - Arguments to filter SessionTerms to delete.
     * @example
     * // Delete a few SessionTerms
     * const { count } = await prisma.sessionTerm.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionTermDeleteManyArgs>(args?: SelectSubset<T, SessionTermDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SessionTerms.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SessionTerms
     * const sessionTerm = await prisma.sessionTerm.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionTermUpdateManyArgs>(args: SelectSubset<T, SessionTermUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SessionTerm.
     * @param {SessionTermUpsertArgs} args - Arguments to update or create a SessionTerm.
     * @example
     * // Update or create a SessionTerm
     * const sessionTerm = await prisma.sessionTerm.upsert({
     *   create: {
     *     // ... data to create a SessionTerm
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SessionTerm we want to update
     *   }
     * })
     */
    upsert<T extends SessionTermUpsertArgs>(args: SelectSubset<T, SessionTermUpsertArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SessionTerms.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermCountArgs} args - Arguments to filter SessionTerms to count.
     * @example
     * // Count the number of SessionTerms
     * const count = await prisma.sessionTerm.count({
     *   where: {
     *     // ... the filter for the SessionTerms we want to count
     *   }
     * })
    **/
    count<T extends SessionTermCountArgs>(
      args?: Subset<T, SessionTermCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionTermCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SessionTerm.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionTermAggregateArgs>(args: Subset<T, SessionTermAggregateArgs>): Prisma.PrismaPromise<GetSessionTermAggregateType<T>>

    /**
     * Group by SessionTerm.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionTermGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionTermGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionTermGroupByArgs['orderBy'] }
        : { orderBy?: SessionTermGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionTermGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionTermGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SessionTerm model
   */
  readonly fields: SessionTermFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SessionTerm.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionTermClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    session<T extends SessionTerm$sessionArgs<ExtArgs> = {}>(args?: Subset<T, SessionTerm$sessionArgs<ExtArgs>>): Prisma__BranchSessionClient<$Result.GetResult<Prisma.$BranchSessionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    term<T extends SessionTerm$termArgs<ExtArgs> = {}>(args?: Subset<T, SessionTerm$termArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    sessionclass<T extends SessionTerm$sessionclassArgs<ExtArgs> = {}>(args?: Subset<T, SessionTerm$sessionclassArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SessionTerm model
   */
  interface SessionTermFieldRefs {
    readonly id: FieldRef<"SessionTerm", 'Int'>
    readonly session_id: FieldRef<"SessionTerm", 'Int'>
    readonly term_id: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_name: FieldRef<"SessionTerm", 'String'>
    readonly session_term_visible: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_locked: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_current: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_clone_details: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_clone_details_from: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_clone_details_from_id: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_clone_classinstances: FieldRef<"SessionTerm", 'Int'>
    readonly session_terms_clone_subjects: FieldRef<"SessionTerm", 'Int'>
    readonly session_terms_clone_scoresetup: FieldRef<"SessionTerm", 'Int'>
    readonly session_term_start: FieldRef<"SessionTerm", 'DateTime'>
    readonly session_term_end: FieldRef<"SessionTerm", 'DateTime'>
    readonly session_term_next_begin: FieldRef<"SessionTerm", 'DateTime'>
    readonly created_by: FieldRef<"SessionTerm", 'Int'>
    readonly created_at: FieldRef<"SessionTerm", 'DateTime'>
    readonly updated_at: FieldRef<"SessionTerm", 'DateTime'>
    readonly deleted_at: FieldRef<"SessionTerm", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SessionTerm findUnique
   */
  export type SessionTermFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter, which SessionTerm to fetch.
     */
    where: SessionTermWhereUniqueInput
  }

  /**
   * SessionTerm findUniqueOrThrow
   */
  export type SessionTermFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter, which SessionTerm to fetch.
     */
    where: SessionTermWhereUniqueInput
  }

  /**
   * SessionTerm findFirst
   */
  export type SessionTermFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter, which SessionTerm to fetch.
     */
    where?: SessionTermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionTerms to fetch.
     */
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionTerms.
     */
    cursor?: SessionTermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionTerms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionTerms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionTerms.
     */
    distinct?: SessionTermScalarFieldEnum | SessionTermScalarFieldEnum[]
  }

  /**
   * SessionTerm findFirstOrThrow
   */
  export type SessionTermFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter, which SessionTerm to fetch.
     */
    where?: SessionTermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionTerms to fetch.
     */
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionTerms.
     */
    cursor?: SessionTermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionTerms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionTerms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionTerms.
     */
    distinct?: SessionTermScalarFieldEnum | SessionTermScalarFieldEnum[]
  }

  /**
   * SessionTerm findMany
   */
  export type SessionTermFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter, which SessionTerms to fetch.
     */
    where?: SessionTermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionTerms to fetch.
     */
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SessionTerms.
     */
    cursor?: SessionTermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionTerms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionTerms.
     */
    skip?: number
    distinct?: SessionTermScalarFieldEnum | SessionTermScalarFieldEnum[]
  }

  /**
   * SessionTerm create
   */
  export type SessionTermCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * The data needed to create a SessionTerm.
     */
    data: XOR<SessionTermCreateInput, SessionTermUncheckedCreateInput>
  }

  /**
   * SessionTerm createMany
   */
  export type SessionTermCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SessionTerms.
     */
    data: SessionTermCreateManyInput | SessionTermCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SessionTerm update
   */
  export type SessionTermUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * The data needed to update a SessionTerm.
     */
    data: XOR<SessionTermUpdateInput, SessionTermUncheckedUpdateInput>
    /**
     * Choose, which SessionTerm to update.
     */
    where: SessionTermWhereUniqueInput
  }

  /**
   * SessionTerm updateMany
   */
  export type SessionTermUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SessionTerms.
     */
    data: XOR<SessionTermUpdateManyMutationInput, SessionTermUncheckedUpdateManyInput>
    /**
     * Filter which SessionTerms to update
     */
    where?: SessionTermWhereInput
    /**
     * Limit how many SessionTerms to update.
     */
    limit?: number
  }

  /**
   * SessionTerm upsert
   */
  export type SessionTermUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * The filter to search for the SessionTerm to update in case it exists.
     */
    where: SessionTermWhereUniqueInput
    /**
     * In case the SessionTerm found by the `where` argument doesn't exist, create a new SessionTerm with this data.
     */
    create: XOR<SessionTermCreateInput, SessionTermUncheckedCreateInput>
    /**
     * In case the SessionTerm was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionTermUpdateInput, SessionTermUncheckedUpdateInput>
  }

  /**
   * SessionTerm delete
   */
  export type SessionTermDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    /**
     * Filter which SessionTerm to delete.
     */
    where: SessionTermWhereUniqueInput
  }

  /**
   * SessionTerm deleteMany
   */
  export type SessionTermDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionTerms to delete
     */
    where?: SessionTermWhereInput
    /**
     * Limit how many SessionTerms to delete.
     */
    limit?: number
  }

  /**
   * SessionTerm.session
   */
  export type SessionTerm$sessionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the BranchSession
     */
    select?: BranchSessionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the BranchSession
     */
    omit?: BranchSessionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchSessionInclude<ExtArgs> | null
    where?: BranchSessionWhereInput
  }

  /**
   * SessionTerm.term
   */
  export type SessionTerm$termArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    where?: TermWhereInput
  }

  /**
   * SessionTerm.sessionclass
   */
  export type SessionTerm$sessionclassArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    where?: SessionClassWhereInput
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    cursor?: SessionClassWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SessionClassScalarFieldEnum | SessionClassScalarFieldEnum[]
  }

  /**
   * SessionTerm without action
   */
  export type SessionTermDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
  }


  /**
   * Model UserLevel
   */

  export type AggregateUserLevel = {
    _count: UserLevelCountAggregateOutputType | null
    _avg: UserLevelAvgAggregateOutputType | null
    _sum: UserLevelSumAggregateOutputType | null
    _min: UserLevelMinAggregateOutputType | null
    _max: UserLevelMaxAggregateOutputType | null
  }

  export type UserLevelAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserLevelSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserLevelMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserLevelMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    level_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserLevelCountAggregateOutputType = {
    id: number
    branch_id: number
    level_id: number
    user_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type UserLevelAvgAggregateInputType = {
    id?: true
    branch_id?: true
    level_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserLevelSumAggregateInputType = {
    id?: true
    branch_id?: true
    level_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserLevelMinAggregateInputType = {
    id?: true
    branch_id?: true
    level_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserLevelMaxAggregateInputType = {
    id?: true
    branch_id?: true
    level_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserLevelCountAggregateInputType = {
    id?: true
    branch_id?: true
    level_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type UserLevelAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserLevel to aggregate.
     */
    where?: UserLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserLevels to fetch.
     */
    orderBy?: UserLevelOrderByWithRelationInput | UserLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserLevels
    **/
    _count?: true | UserLevelCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserLevelAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserLevelSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserLevelMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserLevelMaxAggregateInputType
  }

  export type GetUserLevelAggregateType<T extends UserLevelAggregateArgs> = {
        [P in keyof T & keyof AggregateUserLevel]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserLevel[P]>
      : GetScalarType<T[P], AggregateUserLevel[P]>
  }




  export type UserLevelGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserLevelWhereInput
    orderBy?: UserLevelOrderByWithAggregationInput | UserLevelOrderByWithAggregationInput[]
    by: UserLevelScalarFieldEnum[] | UserLevelScalarFieldEnum
    having?: UserLevelScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserLevelCountAggregateInputType | true
    _avg?: UserLevelAvgAggregateInputType
    _sum?: UserLevelSumAggregateInputType
    _min?: UserLevelMinAggregateInputType
    _max?: UserLevelMaxAggregateInputType
  }

  export type UserLevelGroupByOutputType = {
    id: number
    branch_id: number
    level_id: number
    user_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: UserLevelCountAggregateOutputType | null
    _avg: UserLevelAvgAggregateOutputType | null
    _sum: UserLevelSumAggregateOutputType | null
    _min: UserLevelMinAggregateOutputType | null
    _max: UserLevelMaxAggregateOutputType | null
  }

  type GetUserLevelGroupByPayload<T extends UserLevelGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserLevelGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserLevelGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserLevelGroupByOutputType[P]>
            : GetScalarType<T[P], UserLevelGroupByOutputType[P]>
        }
      >
    >


  export type UserLevelSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    level_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["userLevel"]>



  export type UserLevelSelectScalar = {
    id?: boolean
    branch_id?: boolean
    level_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type UserLevelOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "level_id" | "user_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["userLevel"]>

  export type $UserLevelPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserLevel"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      level_id: number
      user_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["userLevel"]>
    composites: {}
  }

  type UserLevelGetPayload<S extends boolean | null | undefined | UserLevelDefaultArgs> = $Result.GetResult<Prisma.$UserLevelPayload, S>

  type UserLevelCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserLevelFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserLevelCountAggregateInputType | true
    }

  export interface UserLevelDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserLevel'], meta: { name: 'UserLevel' } }
    /**
     * Find zero or one UserLevel that matches the filter.
     * @param {UserLevelFindUniqueArgs} args - Arguments to find a UserLevel
     * @example
     * // Get one UserLevel
     * const userLevel = await prisma.userLevel.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserLevelFindUniqueArgs>(args: SelectSubset<T, UserLevelFindUniqueArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserLevel that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserLevelFindUniqueOrThrowArgs} args - Arguments to find a UserLevel
     * @example
     * // Get one UserLevel
     * const userLevel = await prisma.userLevel.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserLevelFindUniqueOrThrowArgs>(args: SelectSubset<T, UserLevelFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserLevel that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelFindFirstArgs} args - Arguments to find a UserLevel
     * @example
     * // Get one UserLevel
     * const userLevel = await prisma.userLevel.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserLevelFindFirstArgs>(args?: SelectSubset<T, UserLevelFindFirstArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserLevel that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelFindFirstOrThrowArgs} args - Arguments to find a UserLevel
     * @example
     * // Get one UserLevel
     * const userLevel = await prisma.userLevel.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserLevelFindFirstOrThrowArgs>(args?: SelectSubset<T, UserLevelFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserLevels that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserLevels
     * const userLevels = await prisma.userLevel.findMany()
     * 
     * // Get first 10 UserLevels
     * const userLevels = await prisma.userLevel.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userLevelWithIdOnly = await prisma.userLevel.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserLevelFindManyArgs>(args?: SelectSubset<T, UserLevelFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserLevel.
     * @param {UserLevelCreateArgs} args - Arguments to create a UserLevel.
     * @example
     * // Create one UserLevel
     * const UserLevel = await prisma.userLevel.create({
     *   data: {
     *     // ... data to create a UserLevel
     *   }
     * })
     * 
     */
    create<T extends UserLevelCreateArgs>(args: SelectSubset<T, UserLevelCreateArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserLevels.
     * @param {UserLevelCreateManyArgs} args - Arguments to create many UserLevels.
     * @example
     * // Create many UserLevels
     * const userLevel = await prisma.userLevel.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserLevelCreateManyArgs>(args?: SelectSubset<T, UserLevelCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UserLevel.
     * @param {UserLevelDeleteArgs} args - Arguments to delete one UserLevel.
     * @example
     * // Delete one UserLevel
     * const UserLevel = await prisma.userLevel.delete({
     *   where: {
     *     // ... filter to delete one UserLevel
     *   }
     * })
     * 
     */
    delete<T extends UserLevelDeleteArgs>(args: SelectSubset<T, UserLevelDeleteArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserLevel.
     * @param {UserLevelUpdateArgs} args - Arguments to update one UserLevel.
     * @example
     * // Update one UserLevel
     * const userLevel = await prisma.userLevel.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserLevelUpdateArgs>(args: SelectSubset<T, UserLevelUpdateArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserLevels.
     * @param {UserLevelDeleteManyArgs} args - Arguments to filter UserLevels to delete.
     * @example
     * // Delete a few UserLevels
     * const { count } = await prisma.userLevel.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserLevelDeleteManyArgs>(args?: SelectSubset<T, UserLevelDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserLevels.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserLevels
     * const userLevel = await prisma.userLevel.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserLevelUpdateManyArgs>(args: SelectSubset<T, UserLevelUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UserLevel.
     * @param {UserLevelUpsertArgs} args - Arguments to update or create a UserLevel.
     * @example
     * // Update or create a UserLevel
     * const userLevel = await prisma.userLevel.upsert({
     *   create: {
     *     // ... data to create a UserLevel
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserLevel we want to update
     *   }
     * })
     */
    upsert<T extends UserLevelUpsertArgs>(args: SelectSubset<T, UserLevelUpsertArgs<ExtArgs>>): Prisma__UserLevelClient<$Result.GetResult<Prisma.$UserLevelPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserLevels.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelCountArgs} args - Arguments to filter UserLevels to count.
     * @example
     * // Count the number of UserLevels
     * const count = await prisma.userLevel.count({
     *   where: {
     *     // ... the filter for the UserLevels we want to count
     *   }
     * })
    **/
    count<T extends UserLevelCountArgs>(
      args?: Subset<T, UserLevelCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserLevelCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserLevel.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserLevelAggregateArgs>(args: Subset<T, UserLevelAggregateArgs>): Prisma.PrismaPromise<GetUserLevelAggregateType<T>>

    /**
     * Group by UserLevel.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserLevelGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserLevelGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserLevelGroupByArgs['orderBy'] }
        : { orderBy?: UserLevelGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserLevelGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserLevelGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserLevel model
   */
  readonly fields: UserLevelFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserLevel.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserLevelClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserLevel model
   */
  interface UserLevelFieldRefs {
    readonly id: FieldRef<"UserLevel", 'Int'>
    readonly branch_id: FieldRef<"UserLevel", 'Int'>
    readonly level_id: FieldRef<"UserLevel", 'Int'>
    readonly user_id: FieldRef<"UserLevel", 'Int'>
    readonly created_by: FieldRef<"UserLevel", 'Int'>
    readonly created_at: FieldRef<"UserLevel", 'DateTime'>
    readonly updated_at: FieldRef<"UserLevel", 'DateTime'>
    readonly deleted_at: FieldRef<"UserLevel", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * UserLevel findUnique
   */
  export type UserLevelFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter, which UserLevel to fetch.
     */
    where: UserLevelWhereUniqueInput
  }

  /**
   * UserLevel findUniqueOrThrow
   */
  export type UserLevelFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter, which UserLevel to fetch.
     */
    where: UserLevelWhereUniqueInput
  }

  /**
   * UserLevel findFirst
   */
  export type UserLevelFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter, which UserLevel to fetch.
     */
    where?: UserLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserLevels to fetch.
     */
    orderBy?: UserLevelOrderByWithRelationInput | UserLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserLevels.
     */
    cursor?: UserLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserLevels.
     */
    distinct?: UserLevelScalarFieldEnum | UserLevelScalarFieldEnum[]
  }

  /**
   * UserLevel findFirstOrThrow
   */
  export type UserLevelFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter, which UserLevel to fetch.
     */
    where?: UserLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserLevels to fetch.
     */
    orderBy?: UserLevelOrderByWithRelationInput | UserLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserLevels.
     */
    cursor?: UserLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserLevels.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserLevels.
     */
    distinct?: UserLevelScalarFieldEnum | UserLevelScalarFieldEnum[]
  }

  /**
   * UserLevel findMany
   */
  export type UserLevelFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter, which UserLevels to fetch.
     */
    where?: UserLevelWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserLevels to fetch.
     */
    orderBy?: UserLevelOrderByWithRelationInput | UserLevelOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserLevels.
     */
    cursor?: UserLevelWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserLevels from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserLevels.
     */
    skip?: number
    distinct?: UserLevelScalarFieldEnum | UserLevelScalarFieldEnum[]
  }

  /**
   * UserLevel create
   */
  export type UserLevelCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * The data needed to create a UserLevel.
     */
    data: XOR<UserLevelCreateInput, UserLevelUncheckedCreateInput>
  }

  /**
   * UserLevel createMany
   */
  export type UserLevelCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserLevels.
     */
    data: UserLevelCreateManyInput | UserLevelCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserLevel update
   */
  export type UserLevelUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * The data needed to update a UserLevel.
     */
    data: XOR<UserLevelUpdateInput, UserLevelUncheckedUpdateInput>
    /**
     * Choose, which UserLevel to update.
     */
    where: UserLevelWhereUniqueInput
  }

  /**
   * UserLevel updateMany
   */
  export type UserLevelUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserLevels.
     */
    data: XOR<UserLevelUpdateManyMutationInput, UserLevelUncheckedUpdateManyInput>
    /**
     * Filter which UserLevels to update
     */
    where?: UserLevelWhereInput
    /**
     * Limit how many UserLevels to update.
     */
    limit?: number
  }

  /**
   * UserLevel upsert
   */
  export type UserLevelUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * The filter to search for the UserLevel to update in case it exists.
     */
    where: UserLevelWhereUniqueInput
    /**
     * In case the UserLevel found by the `where` argument doesn't exist, create a new UserLevel with this data.
     */
    create: XOR<UserLevelCreateInput, UserLevelUncheckedCreateInput>
    /**
     * In case the UserLevel was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserLevelUpdateInput, UserLevelUncheckedUpdateInput>
  }

  /**
   * UserLevel delete
   */
  export type UserLevelDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
    /**
     * Filter which UserLevel to delete.
     */
    where: UserLevelWhereUniqueInput
  }

  /**
   * UserLevel deleteMany
   */
  export type UserLevelDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserLevels to delete
     */
    where?: UserLevelWhereInput
    /**
     * Limit how many UserLevels to delete.
     */
    limit?: number
  }

  /**
   * UserLevel without action
   */
  export type UserLevelDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserLevel
     */
    select?: UserLevelSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserLevel
     */
    omit?: UserLevelOmit<ExtArgs> | null
  }


  /**
   * Model UserTracking
   */

  export type AggregateUserTracking = {
    _count: UserTrackingCountAggregateOutputType | null
    _avg: UserTrackingAvgAggregateOutputType | null
    _sum: UserTrackingSumAggregateOutputType | null
    _min: UserTrackingMinAggregateOutputType | null
    _max: UserTrackingMaxAggregateOutputType | null
  }

  export type UserTrackingAvgAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserTrackingSumAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserTrackingMinAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserTrackingMaxAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserTrackingCountAggregateOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number
    user_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type UserTrackingAvgAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserTrackingSumAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserTrackingMinAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserTrackingMaxAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserTrackingCountAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type UserTrackingAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserTracking to aggregate.
     */
    where?: UserTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackings to fetch.
     */
    orderBy?: UserTrackingOrderByWithRelationInput | UserTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserTrackings
    **/
    _count?: true | UserTrackingCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserTrackingAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserTrackingSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserTrackingMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserTrackingMaxAggregateInputType
  }

  export type GetUserTrackingAggregateType<T extends UserTrackingAggregateArgs> = {
        [P in keyof T & keyof AggregateUserTracking]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserTracking[P]>
      : GetScalarType<T[P], AggregateUserTracking[P]>
  }




  export type UserTrackingGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserTrackingWhereInput
    orderBy?: UserTrackingOrderByWithAggregationInput | UserTrackingOrderByWithAggregationInput[]
    by: UserTrackingScalarFieldEnum[] | UserTrackingScalarFieldEnum
    having?: UserTrackingScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserTrackingCountAggregateInputType | true
    _avg?: UserTrackingAvgAggregateInputType
    _sum?: UserTrackingSumAggregateInputType
    _min?: UserTrackingMinAggregateInputType
    _max?: UserTrackingMaxAggregateInputType
  }

  export type UserTrackingGroupByOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number
    user_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: UserTrackingCountAggregateOutputType | null
    _avg: UserTrackingAvgAggregateOutputType | null
    _sum: UserTrackingSumAggregateOutputType | null
    _min: UserTrackingMinAggregateOutputType | null
    _max: UserTrackingMaxAggregateOutputType | null
  }

  type GetUserTrackingGroupByPayload<T extends UserTrackingGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserTrackingGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserTrackingGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserTrackingGroupByOutputType[P]>
            : GetScalarType<T[P], UserTrackingGroupByOutputType[P]>
        }
      >
    >


  export type UserTrackingSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["userTracking"]>



  export type UserTrackingSelectScalar = {
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type UserTrackingOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "class_id" | "specialization_id" | "group_id" | "user_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["userTracking"]>

  export type $UserTrackingPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserTracking"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      class_id: number
      specialization_id: number
      group_id: number
      user_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["userTracking"]>
    composites: {}
  }

  type UserTrackingGetPayload<S extends boolean | null | undefined | UserTrackingDefaultArgs> = $Result.GetResult<Prisma.$UserTrackingPayload, S>

  type UserTrackingCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserTrackingFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserTrackingCountAggregateInputType | true
    }

  export interface UserTrackingDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserTracking'], meta: { name: 'UserTracking' } }
    /**
     * Find zero or one UserTracking that matches the filter.
     * @param {UserTrackingFindUniqueArgs} args - Arguments to find a UserTracking
     * @example
     * // Get one UserTracking
     * const userTracking = await prisma.userTracking.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserTrackingFindUniqueArgs>(args: SelectSubset<T, UserTrackingFindUniqueArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserTracking that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserTrackingFindUniqueOrThrowArgs} args - Arguments to find a UserTracking
     * @example
     * // Get one UserTracking
     * const userTracking = await prisma.userTracking.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserTrackingFindUniqueOrThrowArgs>(args: SelectSubset<T, UserTrackingFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserTracking that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingFindFirstArgs} args - Arguments to find a UserTracking
     * @example
     * // Get one UserTracking
     * const userTracking = await prisma.userTracking.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserTrackingFindFirstArgs>(args?: SelectSubset<T, UserTrackingFindFirstArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserTracking that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingFindFirstOrThrowArgs} args - Arguments to find a UserTracking
     * @example
     * // Get one UserTracking
     * const userTracking = await prisma.userTracking.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserTrackingFindFirstOrThrowArgs>(args?: SelectSubset<T, UserTrackingFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserTrackings that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserTrackings
     * const userTrackings = await prisma.userTracking.findMany()
     * 
     * // Get first 10 UserTrackings
     * const userTrackings = await prisma.userTracking.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userTrackingWithIdOnly = await prisma.userTracking.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserTrackingFindManyArgs>(args?: SelectSubset<T, UserTrackingFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserTracking.
     * @param {UserTrackingCreateArgs} args - Arguments to create a UserTracking.
     * @example
     * // Create one UserTracking
     * const UserTracking = await prisma.userTracking.create({
     *   data: {
     *     // ... data to create a UserTracking
     *   }
     * })
     * 
     */
    create<T extends UserTrackingCreateArgs>(args: SelectSubset<T, UserTrackingCreateArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserTrackings.
     * @param {UserTrackingCreateManyArgs} args - Arguments to create many UserTrackings.
     * @example
     * // Create many UserTrackings
     * const userTracking = await prisma.userTracking.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserTrackingCreateManyArgs>(args?: SelectSubset<T, UserTrackingCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UserTracking.
     * @param {UserTrackingDeleteArgs} args - Arguments to delete one UserTracking.
     * @example
     * // Delete one UserTracking
     * const UserTracking = await prisma.userTracking.delete({
     *   where: {
     *     // ... filter to delete one UserTracking
     *   }
     * })
     * 
     */
    delete<T extends UserTrackingDeleteArgs>(args: SelectSubset<T, UserTrackingDeleteArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserTracking.
     * @param {UserTrackingUpdateArgs} args - Arguments to update one UserTracking.
     * @example
     * // Update one UserTracking
     * const userTracking = await prisma.userTracking.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserTrackingUpdateArgs>(args: SelectSubset<T, UserTrackingUpdateArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserTrackings.
     * @param {UserTrackingDeleteManyArgs} args - Arguments to filter UserTrackings to delete.
     * @example
     * // Delete a few UserTrackings
     * const { count } = await prisma.userTracking.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserTrackingDeleteManyArgs>(args?: SelectSubset<T, UserTrackingDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserTrackings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserTrackings
     * const userTracking = await prisma.userTracking.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserTrackingUpdateManyArgs>(args: SelectSubset<T, UserTrackingUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UserTracking.
     * @param {UserTrackingUpsertArgs} args - Arguments to update or create a UserTracking.
     * @example
     * // Update or create a UserTracking
     * const userTracking = await prisma.userTracking.upsert({
     *   create: {
     *     // ... data to create a UserTracking
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserTracking we want to update
     *   }
     * })
     */
    upsert<T extends UserTrackingUpsertArgs>(args: SelectSubset<T, UserTrackingUpsertArgs<ExtArgs>>): Prisma__UserTrackingClient<$Result.GetResult<Prisma.$UserTrackingPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserTrackings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingCountArgs} args - Arguments to filter UserTrackings to count.
     * @example
     * // Count the number of UserTrackings
     * const count = await prisma.userTracking.count({
     *   where: {
     *     // ... the filter for the UserTrackings we want to count
     *   }
     * })
    **/
    count<T extends UserTrackingCountArgs>(
      args?: Subset<T, UserTrackingCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserTrackingCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserTracking.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserTrackingAggregateArgs>(args: Subset<T, UserTrackingAggregateArgs>): Prisma.PrismaPromise<GetUserTrackingAggregateType<T>>

    /**
     * Group by UserTracking.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserTrackingGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserTrackingGroupByArgs['orderBy'] }
        : { orderBy?: UserTrackingGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserTrackingGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserTrackingGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserTracking model
   */
  readonly fields: UserTrackingFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserTracking.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserTrackingClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserTracking model
   */
  interface UserTrackingFieldRefs {
    readonly id: FieldRef<"UserTracking", 'Int'>
    readonly class_id: FieldRef<"UserTracking", 'Int'>
    readonly specialization_id: FieldRef<"UserTracking", 'Int'>
    readonly group_id: FieldRef<"UserTracking", 'Int'>
    readonly user_id: FieldRef<"UserTracking", 'Int'>
    readonly created_by: FieldRef<"UserTracking", 'Int'>
    readonly created_at: FieldRef<"UserTracking", 'DateTime'>
    readonly updated_at: FieldRef<"UserTracking", 'DateTime'>
    readonly deleted_at: FieldRef<"UserTracking", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * UserTracking findUnique
   */
  export type UserTrackingFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter, which UserTracking to fetch.
     */
    where: UserTrackingWhereUniqueInput
  }

  /**
   * UserTracking findUniqueOrThrow
   */
  export type UserTrackingFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter, which UserTracking to fetch.
     */
    where: UserTrackingWhereUniqueInput
  }

  /**
   * UserTracking findFirst
   */
  export type UserTrackingFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter, which UserTracking to fetch.
     */
    where?: UserTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackings to fetch.
     */
    orderBy?: UserTrackingOrderByWithRelationInput | UserTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserTrackings.
     */
    cursor?: UserTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserTrackings.
     */
    distinct?: UserTrackingScalarFieldEnum | UserTrackingScalarFieldEnum[]
  }

  /**
   * UserTracking findFirstOrThrow
   */
  export type UserTrackingFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter, which UserTracking to fetch.
     */
    where?: UserTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackings to fetch.
     */
    orderBy?: UserTrackingOrderByWithRelationInput | UserTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserTrackings.
     */
    cursor?: UserTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserTrackings.
     */
    distinct?: UserTrackingScalarFieldEnum | UserTrackingScalarFieldEnum[]
  }

  /**
   * UserTracking findMany
   */
  export type UserTrackingFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackings to fetch.
     */
    where?: UserTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackings to fetch.
     */
    orderBy?: UserTrackingOrderByWithRelationInput | UserTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserTrackings.
     */
    cursor?: UserTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackings.
     */
    skip?: number
    distinct?: UserTrackingScalarFieldEnum | UserTrackingScalarFieldEnum[]
  }

  /**
   * UserTracking create
   */
  export type UserTrackingCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * The data needed to create a UserTracking.
     */
    data: XOR<UserTrackingCreateInput, UserTrackingUncheckedCreateInput>
  }

  /**
   * UserTracking createMany
   */
  export type UserTrackingCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserTrackings.
     */
    data: UserTrackingCreateManyInput | UserTrackingCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserTracking update
   */
  export type UserTrackingUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * The data needed to update a UserTracking.
     */
    data: XOR<UserTrackingUpdateInput, UserTrackingUncheckedUpdateInput>
    /**
     * Choose, which UserTracking to update.
     */
    where: UserTrackingWhereUniqueInput
  }

  /**
   * UserTracking updateMany
   */
  export type UserTrackingUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserTrackings.
     */
    data: XOR<UserTrackingUpdateManyMutationInput, UserTrackingUncheckedUpdateManyInput>
    /**
     * Filter which UserTrackings to update
     */
    where?: UserTrackingWhereInput
    /**
     * Limit how many UserTrackings to update.
     */
    limit?: number
  }

  /**
   * UserTracking upsert
   */
  export type UserTrackingUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * The filter to search for the UserTracking to update in case it exists.
     */
    where: UserTrackingWhereUniqueInput
    /**
     * In case the UserTracking found by the `where` argument doesn't exist, create a new UserTracking with this data.
     */
    create: XOR<UserTrackingCreateInput, UserTrackingUncheckedCreateInput>
    /**
     * In case the UserTracking was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserTrackingUpdateInput, UserTrackingUncheckedUpdateInput>
  }

  /**
   * UserTracking delete
   */
  export type UserTrackingDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
    /**
     * Filter which UserTracking to delete.
     */
    where: UserTrackingWhereUniqueInput
  }

  /**
   * UserTracking deleteMany
   */
  export type UserTrackingDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserTrackings to delete
     */
    where?: UserTrackingWhereInput
    /**
     * Limit how many UserTrackings to delete.
     */
    limit?: number
  }

  /**
   * UserTracking without action
   */
  export type UserTrackingDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTracking
     */
    select?: UserTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTracking
     */
    omit?: UserTrackingOmit<ExtArgs> | null
  }


  /**
   * Model UserTrackingSubject
   */

  export type AggregateUserTrackingSubject = {
    _count: UserTrackingSubjectCountAggregateOutputType | null
    _avg: UserTrackingSubjectAvgAggregateOutputType | null
    _sum: UserTrackingSubjectSumAggregateOutputType | null
    _min: UserTrackingSubjectMinAggregateOutputType | null
    _max: UserTrackingSubjectMaxAggregateOutputType | null
  }

  export type UserTrackingSubjectAvgAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    subject_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserTrackingSubjectSumAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    subject_id: number | null
    user_id: number | null
    created_by: number | null
  }

  export type UserTrackingSubjectMinAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    subject_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserTrackingSubjectMaxAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    subject_id: number | null
    user_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserTrackingSubjectCountAggregateOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number
    subject_id: number
    user_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type UserTrackingSubjectAvgAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    subject_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserTrackingSubjectSumAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    subject_id?: true
    user_id?: true
    created_by?: true
  }

  export type UserTrackingSubjectMinAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    subject_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserTrackingSubjectMaxAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    subject_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserTrackingSubjectCountAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    subject_id?: true
    user_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type UserTrackingSubjectAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserTrackingSubject to aggregate.
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackingSubjects to fetch.
     */
    orderBy?: UserTrackingSubjectOrderByWithRelationInput | UserTrackingSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserTrackingSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackingSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackingSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserTrackingSubjects
    **/
    _count?: true | UserTrackingSubjectCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserTrackingSubjectAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserTrackingSubjectSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserTrackingSubjectMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserTrackingSubjectMaxAggregateInputType
  }

  export type GetUserTrackingSubjectAggregateType<T extends UserTrackingSubjectAggregateArgs> = {
        [P in keyof T & keyof AggregateUserTrackingSubject]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserTrackingSubject[P]>
      : GetScalarType<T[P], AggregateUserTrackingSubject[P]>
  }




  export type UserTrackingSubjectGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserTrackingSubjectWhereInput
    orderBy?: UserTrackingSubjectOrderByWithAggregationInput | UserTrackingSubjectOrderByWithAggregationInput[]
    by: UserTrackingSubjectScalarFieldEnum[] | UserTrackingSubjectScalarFieldEnum
    having?: UserTrackingSubjectScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserTrackingSubjectCountAggregateInputType | true
    _avg?: UserTrackingSubjectAvgAggregateInputType
    _sum?: UserTrackingSubjectSumAggregateInputType
    _min?: UserTrackingSubjectMinAggregateInputType
    _max?: UserTrackingSubjectMaxAggregateInputType
  }

  export type UserTrackingSubjectGroupByOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number
    subject_id: number
    user_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: UserTrackingSubjectCountAggregateOutputType | null
    _avg: UserTrackingSubjectAvgAggregateOutputType | null
    _sum: UserTrackingSubjectSumAggregateOutputType | null
    _min: UserTrackingSubjectMinAggregateOutputType | null
    _max: UserTrackingSubjectMaxAggregateOutputType | null
  }

  type GetUserTrackingSubjectGroupByPayload<T extends UserTrackingSubjectGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserTrackingSubjectGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserTrackingSubjectGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserTrackingSubjectGroupByOutputType[P]>
            : GetScalarType<T[P], UserTrackingSubjectGroupByOutputType[P]>
        }
      >
    >


  export type UserTrackingSubjectSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    subject_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["userTrackingSubject"]>



  export type UserTrackingSubjectSelectScalar = {
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    subject_id?: boolean
    user_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type UserTrackingSubjectOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "class_id" | "specialization_id" | "group_id" | "subject_id" | "user_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["userTrackingSubject"]>

  export type $UserTrackingSubjectPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserTrackingSubject"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      class_id: number
      specialization_id: number
      group_id: number
      subject_id: number
      user_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["userTrackingSubject"]>
    composites: {}
  }

  type UserTrackingSubjectGetPayload<S extends boolean | null | undefined | UserTrackingSubjectDefaultArgs> = $Result.GetResult<Prisma.$UserTrackingSubjectPayload, S>

  type UserTrackingSubjectCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserTrackingSubjectFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserTrackingSubjectCountAggregateInputType | true
    }

  export interface UserTrackingSubjectDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserTrackingSubject'], meta: { name: 'UserTrackingSubject' } }
    /**
     * Find zero or one UserTrackingSubject that matches the filter.
     * @param {UserTrackingSubjectFindUniqueArgs} args - Arguments to find a UserTrackingSubject
     * @example
     * // Get one UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserTrackingSubjectFindUniqueArgs>(args: SelectSubset<T, UserTrackingSubjectFindUniqueArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserTrackingSubject that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserTrackingSubjectFindUniqueOrThrowArgs} args - Arguments to find a UserTrackingSubject
     * @example
     * // Get one UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserTrackingSubjectFindUniqueOrThrowArgs>(args: SelectSubset<T, UserTrackingSubjectFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserTrackingSubject that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectFindFirstArgs} args - Arguments to find a UserTrackingSubject
     * @example
     * // Get one UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserTrackingSubjectFindFirstArgs>(args?: SelectSubset<T, UserTrackingSubjectFindFirstArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserTrackingSubject that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectFindFirstOrThrowArgs} args - Arguments to find a UserTrackingSubject
     * @example
     * // Get one UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserTrackingSubjectFindFirstOrThrowArgs>(args?: SelectSubset<T, UserTrackingSubjectFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserTrackingSubjects that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserTrackingSubjects
     * const userTrackingSubjects = await prisma.userTrackingSubject.findMany()
     * 
     * // Get first 10 UserTrackingSubjects
     * const userTrackingSubjects = await prisma.userTrackingSubject.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userTrackingSubjectWithIdOnly = await prisma.userTrackingSubject.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserTrackingSubjectFindManyArgs>(args?: SelectSubset<T, UserTrackingSubjectFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserTrackingSubject.
     * @param {UserTrackingSubjectCreateArgs} args - Arguments to create a UserTrackingSubject.
     * @example
     * // Create one UserTrackingSubject
     * const UserTrackingSubject = await prisma.userTrackingSubject.create({
     *   data: {
     *     // ... data to create a UserTrackingSubject
     *   }
     * })
     * 
     */
    create<T extends UserTrackingSubjectCreateArgs>(args: SelectSubset<T, UserTrackingSubjectCreateArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserTrackingSubjects.
     * @param {UserTrackingSubjectCreateManyArgs} args - Arguments to create many UserTrackingSubjects.
     * @example
     * // Create many UserTrackingSubjects
     * const userTrackingSubject = await prisma.userTrackingSubject.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserTrackingSubjectCreateManyArgs>(args?: SelectSubset<T, UserTrackingSubjectCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UserTrackingSubject.
     * @param {UserTrackingSubjectDeleteArgs} args - Arguments to delete one UserTrackingSubject.
     * @example
     * // Delete one UserTrackingSubject
     * const UserTrackingSubject = await prisma.userTrackingSubject.delete({
     *   where: {
     *     // ... filter to delete one UserTrackingSubject
     *   }
     * })
     * 
     */
    delete<T extends UserTrackingSubjectDeleteArgs>(args: SelectSubset<T, UserTrackingSubjectDeleteArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserTrackingSubject.
     * @param {UserTrackingSubjectUpdateArgs} args - Arguments to update one UserTrackingSubject.
     * @example
     * // Update one UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserTrackingSubjectUpdateArgs>(args: SelectSubset<T, UserTrackingSubjectUpdateArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserTrackingSubjects.
     * @param {UserTrackingSubjectDeleteManyArgs} args - Arguments to filter UserTrackingSubjects to delete.
     * @example
     * // Delete a few UserTrackingSubjects
     * const { count } = await prisma.userTrackingSubject.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserTrackingSubjectDeleteManyArgs>(args?: SelectSubset<T, UserTrackingSubjectDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserTrackingSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserTrackingSubjects
     * const userTrackingSubject = await prisma.userTrackingSubject.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserTrackingSubjectUpdateManyArgs>(args: SelectSubset<T, UserTrackingSubjectUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UserTrackingSubject.
     * @param {UserTrackingSubjectUpsertArgs} args - Arguments to update or create a UserTrackingSubject.
     * @example
     * // Update or create a UserTrackingSubject
     * const userTrackingSubject = await prisma.userTrackingSubject.upsert({
     *   create: {
     *     // ... data to create a UserTrackingSubject
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserTrackingSubject we want to update
     *   }
     * })
     */
    upsert<T extends UserTrackingSubjectUpsertArgs>(args: SelectSubset<T, UserTrackingSubjectUpsertArgs<ExtArgs>>): Prisma__UserTrackingSubjectClient<$Result.GetResult<Prisma.$UserTrackingSubjectPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserTrackingSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectCountArgs} args - Arguments to filter UserTrackingSubjects to count.
     * @example
     * // Count the number of UserTrackingSubjects
     * const count = await prisma.userTrackingSubject.count({
     *   where: {
     *     // ... the filter for the UserTrackingSubjects we want to count
     *   }
     * })
    **/
    count<T extends UserTrackingSubjectCountArgs>(
      args?: Subset<T, UserTrackingSubjectCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserTrackingSubjectCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserTrackingSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserTrackingSubjectAggregateArgs>(args: Subset<T, UserTrackingSubjectAggregateArgs>): Prisma.PrismaPromise<GetUserTrackingSubjectAggregateType<T>>

    /**
     * Group by UserTrackingSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserTrackingSubjectGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserTrackingSubjectGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserTrackingSubjectGroupByArgs['orderBy'] }
        : { orderBy?: UserTrackingSubjectGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserTrackingSubjectGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserTrackingSubjectGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserTrackingSubject model
   */
  readonly fields: UserTrackingSubjectFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserTrackingSubject.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserTrackingSubjectClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserTrackingSubject model
   */
  interface UserTrackingSubjectFieldRefs {
    readonly id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly class_id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly specialization_id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly group_id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly subject_id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly user_id: FieldRef<"UserTrackingSubject", 'Int'>
    readonly created_by: FieldRef<"UserTrackingSubject", 'Int'>
    readonly created_at: FieldRef<"UserTrackingSubject", 'DateTime'>
    readonly updated_at: FieldRef<"UserTrackingSubject", 'DateTime'>
    readonly deleted_at: FieldRef<"UserTrackingSubject", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * UserTrackingSubject findUnique
   */
  export type UserTrackingSubjectFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackingSubject to fetch.
     */
    where: UserTrackingSubjectWhereUniqueInput
  }

  /**
   * UserTrackingSubject findUniqueOrThrow
   */
  export type UserTrackingSubjectFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackingSubject to fetch.
     */
    where: UserTrackingSubjectWhereUniqueInput
  }

  /**
   * UserTrackingSubject findFirst
   */
  export type UserTrackingSubjectFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackingSubject to fetch.
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackingSubjects to fetch.
     */
    orderBy?: UserTrackingSubjectOrderByWithRelationInput | UserTrackingSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserTrackingSubjects.
     */
    cursor?: UserTrackingSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackingSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackingSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserTrackingSubjects.
     */
    distinct?: UserTrackingSubjectScalarFieldEnum | UserTrackingSubjectScalarFieldEnum[]
  }

  /**
   * UserTrackingSubject findFirstOrThrow
   */
  export type UserTrackingSubjectFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackingSubject to fetch.
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackingSubjects to fetch.
     */
    orderBy?: UserTrackingSubjectOrderByWithRelationInput | UserTrackingSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserTrackingSubjects.
     */
    cursor?: UserTrackingSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackingSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackingSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserTrackingSubjects.
     */
    distinct?: UserTrackingSubjectScalarFieldEnum | UserTrackingSubjectScalarFieldEnum[]
  }

  /**
   * UserTrackingSubject findMany
   */
  export type UserTrackingSubjectFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter, which UserTrackingSubjects to fetch.
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserTrackingSubjects to fetch.
     */
    orderBy?: UserTrackingSubjectOrderByWithRelationInput | UserTrackingSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserTrackingSubjects.
     */
    cursor?: UserTrackingSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserTrackingSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserTrackingSubjects.
     */
    skip?: number
    distinct?: UserTrackingSubjectScalarFieldEnum | UserTrackingSubjectScalarFieldEnum[]
  }

  /**
   * UserTrackingSubject create
   */
  export type UserTrackingSubjectCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * The data needed to create a UserTrackingSubject.
     */
    data: XOR<UserTrackingSubjectCreateInput, UserTrackingSubjectUncheckedCreateInput>
  }

  /**
   * UserTrackingSubject createMany
   */
  export type UserTrackingSubjectCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserTrackingSubjects.
     */
    data: UserTrackingSubjectCreateManyInput | UserTrackingSubjectCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserTrackingSubject update
   */
  export type UserTrackingSubjectUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * The data needed to update a UserTrackingSubject.
     */
    data: XOR<UserTrackingSubjectUpdateInput, UserTrackingSubjectUncheckedUpdateInput>
    /**
     * Choose, which UserTrackingSubject to update.
     */
    where: UserTrackingSubjectWhereUniqueInput
  }

  /**
   * UserTrackingSubject updateMany
   */
  export type UserTrackingSubjectUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserTrackingSubjects.
     */
    data: XOR<UserTrackingSubjectUpdateManyMutationInput, UserTrackingSubjectUncheckedUpdateManyInput>
    /**
     * Filter which UserTrackingSubjects to update
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * Limit how many UserTrackingSubjects to update.
     */
    limit?: number
  }

  /**
   * UserTrackingSubject upsert
   */
  export type UserTrackingSubjectUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * The filter to search for the UserTrackingSubject to update in case it exists.
     */
    where: UserTrackingSubjectWhereUniqueInput
    /**
     * In case the UserTrackingSubject found by the `where` argument doesn't exist, create a new UserTrackingSubject with this data.
     */
    create: XOR<UserTrackingSubjectCreateInput, UserTrackingSubjectUncheckedCreateInput>
    /**
     * In case the UserTrackingSubject was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserTrackingSubjectUpdateInput, UserTrackingSubjectUncheckedUpdateInput>
  }

  /**
   * UserTrackingSubject delete
   */
  export type UserTrackingSubjectDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
    /**
     * Filter which UserTrackingSubject to delete.
     */
    where: UserTrackingSubjectWhereUniqueInput
  }

  /**
   * UserTrackingSubject deleteMany
   */
  export type UserTrackingSubjectDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserTrackingSubjects to delete
     */
    where?: UserTrackingSubjectWhereInput
    /**
     * Limit how many UserTrackingSubjects to delete.
     */
    limit?: number
  }

  /**
   * UserTrackingSubject without action
   */
  export type UserTrackingSubjectDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserTrackingSubject
     */
    select?: UserTrackingSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserTrackingSubject
     */
    omit?: UserTrackingSubjectOmit<ExtArgs> | null
  }


  /**
   * Model AllUser
   */

  export type AggregateAllUser = {
    _count: AllUserCountAggregateOutputType | null
    _avg: AllUserAvgAggregateOutputType | null
    _sum: AllUserSumAggregateOutputType | null
    _min: AllUserMinAggregateOutputType | null
    _max: AllUserMaxAggregateOutputType | null
  }

  export type AllUserAvgAggregateOutputType = {
    id: number | null
    model_id: number | null
  }

  export type AllUserSumAggregateOutputType = {
    id: number | null
    model_id: number | null
  }

  export type AllUserMinAggregateOutputType = {
    id: number | null
    model: string | null
    model_id: number | null
  }

  export type AllUserMaxAggregateOutputType = {
    id: number | null
    model: string | null
    model_id: number | null
  }

  export type AllUserCountAggregateOutputType = {
    id: number
    model: number
    model_id: number
    _all: number
  }


  export type AllUserAvgAggregateInputType = {
    id?: true
    model_id?: true
  }

  export type AllUserSumAggregateInputType = {
    id?: true
    model_id?: true
  }

  export type AllUserMinAggregateInputType = {
    id?: true
    model?: true
    model_id?: true
  }

  export type AllUserMaxAggregateInputType = {
    id?: true
    model?: true
    model_id?: true
  }

  export type AllUserCountAggregateInputType = {
    id?: true
    model?: true
    model_id?: true
    _all?: true
  }

  export type AllUserAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which AllUser to aggregate.
     */
    where?: AllUserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AllUsers to fetch.
     */
    orderBy?: AllUserOrderByWithRelationInput | AllUserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: AllUserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AllUsers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AllUsers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned AllUsers
    **/
    _count?: true | AllUserCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: AllUserAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: AllUserSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: AllUserMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: AllUserMaxAggregateInputType
  }

  export type GetAllUserAggregateType<T extends AllUserAggregateArgs> = {
        [P in keyof T & keyof AggregateAllUser]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateAllUser[P]>
      : GetScalarType<T[P], AggregateAllUser[P]>
  }




  export type AllUserGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: AllUserWhereInput
    orderBy?: AllUserOrderByWithAggregationInput | AllUserOrderByWithAggregationInput[]
    by: AllUserScalarFieldEnum[] | AllUserScalarFieldEnum
    having?: AllUserScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: AllUserCountAggregateInputType | true
    _avg?: AllUserAvgAggregateInputType
    _sum?: AllUserSumAggregateInputType
    _min?: AllUserMinAggregateInputType
    _max?: AllUserMaxAggregateInputType
  }

  export type AllUserGroupByOutputType = {
    id: number
    model: string
    model_id: number
    _count: AllUserCountAggregateOutputType | null
    _avg: AllUserAvgAggregateOutputType | null
    _sum: AllUserSumAggregateOutputType | null
    _min: AllUserMinAggregateOutputType | null
    _max: AllUserMaxAggregateOutputType | null
  }

  type GetAllUserGroupByPayload<T extends AllUserGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<AllUserGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof AllUserGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], AllUserGroupByOutputType[P]>
            : GetScalarType<T[P], AllUserGroupByOutputType[P]>
        }
      >
    >


  export type AllUserSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    model?: boolean
    model_id?: boolean
  }, ExtArgs["result"]["allUser"]>



  export type AllUserSelectScalar = {
    id?: boolean
    model?: boolean
    model_id?: boolean
  }

  export type AllUserOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "model" | "model_id", ExtArgs["result"]["allUser"]>

  export type $AllUserPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "AllUser"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      model: string
      model_id: number
    }, ExtArgs["result"]["allUser"]>
    composites: {}
  }

  type AllUserGetPayload<S extends boolean | null | undefined | AllUserDefaultArgs> = $Result.GetResult<Prisma.$AllUserPayload, S>

  type AllUserCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<AllUserFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: AllUserCountAggregateInputType | true
    }

  export interface AllUserDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['AllUser'], meta: { name: 'AllUser' } }
    /**
     * Find zero or one AllUser that matches the filter.
     * @param {AllUserFindUniqueArgs} args - Arguments to find a AllUser
     * @example
     * // Get one AllUser
     * const allUser = await prisma.allUser.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends AllUserFindUniqueArgs>(args: SelectSubset<T, AllUserFindUniqueArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one AllUser that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {AllUserFindUniqueOrThrowArgs} args - Arguments to find a AllUser
     * @example
     * // Get one AllUser
     * const allUser = await prisma.allUser.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends AllUserFindUniqueOrThrowArgs>(args: SelectSubset<T, AllUserFindUniqueOrThrowArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first AllUser that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserFindFirstArgs} args - Arguments to find a AllUser
     * @example
     * // Get one AllUser
     * const allUser = await prisma.allUser.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends AllUserFindFirstArgs>(args?: SelectSubset<T, AllUserFindFirstArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first AllUser that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserFindFirstOrThrowArgs} args - Arguments to find a AllUser
     * @example
     * // Get one AllUser
     * const allUser = await prisma.allUser.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends AllUserFindFirstOrThrowArgs>(args?: SelectSubset<T, AllUserFindFirstOrThrowArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more AllUsers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all AllUsers
     * const allUsers = await prisma.allUser.findMany()
     * 
     * // Get first 10 AllUsers
     * const allUsers = await prisma.allUser.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const allUserWithIdOnly = await prisma.allUser.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends AllUserFindManyArgs>(args?: SelectSubset<T, AllUserFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a AllUser.
     * @param {AllUserCreateArgs} args - Arguments to create a AllUser.
     * @example
     * // Create one AllUser
     * const AllUser = await prisma.allUser.create({
     *   data: {
     *     // ... data to create a AllUser
     *   }
     * })
     * 
     */
    create<T extends AllUserCreateArgs>(args: SelectSubset<T, AllUserCreateArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many AllUsers.
     * @param {AllUserCreateManyArgs} args - Arguments to create many AllUsers.
     * @example
     * // Create many AllUsers
     * const allUser = await prisma.allUser.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends AllUserCreateManyArgs>(args?: SelectSubset<T, AllUserCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a AllUser.
     * @param {AllUserDeleteArgs} args - Arguments to delete one AllUser.
     * @example
     * // Delete one AllUser
     * const AllUser = await prisma.allUser.delete({
     *   where: {
     *     // ... filter to delete one AllUser
     *   }
     * })
     * 
     */
    delete<T extends AllUserDeleteArgs>(args: SelectSubset<T, AllUserDeleteArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one AllUser.
     * @param {AllUserUpdateArgs} args - Arguments to update one AllUser.
     * @example
     * // Update one AllUser
     * const allUser = await prisma.allUser.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends AllUserUpdateArgs>(args: SelectSubset<T, AllUserUpdateArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more AllUsers.
     * @param {AllUserDeleteManyArgs} args - Arguments to filter AllUsers to delete.
     * @example
     * // Delete a few AllUsers
     * const { count } = await prisma.allUser.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends AllUserDeleteManyArgs>(args?: SelectSubset<T, AllUserDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more AllUsers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many AllUsers
     * const allUser = await prisma.allUser.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends AllUserUpdateManyArgs>(args: SelectSubset<T, AllUserUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one AllUser.
     * @param {AllUserUpsertArgs} args - Arguments to update or create a AllUser.
     * @example
     * // Update or create a AllUser
     * const allUser = await prisma.allUser.upsert({
     *   create: {
     *     // ... data to create a AllUser
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the AllUser we want to update
     *   }
     * })
     */
    upsert<T extends AllUserUpsertArgs>(args: SelectSubset<T, AllUserUpsertArgs<ExtArgs>>): Prisma__AllUserClient<$Result.GetResult<Prisma.$AllUserPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of AllUsers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserCountArgs} args - Arguments to filter AllUsers to count.
     * @example
     * // Count the number of AllUsers
     * const count = await prisma.allUser.count({
     *   where: {
     *     // ... the filter for the AllUsers we want to count
     *   }
     * })
    **/
    count<T extends AllUserCountArgs>(
      args?: Subset<T, AllUserCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], AllUserCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a AllUser.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends AllUserAggregateArgs>(args: Subset<T, AllUserAggregateArgs>): Prisma.PrismaPromise<GetAllUserAggregateType<T>>

    /**
     * Group by AllUser.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AllUserGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends AllUserGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: AllUserGroupByArgs['orderBy'] }
        : { orderBy?: AllUserGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, AllUserGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetAllUserGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the AllUser model
   */
  readonly fields: AllUserFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for AllUser.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__AllUserClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the AllUser model
   */
  interface AllUserFieldRefs {
    readonly id: FieldRef<"AllUser", 'Int'>
    readonly model: FieldRef<"AllUser", 'String'>
    readonly model_id: FieldRef<"AllUser", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * AllUser findUnique
   */
  export type AllUserFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter, which AllUser to fetch.
     */
    where: AllUserWhereUniqueInput
  }

  /**
   * AllUser findUniqueOrThrow
   */
  export type AllUserFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter, which AllUser to fetch.
     */
    where: AllUserWhereUniqueInput
  }

  /**
   * AllUser findFirst
   */
  export type AllUserFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter, which AllUser to fetch.
     */
    where?: AllUserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AllUsers to fetch.
     */
    orderBy?: AllUserOrderByWithRelationInput | AllUserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for AllUsers.
     */
    cursor?: AllUserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AllUsers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AllUsers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of AllUsers.
     */
    distinct?: AllUserScalarFieldEnum | AllUserScalarFieldEnum[]
  }

  /**
   * AllUser findFirstOrThrow
   */
  export type AllUserFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter, which AllUser to fetch.
     */
    where?: AllUserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AllUsers to fetch.
     */
    orderBy?: AllUserOrderByWithRelationInput | AllUserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for AllUsers.
     */
    cursor?: AllUserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AllUsers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AllUsers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of AllUsers.
     */
    distinct?: AllUserScalarFieldEnum | AllUserScalarFieldEnum[]
  }

  /**
   * AllUser findMany
   */
  export type AllUserFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter, which AllUsers to fetch.
     */
    where?: AllUserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AllUsers to fetch.
     */
    orderBy?: AllUserOrderByWithRelationInput | AllUserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing AllUsers.
     */
    cursor?: AllUserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AllUsers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AllUsers.
     */
    skip?: number
    distinct?: AllUserScalarFieldEnum | AllUserScalarFieldEnum[]
  }

  /**
   * AllUser create
   */
  export type AllUserCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * The data needed to create a AllUser.
     */
    data: XOR<AllUserCreateInput, AllUserUncheckedCreateInput>
  }

  /**
   * AllUser createMany
   */
  export type AllUserCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many AllUsers.
     */
    data: AllUserCreateManyInput | AllUserCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * AllUser update
   */
  export type AllUserUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * The data needed to update a AllUser.
     */
    data: XOR<AllUserUpdateInput, AllUserUncheckedUpdateInput>
    /**
     * Choose, which AllUser to update.
     */
    where: AllUserWhereUniqueInput
  }

  /**
   * AllUser updateMany
   */
  export type AllUserUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update AllUsers.
     */
    data: XOR<AllUserUpdateManyMutationInput, AllUserUncheckedUpdateManyInput>
    /**
     * Filter which AllUsers to update
     */
    where?: AllUserWhereInput
    /**
     * Limit how many AllUsers to update.
     */
    limit?: number
  }

  /**
   * AllUser upsert
   */
  export type AllUserUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * The filter to search for the AllUser to update in case it exists.
     */
    where: AllUserWhereUniqueInput
    /**
     * In case the AllUser found by the `where` argument doesn't exist, create a new AllUser with this data.
     */
    create: XOR<AllUserCreateInput, AllUserUncheckedCreateInput>
    /**
     * In case the AllUser was found with the provided `where` argument, update it with this data.
     */
    update: XOR<AllUserUpdateInput, AllUserUncheckedUpdateInput>
  }

  /**
   * AllUser delete
   */
  export type AllUserDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
    /**
     * Filter which AllUser to delete.
     */
    where: AllUserWhereUniqueInput
  }

  /**
   * AllUser deleteMany
   */
  export type AllUserDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which AllUsers to delete
     */
    where?: AllUserWhereInput
    /**
     * Limit how many AllUsers to delete.
     */
    limit?: number
  }

  /**
   * AllUser without action
   */
  export type AllUserDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AllUser
     */
    select?: AllUserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AllUser
     */
    omit?: AllUserOmit<ExtArgs> | null
  }


  /**
   * Model User
   */

  export type AggregateUser = {
    _count: UserCountAggregateOutputType | null
    _avg: UserAvgAggregateOutputType | null
    _sum: UserSumAggregateOutputType | null
    _min: UserMinAggregateOutputType | null
    _max: UserMaxAggregateOutputType | null
  }

  export type UserAvgAggregateOutputType = {
    id: number | null
    user_country_id: number | null
    user_state_id: number | null
    user_city_id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    user_sex: number | null
    qualification_id: number | null
    user_active: number | null
    user_must_change_password: number | null
    use_role: number | null
    created_by: number | null
  }

  export type UserSumAggregateOutputType = {
    id: number | null
    user_country_id: number | null
    user_state_id: number | null
    user_city_id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    user_sex: number | null
    qualification_id: number | null
    user_active: number | null
    user_must_change_password: number | null
    use_role: number | null
    created_by: number | null
  }

  export type UserMinAggregateOutputType = {
    id: number | null
    uuid: string | null
    user_country_id: number | null
    user_state_id: number | null
    user_city_id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    staff_dept: $Enums.users_staff_dept | null
    user_name: string | null
    user_phone: string | null
    user_sex: number | null
    email: string | null
    email_verified_at: Date | null
    user_address: string | null
    qualification_id: number | null
    user_proffession: string | null
    profile_photo_path: string | null
    date_of_birth: Date | null
    breif_bio: string | null
    facebook_handle: string | null
    twitter_handle: string | null
    instagram_handle: string | null
    username: string | null
    password: string | null
    remember_token: string | null
    user_active: number | null
    user_must_change_password: number | null
    role: string | null
    user_type: string | null
    use_role: number | null
    user_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserMaxAggregateOutputType = {
    id: number | null
    uuid: string | null
    user_country_id: number | null
    user_state_id: number | null
    user_city_id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    staff_dept: $Enums.users_staff_dept | null
    user_name: string | null
    user_phone: string | null
    user_sex: number | null
    email: string | null
    email_verified_at: Date | null
    user_address: string | null
    qualification_id: number | null
    user_proffession: string | null
    profile_photo_path: string | null
    date_of_birth: Date | null
    breif_bio: string | null
    facebook_handle: string | null
    twitter_handle: string | null
    instagram_handle: string | null
    username: string | null
    password: string | null
    remember_token: string | null
    user_active: number | null
    user_must_change_password: number | null
    role: string | null
    user_type: string | null
    use_role: number | null
    user_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type UserCountAggregateOutputType = {
    id: number
    uuid: number
    user_country_id: number
    user_state_id: number
    user_city_id: number
    school_id: number
    branch_id: number
    local_id: number
    staff_dept: number
    user_name: number
    user_phone: number
    user_sex: number
    email: number
    email_verified_at: number
    user_address: number
    qualification_id: number
    user_proffession: number
    profile_photo_path: number
    date_of_birth: number
    breif_bio: number
    facebook_handle: number
    twitter_handle: number
    instagram_handle: number
    username: number
    password: number
    remember_token: number
    user_active: number
    user_must_change_password: number
    role: number
    user_type: number
    use_role: number
    user_blocked_reason: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type UserAvgAggregateInputType = {
    id?: true
    user_country_id?: true
    user_state_id?: true
    user_city_id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    user_sex?: true
    qualification_id?: true
    user_active?: true
    user_must_change_password?: true
    use_role?: true
    created_by?: true
  }

  export type UserSumAggregateInputType = {
    id?: true
    user_country_id?: true
    user_state_id?: true
    user_city_id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    user_sex?: true
    qualification_id?: true
    user_active?: true
    user_must_change_password?: true
    use_role?: true
    created_by?: true
  }

  export type UserMinAggregateInputType = {
    id?: true
    uuid?: true
    user_country_id?: true
    user_state_id?: true
    user_city_id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    staff_dept?: true
    user_name?: true
    user_phone?: true
    user_sex?: true
    email?: true
    email_verified_at?: true
    user_address?: true
    qualification_id?: true
    user_proffession?: true
    profile_photo_path?: true
    date_of_birth?: true
    breif_bio?: true
    facebook_handle?: true
    twitter_handle?: true
    instagram_handle?: true
    username?: true
    password?: true
    remember_token?: true
    user_active?: true
    user_must_change_password?: true
    role?: true
    user_type?: true
    use_role?: true
    user_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserMaxAggregateInputType = {
    id?: true
    uuid?: true
    user_country_id?: true
    user_state_id?: true
    user_city_id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    staff_dept?: true
    user_name?: true
    user_phone?: true
    user_sex?: true
    email?: true
    email_verified_at?: true
    user_address?: true
    qualification_id?: true
    user_proffession?: true
    profile_photo_path?: true
    date_of_birth?: true
    breif_bio?: true
    facebook_handle?: true
    twitter_handle?: true
    instagram_handle?: true
    username?: true
    password?: true
    remember_token?: true
    user_active?: true
    user_must_change_password?: true
    role?: true
    user_type?: true
    use_role?: true
    user_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type UserCountAggregateInputType = {
    id?: true
    uuid?: true
    user_country_id?: true
    user_state_id?: true
    user_city_id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    staff_dept?: true
    user_name?: true
    user_phone?: true
    user_sex?: true
    email?: true
    email_verified_at?: true
    user_address?: true
    qualification_id?: true
    user_proffession?: true
    profile_photo_path?: true
    date_of_birth?: true
    breif_bio?: true
    facebook_handle?: true
    twitter_handle?: true
    instagram_handle?: true
    username?: true
    password?: true
    remember_token?: true
    user_active?: true
    user_must_change_password?: true
    role?: true
    user_type?: true
    use_role?: true
    user_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type UserAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which User to aggregate.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Users
    **/
    _count?: true | UserCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserMaxAggregateInputType
  }

  export type GetUserAggregateType<T extends UserAggregateArgs> = {
        [P in keyof T & keyof AggregateUser]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUser[P]>
      : GetScalarType<T[P], AggregateUser[P]>
  }




  export type UserGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserWhereInput
    orderBy?: UserOrderByWithAggregationInput | UserOrderByWithAggregationInput[]
    by: UserScalarFieldEnum[] | UserScalarFieldEnum
    having?: UserScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserCountAggregateInputType | true
    _avg?: UserAvgAggregateInputType
    _sum?: UserSumAggregateInputType
    _min?: UserMinAggregateInputType
    _max?: UserMaxAggregateInputType
  }

  export type UserGroupByOutputType = {
    id: number
    uuid: string
    user_country_id: number | null
    user_state_id: number | null
    user_city_id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at: Date | null
    user_address: string
    qualification_id: number | null
    user_proffession: string | null
    profile_photo_path: string | null
    date_of_birth: Date | null
    breif_bio: string | null
    facebook_handle: string | null
    twitter_handle: string | null
    instagram_handle: string | null
    username: string | null
    password: string
    remember_token: string | null
    user_active: number
    user_must_change_password: number
    role: string | null
    user_type: string | null
    use_role: number
    user_blocked_reason: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: UserCountAggregateOutputType | null
    _avg: UserAvgAggregateOutputType | null
    _sum: UserSumAggregateOutputType | null
    _min: UserMinAggregateOutputType | null
    _max: UserMaxAggregateOutputType | null
  }

  type GetUserGroupByPayload<T extends UserGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserGroupByOutputType[P]>
            : GetScalarType<T[P], UserGroupByOutputType[P]>
        }
      >
    >


  export type UserSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    uuid?: boolean
    user_country_id?: boolean
    user_state_id?: boolean
    user_city_id?: boolean
    school_id?: boolean
    branch_id?: boolean
    local_id?: boolean
    staff_dept?: boolean
    user_name?: boolean
    user_phone?: boolean
    user_sex?: boolean
    email?: boolean
    email_verified_at?: boolean
    user_address?: boolean
    qualification_id?: boolean
    user_proffession?: boolean
    profile_photo_path?: boolean
    date_of_birth?: boolean
    breif_bio?: boolean
    facebook_handle?: boolean
    twitter_handle?: boolean
    instagram_handle?: boolean
    username?: boolean
    password?: boolean
    remember_token?: boolean
    user_active?: boolean
    user_must_change_password?: boolean
    role?: boolean
    user_type?: boolean
    use_role?: boolean
    user_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    CrudUserPermission?: boolean | User$CrudUserPermissionArgs<ExtArgs>
    PermissionUser?: boolean | User$PermissionUserArgs<ExtArgs>
    school?: boolean | User$schoolArgs<ExtArgs>
    branch?: boolean | User$branchArgs<ExtArgs>
    _count?: boolean | UserCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["user"]>



  export type UserSelectScalar = {
    id?: boolean
    uuid?: boolean
    user_country_id?: boolean
    user_state_id?: boolean
    user_city_id?: boolean
    school_id?: boolean
    branch_id?: boolean
    local_id?: boolean
    staff_dept?: boolean
    user_name?: boolean
    user_phone?: boolean
    user_sex?: boolean
    email?: boolean
    email_verified_at?: boolean
    user_address?: boolean
    qualification_id?: boolean
    user_proffession?: boolean
    profile_photo_path?: boolean
    date_of_birth?: boolean
    breif_bio?: boolean
    facebook_handle?: boolean
    twitter_handle?: boolean
    instagram_handle?: boolean
    username?: boolean
    password?: boolean
    remember_token?: boolean
    user_active?: boolean
    user_must_change_password?: boolean
    role?: boolean
    user_type?: boolean
    use_role?: boolean
    user_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type UserOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "uuid" | "user_country_id" | "user_state_id" | "user_city_id" | "school_id" | "branch_id" | "local_id" | "staff_dept" | "user_name" | "user_phone" | "user_sex" | "email" | "email_verified_at" | "user_address" | "qualification_id" | "user_proffession" | "profile_photo_path" | "date_of_birth" | "breif_bio" | "facebook_handle" | "twitter_handle" | "instagram_handle" | "username" | "password" | "remember_token" | "user_active" | "user_must_change_password" | "role" | "user_type" | "use_role" | "user_blocked_reason" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["user"]>
  export type UserInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    CrudUserPermission?: boolean | User$CrudUserPermissionArgs<ExtArgs>
    PermissionUser?: boolean | User$PermissionUserArgs<ExtArgs>
    school?: boolean | User$schoolArgs<ExtArgs>
    branch?: boolean | User$branchArgs<ExtArgs>
    _count?: boolean | UserCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $UserPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "User"
    objects: {
      CrudUserPermission: Prisma.$UserCrudPermissionPayload<ExtArgs>[]
      PermissionUser: Prisma.$UserPermissionPayload<ExtArgs>[]
      school: Prisma.$SchoolPayload<ExtArgs> | null
      branch: Prisma.$BranchPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      uuid: string
      user_country_id: number | null
      user_state_id: number | null
      user_city_id: number | null
      school_id: number | null
      branch_id: number | null
      local_id: number | null
      staff_dept: $Enums.users_staff_dept
      user_name: string
      user_phone: string
      user_sex: number
      email: string
      email_verified_at: Date | null
      user_address: string
      qualification_id: number | null
      user_proffession: string | null
      profile_photo_path: string | null
      date_of_birth: Date | null
      breif_bio: string | null
      facebook_handle: string | null
      twitter_handle: string | null
      instagram_handle: string | null
      username: string | null
      password: string
      remember_token: string | null
      user_active: number
      user_must_change_password: number
      role: string | null
      user_type: string | null
      use_role: number
      user_blocked_reason: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["user"]>
    composites: {}
  }

  type UserGetPayload<S extends boolean | null | undefined | UserDefaultArgs> = $Result.GetResult<Prisma.$UserPayload, S>

  type UserCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserCountAggregateInputType | true
    }

  export interface UserDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['User'], meta: { name: 'User' } }
    /**
     * Find zero or one User that matches the filter.
     * @param {UserFindUniqueArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserFindUniqueArgs>(args: SelectSubset<T, UserFindUniqueArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one User that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserFindUniqueOrThrowArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserFindUniqueOrThrowArgs>(args: SelectSubset<T, UserFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first User that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindFirstArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserFindFirstArgs>(args?: SelectSubset<T, UserFindFirstArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first User that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindFirstOrThrowArgs} args - Arguments to find a User
     * @example
     * // Get one User
     * const user = await prisma.user.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserFindFirstOrThrowArgs>(args?: SelectSubset<T, UserFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Users that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Users
     * const users = await prisma.user.findMany()
     * 
     * // Get first 10 Users
     * const users = await prisma.user.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userWithIdOnly = await prisma.user.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserFindManyArgs>(args?: SelectSubset<T, UserFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a User.
     * @param {UserCreateArgs} args - Arguments to create a User.
     * @example
     * // Create one User
     * const User = await prisma.user.create({
     *   data: {
     *     // ... data to create a User
     *   }
     * })
     * 
     */
    create<T extends UserCreateArgs>(args: SelectSubset<T, UserCreateArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Users.
     * @param {UserCreateManyArgs} args - Arguments to create many Users.
     * @example
     * // Create many Users
     * const user = await prisma.user.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserCreateManyArgs>(args?: SelectSubset<T, UserCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a User.
     * @param {UserDeleteArgs} args - Arguments to delete one User.
     * @example
     * // Delete one User
     * const User = await prisma.user.delete({
     *   where: {
     *     // ... filter to delete one User
     *   }
     * })
     * 
     */
    delete<T extends UserDeleteArgs>(args: SelectSubset<T, UserDeleteArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one User.
     * @param {UserUpdateArgs} args - Arguments to update one User.
     * @example
     * // Update one User
     * const user = await prisma.user.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserUpdateArgs>(args: SelectSubset<T, UserUpdateArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Users.
     * @param {UserDeleteManyArgs} args - Arguments to filter Users to delete.
     * @example
     * // Delete a few Users
     * const { count } = await prisma.user.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserDeleteManyArgs>(args?: SelectSubset<T, UserDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Users.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Users
     * const user = await prisma.user.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserUpdateManyArgs>(args: SelectSubset<T, UserUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one User.
     * @param {UserUpsertArgs} args - Arguments to update or create a User.
     * @example
     * // Update or create a User
     * const user = await prisma.user.upsert({
     *   create: {
     *     // ... data to create a User
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the User we want to update
     *   }
     * })
     */
    upsert<T extends UserUpsertArgs>(args: SelectSubset<T, UserUpsertArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Users.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCountArgs} args - Arguments to filter Users to count.
     * @example
     * // Count the number of Users
     * const count = await prisma.user.count({
     *   where: {
     *     // ... the filter for the Users we want to count
     *   }
     * })
    **/
    count<T extends UserCountArgs>(
      args?: Subset<T, UserCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a User.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserAggregateArgs>(args: Subset<T, UserAggregateArgs>): Prisma.PrismaPromise<GetUserAggregateType<T>>

    /**
     * Group by User.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserGroupByArgs['orderBy'] }
        : { orderBy?: UserGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the User model
   */
  readonly fields: UserFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for User.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    CrudUserPermission<T extends User$CrudUserPermissionArgs<ExtArgs> = {}>(args?: Subset<T, User$CrudUserPermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    PermissionUser<T extends User$PermissionUserArgs<ExtArgs> = {}>(args?: Subset<T, User$PermissionUserArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    school<T extends User$schoolArgs<ExtArgs> = {}>(args?: Subset<T, User$schoolArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    branch<T extends User$branchArgs<ExtArgs> = {}>(args?: Subset<T, User$branchArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the User model
   */
  interface UserFieldRefs {
    readonly id: FieldRef<"User", 'Int'>
    readonly uuid: FieldRef<"User", 'String'>
    readonly user_country_id: FieldRef<"User", 'Int'>
    readonly user_state_id: FieldRef<"User", 'Int'>
    readonly user_city_id: FieldRef<"User", 'Int'>
    readonly school_id: FieldRef<"User", 'Int'>
    readonly branch_id: FieldRef<"User", 'Int'>
    readonly local_id: FieldRef<"User", 'Int'>
    readonly staff_dept: FieldRef<"User", 'users_staff_dept'>
    readonly user_name: FieldRef<"User", 'String'>
    readonly user_phone: FieldRef<"User", 'String'>
    readonly user_sex: FieldRef<"User", 'Int'>
    readonly email: FieldRef<"User", 'String'>
    readonly email_verified_at: FieldRef<"User", 'DateTime'>
    readonly user_address: FieldRef<"User", 'String'>
    readonly qualification_id: FieldRef<"User", 'Int'>
    readonly user_proffession: FieldRef<"User", 'String'>
    readonly profile_photo_path: FieldRef<"User", 'String'>
    readonly date_of_birth: FieldRef<"User", 'DateTime'>
    readonly breif_bio: FieldRef<"User", 'String'>
    readonly facebook_handle: FieldRef<"User", 'String'>
    readonly twitter_handle: FieldRef<"User", 'String'>
    readonly instagram_handle: FieldRef<"User", 'String'>
    readonly username: FieldRef<"User", 'String'>
    readonly password: FieldRef<"User", 'String'>
    readonly remember_token: FieldRef<"User", 'String'>
    readonly user_active: FieldRef<"User", 'Int'>
    readonly user_must_change_password: FieldRef<"User", 'Int'>
    readonly role: FieldRef<"User", 'String'>
    readonly user_type: FieldRef<"User", 'String'>
    readonly use_role: FieldRef<"User", 'Int'>
    readonly user_blocked_reason: FieldRef<"User", 'String'>
    readonly created_by: FieldRef<"User", 'Int'>
    readonly created_at: FieldRef<"User", 'DateTime'>
    readonly updated_at: FieldRef<"User", 'DateTime'>
    readonly deleted_at: FieldRef<"User", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * User findUnique
   */
  export type UserFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User findUniqueOrThrow
   */
  export type UserFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User findFirst
   */
  export type UserFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Users.
     */
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User findFirstOrThrow
   */
  export type UserFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which User to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Users.
     */
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User findMany
   */
  export type UserFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter, which Users to fetch.
     */
    where?: UserWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Users to fetch.
     */
    orderBy?: UserOrderByWithRelationInput | UserOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Users.
     */
    cursor?: UserWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Users from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Users.
     */
    skip?: number
    distinct?: UserScalarFieldEnum | UserScalarFieldEnum[]
  }

  /**
   * User create
   */
  export type UserCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The data needed to create a User.
     */
    data: XOR<UserCreateInput, UserUncheckedCreateInput>
  }

  /**
   * User createMany
   */
  export type UserCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Users.
     */
    data: UserCreateManyInput | UserCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * User update
   */
  export type UserUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The data needed to update a User.
     */
    data: XOR<UserUpdateInput, UserUncheckedUpdateInput>
    /**
     * Choose, which User to update.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User updateMany
   */
  export type UserUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Users.
     */
    data: XOR<UserUpdateManyMutationInput, UserUncheckedUpdateManyInput>
    /**
     * Filter which Users to update
     */
    where?: UserWhereInput
    /**
     * Limit how many Users to update.
     */
    limit?: number
  }

  /**
   * User upsert
   */
  export type UserUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * The filter to search for the User to update in case it exists.
     */
    where: UserWhereUniqueInput
    /**
     * In case the User found by the `where` argument doesn't exist, create a new User with this data.
     */
    create: XOR<UserCreateInput, UserUncheckedCreateInput>
    /**
     * In case the User was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserUpdateInput, UserUncheckedUpdateInput>
  }

  /**
   * User delete
   */
  export type UserDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    /**
     * Filter which User to delete.
     */
    where: UserWhereUniqueInput
  }

  /**
   * User deleteMany
   */
  export type UserDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Users to delete
     */
    where?: UserWhereInput
    /**
     * Limit how many Users to delete.
     */
    limit?: number
  }

  /**
   * User.CrudUserPermission
   */
  export type User$CrudUserPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    where?: UserCrudPermissionWhereInput
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    cursor?: UserCrudPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserCrudPermissionScalarFieldEnum | UserCrudPermissionScalarFieldEnum[]
  }

  /**
   * User.PermissionUser
   */
  export type User$PermissionUserArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    where?: UserPermissionWhereInput
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    cursor?: UserPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserPermissionScalarFieldEnum | UserPermissionScalarFieldEnum[]
  }

  /**
   * User.school
   */
  export type User$schoolArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    where?: SchoolWhereInput
  }

  /**
   * User.branch
   */
  export type User$branchArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
  }

  /**
   * User without action
   */
  export type UserDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
  }


  /**
   * Model Student
   */

  export type AggregateStudent = {
    _count: StudentCountAggregateOutputType | null
    _avg: StudentAvgAggregateOutputType | null
    _sum: StudentSumAggregateOutputType | null
    _min: StudentMinAggregateOutputType | null
    _max: StudentMaxAggregateOutputType | null
  }

  export type StudentAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    student_country_id: number | null
    student_state_id: number | null
    guardian_id: number | null
    religion_id: number | null
    student_sex: number | null
    student_active: number | null
    use_role: number | null
    created_by: number | null
  }

  export type StudentSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    student_country_id: number | null
    student_state_id: number | null
    guardian_id: number | null
    religion_id: number | null
    student_sex: number | null
    student_active: number | null
    use_role: number | null
    created_by: number | null
  }

  export type StudentMinAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    student_country_id: number | null
    student_state_id: number | null
    guardian_id: number | null
    religion_id: number | null
    first_name: string | null
    middle_name: string | null
    last_name: string | null
    email: string | null
    student_phone: string | null
    student_address: string | null
    student_sex: number | null
    student_bio: string | null
    profile_photo_path: string | null
    username: string | null
    password: string | null
    student_active: number | null
    student_blocked_reason: string | null
    role: string | null
    user_type: string | null
    use_role: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentMaxAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_id: number | null
    branch_id: number | null
    local_id: number | null
    student_country_id: number | null
    student_state_id: number | null
    guardian_id: number | null
    religion_id: number | null
    first_name: string | null
    middle_name: string | null
    last_name: string | null
    email: string | null
    student_phone: string | null
    student_address: string | null
    student_sex: number | null
    student_bio: string | null
    profile_photo_path: string | null
    username: string | null
    password: string | null
    student_active: number | null
    student_blocked_reason: string | null
    role: string | null
    user_type: string | null
    use_role: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentCountAggregateOutputType = {
    id: number
    uuid: number
    school_id: number
    branch_id: number
    local_id: number
    student_country_id: number
    student_state_id: number
    guardian_id: number
    religion_id: number
    first_name: number
    middle_name: number
    last_name: number
    email: number
    student_phone: number
    student_address: number
    student_sex: number
    student_bio: number
    profile_photo_path: number
    username: number
    password: number
    student_active: number
    student_blocked_reason: number
    role: number
    user_type: number
    use_role: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type StudentAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    student_country_id?: true
    student_state_id?: true
    guardian_id?: true
    religion_id?: true
    student_sex?: true
    student_active?: true
    use_role?: true
    created_by?: true
  }

  export type StudentSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    student_country_id?: true
    student_state_id?: true
    guardian_id?: true
    religion_id?: true
    student_sex?: true
    student_active?: true
    use_role?: true
    created_by?: true
  }

  export type StudentMinAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    student_country_id?: true
    student_state_id?: true
    guardian_id?: true
    religion_id?: true
    first_name?: true
    middle_name?: true
    last_name?: true
    email?: true
    student_phone?: true
    student_address?: true
    student_sex?: true
    student_bio?: true
    profile_photo_path?: true
    username?: true
    password?: true
    student_active?: true
    student_blocked_reason?: true
    role?: true
    user_type?: true
    use_role?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentMaxAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    student_country_id?: true
    student_state_id?: true
    guardian_id?: true
    religion_id?: true
    first_name?: true
    middle_name?: true
    last_name?: true
    email?: true
    student_phone?: true
    student_address?: true
    student_sex?: true
    student_bio?: true
    profile_photo_path?: true
    username?: true
    password?: true
    student_active?: true
    student_blocked_reason?: true
    role?: true
    user_type?: true
    use_role?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentCountAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    local_id?: true
    student_country_id?: true
    student_state_id?: true
    guardian_id?: true
    religion_id?: true
    first_name?: true
    middle_name?: true
    last_name?: true
    email?: true
    student_phone?: true
    student_address?: true
    student_sex?: true
    student_bio?: true
    profile_photo_path?: true
    username?: true
    password?: true
    student_active?: true
    student_blocked_reason?: true
    role?: true
    user_type?: true
    use_role?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type StudentAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Student to aggregate.
     */
    where?: StudentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Students to fetch.
     */
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StudentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Students from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Students.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Students
    **/
    _count?: true | StudentCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StudentAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StudentSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StudentMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StudentMaxAggregateInputType
  }

  export type GetStudentAggregateType<T extends StudentAggregateArgs> = {
        [P in keyof T & keyof AggregateStudent]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStudent[P]>
      : GetScalarType<T[P], AggregateStudent[P]>
  }




  export type StudentGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentWhereInput
    orderBy?: StudentOrderByWithAggregationInput | StudentOrderByWithAggregationInput[]
    by: StudentScalarFieldEnum[] | StudentScalarFieldEnum
    having?: StudentScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StudentCountAggregateInputType | true
    _avg?: StudentAvgAggregateInputType
    _sum?: StudentSumAggregateInputType
    _min?: StudentMinAggregateInputType
    _max?: StudentMaxAggregateInputType
  }

  export type StudentGroupByOutputType = {
    id: number
    uuid: string | null
    school_id: number
    branch_id: number
    local_id: number | null
    student_country_id: number | null
    student_state_id: number | null
    guardian_id: number | null
    religion_id: number | null
    first_name: string
    middle_name: string | null
    last_name: string
    email: string | null
    student_phone: string | null
    student_address: string | null
    student_sex: number
    student_bio: string | null
    profile_photo_path: string | null
    username: string | null
    password: string | null
    student_active: number
    student_blocked_reason: string | null
    role: string | null
    user_type: string | null
    use_role: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: StudentCountAggregateOutputType | null
    _avg: StudentAvgAggregateOutputType | null
    _sum: StudentSumAggregateOutputType | null
    _min: StudentMinAggregateOutputType | null
    _max: StudentMaxAggregateOutputType | null
  }

  type GetStudentGroupByPayload<T extends StudentGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StudentGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StudentGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StudentGroupByOutputType[P]>
            : GetScalarType<T[P], StudentGroupByOutputType[P]>
        }
      >
    >


  export type StudentSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    uuid?: boolean
    school_id?: boolean
    branch_id?: boolean
    local_id?: boolean
    student_country_id?: boolean
    student_state_id?: boolean
    guardian_id?: boolean
    religion_id?: boolean
    first_name?: boolean
    middle_name?: boolean
    last_name?: boolean
    email?: boolean
    student_phone?: boolean
    student_address?: boolean
    student_sex?: boolean
    student_bio?: boolean
    profile_photo_path?: boolean
    username?: boolean
    password?: boolean
    student_active?: boolean
    student_blocked_reason?: boolean
    role?: boolean
    user_type?: boolean
    use_role?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    branch?: boolean | Student$branchArgs<ExtArgs>
    school?: boolean | Student$schoolArgs<ExtArgs>
    StudentTracking?: boolean | Student$StudentTrackingArgs<ExtArgs>
    _count?: boolean | StudentCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["student"]>



  export type StudentSelectScalar = {
    id?: boolean
    uuid?: boolean
    school_id?: boolean
    branch_id?: boolean
    local_id?: boolean
    student_country_id?: boolean
    student_state_id?: boolean
    guardian_id?: boolean
    religion_id?: boolean
    first_name?: boolean
    middle_name?: boolean
    last_name?: boolean
    email?: boolean
    student_phone?: boolean
    student_address?: boolean
    student_sex?: boolean
    student_bio?: boolean
    profile_photo_path?: boolean
    username?: boolean
    password?: boolean
    student_active?: boolean
    student_blocked_reason?: boolean
    role?: boolean
    user_type?: boolean
    use_role?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type StudentOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "uuid" | "school_id" | "branch_id" | "local_id" | "student_country_id" | "student_state_id" | "guardian_id" | "religion_id" | "first_name" | "middle_name" | "last_name" | "email" | "student_phone" | "student_address" | "student_sex" | "student_bio" | "profile_photo_path" | "username" | "password" | "student_active" | "student_blocked_reason" | "role" | "user_type" | "use_role" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["student"]>
  export type StudentInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    branch?: boolean | Student$branchArgs<ExtArgs>
    school?: boolean | Student$schoolArgs<ExtArgs>
    StudentTracking?: boolean | Student$StudentTrackingArgs<ExtArgs>
    _count?: boolean | StudentCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $StudentPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Student"
    objects: {
      branch: Prisma.$BranchPayload<ExtArgs> | null
      school: Prisma.$SchoolPayload<ExtArgs> | null
      StudentTracking: Prisma.$StudentTrackingPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      uuid: string | null
      school_id: number
      branch_id: number
      local_id: number | null
      student_country_id: number | null
      student_state_id: number | null
      guardian_id: number | null
      religion_id: number | null
      first_name: string
      middle_name: string | null
      last_name: string
      email: string | null
      student_phone: string | null
      student_address: string | null
      student_sex: number
      student_bio: string | null
      profile_photo_path: string | null
      username: string | null
      password: string | null
      student_active: number
      student_blocked_reason: string | null
      role: string | null
      user_type: string | null
      use_role: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["student"]>
    composites: {}
  }

  type StudentGetPayload<S extends boolean | null | undefined | StudentDefaultArgs> = $Result.GetResult<Prisma.$StudentPayload, S>

  type StudentCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StudentFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StudentCountAggregateInputType | true
    }

  export interface StudentDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Student'], meta: { name: 'Student' } }
    /**
     * Find zero or one Student that matches the filter.
     * @param {StudentFindUniqueArgs} args - Arguments to find a Student
     * @example
     * // Get one Student
     * const student = await prisma.student.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StudentFindUniqueArgs>(args: SelectSubset<T, StudentFindUniqueArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Student that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StudentFindUniqueOrThrowArgs} args - Arguments to find a Student
     * @example
     * // Get one Student
     * const student = await prisma.student.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StudentFindUniqueOrThrowArgs>(args: SelectSubset<T, StudentFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Student that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentFindFirstArgs} args - Arguments to find a Student
     * @example
     * // Get one Student
     * const student = await prisma.student.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StudentFindFirstArgs>(args?: SelectSubset<T, StudentFindFirstArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Student that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentFindFirstOrThrowArgs} args - Arguments to find a Student
     * @example
     * // Get one Student
     * const student = await prisma.student.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StudentFindFirstOrThrowArgs>(args?: SelectSubset<T, StudentFindFirstOrThrowArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Students that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Students
     * const students = await prisma.student.findMany()
     * 
     * // Get first 10 Students
     * const students = await prisma.student.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const studentWithIdOnly = await prisma.student.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StudentFindManyArgs>(args?: SelectSubset<T, StudentFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Student.
     * @param {StudentCreateArgs} args - Arguments to create a Student.
     * @example
     * // Create one Student
     * const Student = await prisma.student.create({
     *   data: {
     *     // ... data to create a Student
     *   }
     * })
     * 
     */
    create<T extends StudentCreateArgs>(args: SelectSubset<T, StudentCreateArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Students.
     * @param {StudentCreateManyArgs} args - Arguments to create many Students.
     * @example
     * // Create many Students
     * const student = await prisma.student.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StudentCreateManyArgs>(args?: SelectSubset<T, StudentCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Student.
     * @param {StudentDeleteArgs} args - Arguments to delete one Student.
     * @example
     * // Delete one Student
     * const Student = await prisma.student.delete({
     *   where: {
     *     // ... filter to delete one Student
     *   }
     * })
     * 
     */
    delete<T extends StudentDeleteArgs>(args: SelectSubset<T, StudentDeleteArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Student.
     * @param {StudentUpdateArgs} args - Arguments to update one Student.
     * @example
     * // Update one Student
     * const student = await prisma.student.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StudentUpdateArgs>(args: SelectSubset<T, StudentUpdateArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Students.
     * @param {StudentDeleteManyArgs} args - Arguments to filter Students to delete.
     * @example
     * // Delete a few Students
     * const { count } = await prisma.student.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StudentDeleteManyArgs>(args?: SelectSubset<T, StudentDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Students.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Students
     * const student = await prisma.student.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StudentUpdateManyArgs>(args: SelectSubset<T, StudentUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Student.
     * @param {StudentUpsertArgs} args - Arguments to update or create a Student.
     * @example
     * // Update or create a Student
     * const student = await prisma.student.upsert({
     *   create: {
     *     // ... data to create a Student
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Student we want to update
     *   }
     * })
     */
    upsert<T extends StudentUpsertArgs>(args: SelectSubset<T, StudentUpsertArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Students.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentCountArgs} args - Arguments to filter Students to count.
     * @example
     * // Count the number of Students
     * const count = await prisma.student.count({
     *   where: {
     *     // ... the filter for the Students we want to count
     *   }
     * })
    **/
    count<T extends StudentCountArgs>(
      args?: Subset<T, StudentCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StudentCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Student.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StudentAggregateArgs>(args: Subset<T, StudentAggregateArgs>): Prisma.PrismaPromise<GetStudentAggregateType<T>>

    /**
     * Group by Student.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StudentGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StudentGroupByArgs['orderBy'] }
        : { orderBy?: StudentGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StudentGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStudentGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Student model
   */
  readonly fields: StudentFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Student.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StudentClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    branch<T extends Student$branchArgs<ExtArgs> = {}>(args?: Subset<T, Student$branchArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    school<T extends Student$schoolArgs<ExtArgs> = {}>(args?: Subset<T, Student$schoolArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    StudentTracking<T extends Student$StudentTrackingArgs<ExtArgs> = {}>(args?: Subset<T, Student$StudentTrackingArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Student model
   */
  interface StudentFieldRefs {
    readonly id: FieldRef<"Student", 'Int'>
    readonly uuid: FieldRef<"Student", 'String'>
    readonly school_id: FieldRef<"Student", 'Int'>
    readonly branch_id: FieldRef<"Student", 'Int'>
    readonly local_id: FieldRef<"Student", 'Int'>
    readonly student_country_id: FieldRef<"Student", 'Int'>
    readonly student_state_id: FieldRef<"Student", 'Int'>
    readonly guardian_id: FieldRef<"Student", 'Int'>
    readonly religion_id: FieldRef<"Student", 'Int'>
    readonly first_name: FieldRef<"Student", 'String'>
    readonly middle_name: FieldRef<"Student", 'String'>
    readonly last_name: FieldRef<"Student", 'String'>
    readonly email: FieldRef<"Student", 'String'>
    readonly student_phone: FieldRef<"Student", 'String'>
    readonly student_address: FieldRef<"Student", 'String'>
    readonly student_sex: FieldRef<"Student", 'Int'>
    readonly student_bio: FieldRef<"Student", 'String'>
    readonly profile_photo_path: FieldRef<"Student", 'String'>
    readonly username: FieldRef<"Student", 'String'>
    readonly password: FieldRef<"Student", 'String'>
    readonly student_active: FieldRef<"Student", 'Int'>
    readonly student_blocked_reason: FieldRef<"Student", 'String'>
    readonly role: FieldRef<"Student", 'String'>
    readonly user_type: FieldRef<"Student", 'String'>
    readonly use_role: FieldRef<"Student", 'Int'>
    readonly created_by: FieldRef<"Student", 'Int'>
    readonly created_at: FieldRef<"Student", 'DateTime'>
    readonly updated_at: FieldRef<"Student", 'DateTime'>
    readonly deleted_at: FieldRef<"Student", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Student findUnique
   */
  export type StudentFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter, which Student to fetch.
     */
    where: StudentWhereUniqueInput
  }

  /**
   * Student findUniqueOrThrow
   */
  export type StudentFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter, which Student to fetch.
     */
    where: StudentWhereUniqueInput
  }

  /**
   * Student findFirst
   */
  export type StudentFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter, which Student to fetch.
     */
    where?: StudentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Students to fetch.
     */
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Students.
     */
    cursor?: StudentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Students from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Students.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Students.
     */
    distinct?: StudentScalarFieldEnum | StudentScalarFieldEnum[]
  }

  /**
   * Student findFirstOrThrow
   */
  export type StudentFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter, which Student to fetch.
     */
    where?: StudentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Students to fetch.
     */
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Students.
     */
    cursor?: StudentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Students from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Students.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Students.
     */
    distinct?: StudentScalarFieldEnum | StudentScalarFieldEnum[]
  }

  /**
   * Student findMany
   */
  export type StudentFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter, which Students to fetch.
     */
    where?: StudentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Students to fetch.
     */
    orderBy?: StudentOrderByWithRelationInput | StudentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Students.
     */
    cursor?: StudentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Students from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Students.
     */
    skip?: number
    distinct?: StudentScalarFieldEnum | StudentScalarFieldEnum[]
  }

  /**
   * Student create
   */
  export type StudentCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * The data needed to create a Student.
     */
    data: XOR<StudentCreateInput, StudentUncheckedCreateInput>
  }

  /**
   * Student createMany
   */
  export type StudentCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Students.
     */
    data: StudentCreateManyInput | StudentCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Student update
   */
  export type StudentUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * The data needed to update a Student.
     */
    data: XOR<StudentUpdateInput, StudentUncheckedUpdateInput>
    /**
     * Choose, which Student to update.
     */
    where: StudentWhereUniqueInput
  }

  /**
   * Student updateMany
   */
  export type StudentUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Students.
     */
    data: XOR<StudentUpdateManyMutationInput, StudentUncheckedUpdateManyInput>
    /**
     * Filter which Students to update
     */
    where?: StudentWhereInput
    /**
     * Limit how many Students to update.
     */
    limit?: number
  }

  /**
   * Student upsert
   */
  export type StudentUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * The filter to search for the Student to update in case it exists.
     */
    where: StudentWhereUniqueInput
    /**
     * In case the Student found by the `where` argument doesn't exist, create a new Student with this data.
     */
    create: XOR<StudentCreateInput, StudentUncheckedCreateInput>
    /**
     * In case the Student was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StudentUpdateInput, StudentUncheckedUpdateInput>
  }

  /**
   * Student delete
   */
  export type StudentDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
    /**
     * Filter which Student to delete.
     */
    where: StudentWhereUniqueInput
  }

  /**
   * Student deleteMany
   */
  export type StudentDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Students to delete
     */
    where?: StudentWhereInput
    /**
     * Limit how many Students to delete.
     */
    limit?: number
  }

  /**
   * Student.branch
   */
  export type Student$branchArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
  }

  /**
   * Student.school
   */
  export type Student$schoolArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    where?: SchoolWhereInput
  }

  /**
   * Student.StudentTracking
   */
  export type Student$StudentTrackingArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    where?: StudentTrackingWhereInput
    orderBy?: StudentTrackingOrderByWithRelationInput | StudentTrackingOrderByWithRelationInput[]
    cursor?: StudentTrackingWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StudentTrackingScalarFieldEnum | StudentTrackingScalarFieldEnum[]
  }

  /**
   * Student without action
   */
  export type StudentDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Student
     */
    select?: StudentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Student
     */
    omit?: StudentOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentInclude<ExtArgs> | null
  }


  /**
   * Model Guardian
   */

  export type AggregateGuardian = {
    _count: GuardianCountAggregateOutputType | null
    _avg: GuardianAvgAggregateOutputType | null
    _sum: GuardianSumAggregateOutputType | null
    _min: GuardianMinAggregateOutputType | null
    _max: GuardianMaxAggregateOutputType | null
  }

  export type GuardianAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    guardian_sex: number | null
    is_married: number | null
    marriage_disolved: number | null
    is_parent: number | null
    use_role: number | null
    guardian_active: number | null
    created_by: number | null
  }

  export type GuardianSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    guardian_sex: number | null
    is_married: number | null
    marriage_disolved: number | null
    is_parent: number | null
    use_role: number | null
    guardian_active: number | null
    created_by: number | null
  }

  export type GuardianMinAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_id: number | null
    branch_id: number | null
    surname: string | null
    first_name: string | null
    guardian_sex: number | null
    is_married: number | null
    marriage_disolved: number | null
    is_parent: number | null
    relation_how_related: string | null
    guardian_proffession: string | null
    phonenumber: string | null
    email: string | null
    role: string | null
    user_type: string | null
    password: string | null
    use_role: number | null
    guardian_active: number | null
    guardian_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type GuardianMaxAggregateOutputType = {
    id: number | null
    uuid: string | null
    school_id: number | null
    branch_id: number | null
    surname: string | null
    first_name: string | null
    guardian_sex: number | null
    is_married: number | null
    marriage_disolved: number | null
    is_parent: number | null
    relation_how_related: string | null
    guardian_proffession: string | null
    phonenumber: string | null
    email: string | null
    role: string | null
    user_type: string | null
    password: string | null
    use_role: number | null
    guardian_active: number | null
    guardian_blocked_reason: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type GuardianCountAggregateOutputType = {
    id: number
    uuid: number
    school_id: number
    branch_id: number
    surname: number
    first_name: number
    guardian_sex: number
    is_married: number
    marriage_disolved: number
    is_parent: number
    relation_how_related: number
    guardian_proffession: number
    phonenumber: number
    email: number
    role: number
    user_type: number
    password: number
    use_role: number
    guardian_active: number
    guardian_blocked_reason: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type GuardianAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    guardian_sex?: true
    is_married?: true
    marriage_disolved?: true
    is_parent?: true
    use_role?: true
    guardian_active?: true
    created_by?: true
  }

  export type GuardianSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    guardian_sex?: true
    is_married?: true
    marriage_disolved?: true
    is_parent?: true
    use_role?: true
    guardian_active?: true
    created_by?: true
  }

  export type GuardianMinAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    surname?: true
    first_name?: true
    guardian_sex?: true
    is_married?: true
    marriage_disolved?: true
    is_parent?: true
    relation_how_related?: true
    guardian_proffession?: true
    phonenumber?: true
    email?: true
    role?: true
    user_type?: true
    password?: true
    use_role?: true
    guardian_active?: true
    guardian_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type GuardianMaxAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    surname?: true
    first_name?: true
    guardian_sex?: true
    is_married?: true
    marriage_disolved?: true
    is_parent?: true
    relation_how_related?: true
    guardian_proffession?: true
    phonenumber?: true
    email?: true
    role?: true
    user_type?: true
    password?: true
    use_role?: true
    guardian_active?: true
    guardian_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type GuardianCountAggregateInputType = {
    id?: true
    uuid?: true
    school_id?: true
    branch_id?: true
    surname?: true
    first_name?: true
    guardian_sex?: true
    is_married?: true
    marriage_disolved?: true
    is_parent?: true
    relation_how_related?: true
    guardian_proffession?: true
    phonenumber?: true
    email?: true
    role?: true
    user_type?: true
    password?: true
    use_role?: true
    guardian_active?: true
    guardian_blocked_reason?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type GuardianAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Guardian to aggregate.
     */
    where?: GuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Guardians to fetch.
     */
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: GuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Guardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Guardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Guardians
    **/
    _count?: true | GuardianCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: GuardianAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: GuardianSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: GuardianMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: GuardianMaxAggregateInputType
  }

  export type GetGuardianAggregateType<T extends GuardianAggregateArgs> = {
        [P in keyof T & keyof AggregateGuardian]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateGuardian[P]>
      : GetScalarType<T[P], AggregateGuardian[P]>
  }




  export type GuardianGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: GuardianWhereInput
    orderBy?: GuardianOrderByWithAggregationInput | GuardianOrderByWithAggregationInput[]
    by: GuardianScalarFieldEnum[] | GuardianScalarFieldEnum
    having?: GuardianScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: GuardianCountAggregateInputType | true
    _avg?: GuardianAvgAggregateInputType
    _sum?: GuardianSumAggregateInputType
    _min?: GuardianMinAggregateInputType
    _max?: GuardianMaxAggregateInputType
  }

  export type GuardianGroupByOutputType = {
    id: number
    uuid: string | null
    school_id: number
    branch_id: number
    surname: string
    first_name: string | null
    guardian_sex: number
    is_married: number
    marriage_disolved: number
    is_parent: number
    relation_how_related: string | null
    guardian_proffession: string | null
    phonenumber: string | null
    email: string
    role: string | null
    user_type: string | null
    password: string | null
    use_role: number
    guardian_active: number
    guardian_blocked_reason: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: GuardianCountAggregateOutputType | null
    _avg: GuardianAvgAggregateOutputType | null
    _sum: GuardianSumAggregateOutputType | null
    _min: GuardianMinAggregateOutputType | null
    _max: GuardianMaxAggregateOutputType | null
  }

  type GetGuardianGroupByPayload<T extends GuardianGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<GuardianGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof GuardianGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], GuardianGroupByOutputType[P]>
            : GetScalarType<T[P], GuardianGroupByOutputType[P]>
        }
      >
    >


  export type GuardianSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    uuid?: boolean
    school_id?: boolean
    branch_id?: boolean
    surname?: boolean
    first_name?: boolean
    guardian_sex?: boolean
    is_married?: boolean
    marriage_disolved?: boolean
    is_parent?: boolean
    relation_how_related?: boolean
    guardian_proffession?: boolean
    phonenumber?: boolean
    email?: boolean
    role?: boolean
    user_type?: boolean
    password?: boolean
    use_role?: boolean
    guardian_active?: boolean
    guardian_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    school?: boolean | Guardian$schoolArgs<ExtArgs>
    branch?: boolean | Guardian$branchArgs<ExtArgs>
  }, ExtArgs["result"]["guardian"]>



  export type GuardianSelectScalar = {
    id?: boolean
    uuid?: boolean
    school_id?: boolean
    branch_id?: boolean
    surname?: boolean
    first_name?: boolean
    guardian_sex?: boolean
    is_married?: boolean
    marriage_disolved?: boolean
    is_parent?: boolean
    relation_how_related?: boolean
    guardian_proffession?: boolean
    phonenumber?: boolean
    email?: boolean
    role?: boolean
    user_type?: boolean
    password?: boolean
    use_role?: boolean
    guardian_active?: boolean
    guardian_blocked_reason?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type GuardianOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "uuid" | "school_id" | "branch_id" | "surname" | "first_name" | "guardian_sex" | "is_married" | "marriage_disolved" | "is_parent" | "relation_how_related" | "guardian_proffession" | "phonenumber" | "email" | "role" | "user_type" | "password" | "use_role" | "guardian_active" | "guardian_blocked_reason" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["guardian"]>
  export type GuardianInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    school?: boolean | Guardian$schoolArgs<ExtArgs>
    branch?: boolean | Guardian$branchArgs<ExtArgs>
  }

  export type $GuardianPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Guardian"
    objects: {
      school: Prisma.$SchoolPayload<ExtArgs> | null
      branch: Prisma.$BranchPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      uuid: string | null
      school_id: number
      branch_id: number
      surname: string
      first_name: string | null
      guardian_sex: number
      is_married: number
      marriage_disolved: number
      is_parent: number
      relation_how_related: string | null
      guardian_proffession: string | null
      phonenumber: string | null
      email: string
      role: string | null
      user_type: string | null
      password: string | null
      use_role: number
      guardian_active: number
      guardian_blocked_reason: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["guardian"]>
    composites: {}
  }

  type GuardianGetPayload<S extends boolean | null | undefined | GuardianDefaultArgs> = $Result.GetResult<Prisma.$GuardianPayload, S>

  type GuardianCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<GuardianFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: GuardianCountAggregateInputType | true
    }

  export interface GuardianDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Guardian'], meta: { name: 'Guardian' } }
    /**
     * Find zero or one Guardian that matches the filter.
     * @param {GuardianFindUniqueArgs} args - Arguments to find a Guardian
     * @example
     * // Get one Guardian
     * const guardian = await prisma.guardian.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends GuardianFindUniqueArgs>(args: SelectSubset<T, GuardianFindUniqueArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Guardian that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {GuardianFindUniqueOrThrowArgs} args - Arguments to find a Guardian
     * @example
     * // Get one Guardian
     * const guardian = await prisma.guardian.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends GuardianFindUniqueOrThrowArgs>(args: SelectSubset<T, GuardianFindUniqueOrThrowArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Guardian that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianFindFirstArgs} args - Arguments to find a Guardian
     * @example
     * // Get one Guardian
     * const guardian = await prisma.guardian.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends GuardianFindFirstArgs>(args?: SelectSubset<T, GuardianFindFirstArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Guardian that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianFindFirstOrThrowArgs} args - Arguments to find a Guardian
     * @example
     * // Get one Guardian
     * const guardian = await prisma.guardian.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends GuardianFindFirstOrThrowArgs>(args?: SelectSubset<T, GuardianFindFirstOrThrowArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Guardians that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Guardians
     * const guardians = await prisma.guardian.findMany()
     * 
     * // Get first 10 Guardians
     * const guardians = await prisma.guardian.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const guardianWithIdOnly = await prisma.guardian.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends GuardianFindManyArgs>(args?: SelectSubset<T, GuardianFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Guardian.
     * @param {GuardianCreateArgs} args - Arguments to create a Guardian.
     * @example
     * // Create one Guardian
     * const Guardian = await prisma.guardian.create({
     *   data: {
     *     // ... data to create a Guardian
     *   }
     * })
     * 
     */
    create<T extends GuardianCreateArgs>(args: SelectSubset<T, GuardianCreateArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Guardians.
     * @param {GuardianCreateManyArgs} args - Arguments to create many Guardians.
     * @example
     * // Create many Guardians
     * const guardian = await prisma.guardian.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends GuardianCreateManyArgs>(args?: SelectSubset<T, GuardianCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Guardian.
     * @param {GuardianDeleteArgs} args - Arguments to delete one Guardian.
     * @example
     * // Delete one Guardian
     * const Guardian = await prisma.guardian.delete({
     *   where: {
     *     // ... filter to delete one Guardian
     *   }
     * })
     * 
     */
    delete<T extends GuardianDeleteArgs>(args: SelectSubset<T, GuardianDeleteArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Guardian.
     * @param {GuardianUpdateArgs} args - Arguments to update one Guardian.
     * @example
     * // Update one Guardian
     * const guardian = await prisma.guardian.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends GuardianUpdateArgs>(args: SelectSubset<T, GuardianUpdateArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Guardians.
     * @param {GuardianDeleteManyArgs} args - Arguments to filter Guardians to delete.
     * @example
     * // Delete a few Guardians
     * const { count } = await prisma.guardian.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends GuardianDeleteManyArgs>(args?: SelectSubset<T, GuardianDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Guardians.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Guardians
     * const guardian = await prisma.guardian.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends GuardianUpdateManyArgs>(args: SelectSubset<T, GuardianUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Guardian.
     * @param {GuardianUpsertArgs} args - Arguments to update or create a Guardian.
     * @example
     * // Update or create a Guardian
     * const guardian = await prisma.guardian.upsert({
     *   create: {
     *     // ... data to create a Guardian
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Guardian we want to update
     *   }
     * })
     */
    upsert<T extends GuardianUpsertArgs>(args: SelectSubset<T, GuardianUpsertArgs<ExtArgs>>): Prisma__GuardianClient<$Result.GetResult<Prisma.$GuardianPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Guardians.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianCountArgs} args - Arguments to filter Guardians to count.
     * @example
     * // Count the number of Guardians
     * const count = await prisma.guardian.count({
     *   where: {
     *     // ... the filter for the Guardians we want to count
     *   }
     * })
    **/
    count<T extends GuardianCountArgs>(
      args?: Subset<T, GuardianCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], GuardianCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Guardian.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends GuardianAggregateArgs>(args: Subset<T, GuardianAggregateArgs>): Prisma.PrismaPromise<GetGuardianAggregateType<T>>

    /**
     * Group by Guardian.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GuardianGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends GuardianGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: GuardianGroupByArgs['orderBy'] }
        : { orderBy?: GuardianGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, GuardianGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetGuardianGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Guardian model
   */
  readonly fields: GuardianFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Guardian.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__GuardianClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    school<T extends Guardian$schoolArgs<ExtArgs> = {}>(args?: Subset<T, Guardian$schoolArgs<ExtArgs>>): Prisma__SchoolClient<$Result.GetResult<Prisma.$SchoolPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    branch<T extends Guardian$branchArgs<ExtArgs> = {}>(args?: Subset<T, Guardian$branchArgs<ExtArgs>>): Prisma__BranchClient<$Result.GetResult<Prisma.$BranchPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Guardian model
   */
  interface GuardianFieldRefs {
    readonly id: FieldRef<"Guardian", 'Int'>
    readonly uuid: FieldRef<"Guardian", 'String'>
    readonly school_id: FieldRef<"Guardian", 'Int'>
    readonly branch_id: FieldRef<"Guardian", 'Int'>
    readonly surname: FieldRef<"Guardian", 'String'>
    readonly first_name: FieldRef<"Guardian", 'String'>
    readonly guardian_sex: FieldRef<"Guardian", 'Int'>
    readonly is_married: FieldRef<"Guardian", 'Int'>
    readonly marriage_disolved: FieldRef<"Guardian", 'Int'>
    readonly is_parent: FieldRef<"Guardian", 'Int'>
    readonly relation_how_related: FieldRef<"Guardian", 'String'>
    readonly guardian_proffession: FieldRef<"Guardian", 'String'>
    readonly phonenumber: FieldRef<"Guardian", 'String'>
    readonly email: FieldRef<"Guardian", 'String'>
    readonly role: FieldRef<"Guardian", 'String'>
    readonly user_type: FieldRef<"Guardian", 'String'>
    readonly password: FieldRef<"Guardian", 'String'>
    readonly use_role: FieldRef<"Guardian", 'Int'>
    readonly guardian_active: FieldRef<"Guardian", 'Int'>
    readonly guardian_blocked_reason: FieldRef<"Guardian", 'String'>
    readonly created_by: FieldRef<"Guardian", 'Int'>
    readonly created_at: FieldRef<"Guardian", 'DateTime'>
    readonly updated_at: FieldRef<"Guardian", 'DateTime'>
    readonly deleted_at: FieldRef<"Guardian", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Guardian findUnique
   */
  export type GuardianFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter, which Guardian to fetch.
     */
    where: GuardianWhereUniqueInput
  }

  /**
   * Guardian findUniqueOrThrow
   */
  export type GuardianFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter, which Guardian to fetch.
     */
    where: GuardianWhereUniqueInput
  }

  /**
   * Guardian findFirst
   */
  export type GuardianFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter, which Guardian to fetch.
     */
    where?: GuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Guardians to fetch.
     */
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Guardians.
     */
    cursor?: GuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Guardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Guardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Guardians.
     */
    distinct?: GuardianScalarFieldEnum | GuardianScalarFieldEnum[]
  }

  /**
   * Guardian findFirstOrThrow
   */
  export type GuardianFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter, which Guardian to fetch.
     */
    where?: GuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Guardians to fetch.
     */
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Guardians.
     */
    cursor?: GuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Guardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Guardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Guardians.
     */
    distinct?: GuardianScalarFieldEnum | GuardianScalarFieldEnum[]
  }

  /**
   * Guardian findMany
   */
  export type GuardianFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter, which Guardians to fetch.
     */
    where?: GuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Guardians to fetch.
     */
    orderBy?: GuardianOrderByWithRelationInput | GuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Guardians.
     */
    cursor?: GuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Guardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Guardians.
     */
    skip?: number
    distinct?: GuardianScalarFieldEnum | GuardianScalarFieldEnum[]
  }

  /**
   * Guardian create
   */
  export type GuardianCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * The data needed to create a Guardian.
     */
    data: XOR<GuardianCreateInput, GuardianUncheckedCreateInput>
  }

  /**
   * Guardian createMany
   */
  export type GuardianCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Guardians.
     */
    data: GuardianCreateManyInput | GuardianCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Guardian update
   */
  export type GuardianUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * The data needed to update a Guardian.
     */
    data: XOR<GuardianUpdateInput, GuardianUncheckedUpdateInput>
    /**
     * Choose, which Guardian to update.
     */
    where: GuardianWhereUniqueInput
  }

  /**
   * Guardian updateMany
   */
  export type GuardianUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Guardians.
     */
    data: XOR<GuardianUpdateManyMutationInput, GuardianUncheckedUpdateManyInput>
    /**
     * Filter which Guardians to update
     */
    where?: GuardianWhereInput
    /**
     * Limit how many Guardians to update.
     */
    limit?: number
  }

  /**
   * Guardian upsert
   */
  export type GuardianUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * The filter to search for the Guardian to update in case it exists.
     */
    where: GuardianWhereUniqueInput
    /**
     * In case the Guardian found by the `where` argument doesn't exist, create a new Guardian with this data.
     */
    create: XOR<GuardianCreateInput, GuardianUncheckedCreateInput>
    /**
     * In case the Guardian was found with the provided `where` argument, update it with this data.
     */
    update: XOR<GuardianUpdateInput, GuardianUncheckedUpdateInput>
  }

  /**
   * Guardian delete
   */
  export type GuardianDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
    /**
     * Filter which Guardian to delete.
     */
    where: GuardianWhereUniqueInput
  }

  /**
   * Guardian deleteMany
   */
  export type GuardianDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Guardians to delete
     */
    where?: GuardianWhereInput
    /**
     * Limit how many Guardians to delete.
     */
    limit?: number
  }

  /**
   * Guardian.school
   */
  export type Guardian$schoolArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the School
     */
    select?: SchoolSelect<ExtArgs> | null
    /**
     * Omit specific fields from the School
     */
    omit?: SchoolOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolInclude<ExtArgs> | null
    where?: SchoolWhereInput
  }

  /**
   * Guardian.branch
   */
  export type Guardian$branchArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Branch
     */
    select?: BranchSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Branch
     */
    omit?: BranchOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: BranchInclude<ExtArgs> | null
    where?: BranchWhereInput
  }

  /**
   * Guardian without action
   */
  export type GuardianDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Guardian
     */
    select?: GuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Guardian
     */
    omit?: GuardianOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: GuardianInclude<ExtArgs> | null
  }


  /**
   * Model StudentGuardian
   */

  export type AggregateStudentGuardian = {
    _count: StudentGuardianCountAggregateOutputType | null
    _avg: StudentGuardianAvgAggregateOutputType | null
    _sum: StudentGuardianSumAggregateOutputType | null
    _min: StudentGuardianMinAggregateOutputType | null
    _max: StudentGuardianMaxAggregateOutputType | null
  }

  export type StudentGuardianAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    student_id: number | null
    guardian_id: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type StudentGuardianSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    student_id: number | null
    guardian_id: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type StudentGuardianMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    student_id: number | null
    guardian_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type StudentGuardianMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    student_id: number | null
    guardian_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type StudentGuardianCountAggregateOutputType = {
    id: number
    branch_id: number
    student_id: number
    guardian_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type StudentGuardianAvgAggregateInputType = {
    id?: true
    branch_id?: true
    student_id?: true
    guardian_id?: true
    created_by?: true
    deleted_by?: true
  }

  export type StudentGuardianSumAggregateInputType = {
    id?: true
    branch_id?: true
    student_id?: true
    guardian_id?: true
    created_by?: true
    deleted_by?: true
  }

  export type StudentGuardianMinAggregateInputType = {
    id?: true
    branch_id?: true
    student_id?: true
    guardian_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type StudentGuardianMaxAggregateInputType = {
    id?: true
    branch_id?: true
    student_id?: true
    guardian_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type StudentGuardianCountAggregateInputType = {
    id?: true
    branch_id?: true
    student_id?: true
    guardian_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type StudentGuardianAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentGuardian to aggregate.
     */
    where?: StudentGuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentGuardians to fetch.
     */
    orderBy?: StudentGuardianOrderByWithRelationInput | StudentGuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StudentGuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentGuardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentGuardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned StudentGuardians
    **/
    _count?: true | StudentGuardianCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StudentGuardianAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StudentGuardianSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StudentGuardianMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StudentGuardianMaxAggregateInputType
  }

  export type GetStudentGuardianAggregateType<T extends StudentGuardianAggregateArgs> = {
        [P in keyof T & keyof AggregateStudentGuardian]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStudentGuardian[P]>
      : GetScalarType<T[P], AggregateStudentGuardian[P]>
  }




  export type StudentGuardianGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentGuardianWhereInput
    orderBy?: StudentGuardianOrderByWithAggregationInput | StudentGuardianOrderByWithAggregationInput[]
    by: StudentGuardianScalarFieldEnum[] | StudentGuardianScalarFieldEnum
    having?: StudentGuardianScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StudentGuardianCountAggregateInputType | true
    _avg?: StudentGuardianAvgAggregateInputType
    _sum?: StudentGuardianSumAggregateInputType
    _min?: StudentGuardianMinAggregateInputType
    _max?: StudentGuardianMaxAggregateInputType
  }

  export type StudentGuardianGroupByOutputType = {
    id: number
    branch_id: number
    student_id: number
    guardian_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: StudentGuardianCountAggregateOutputType | null
    _avg: StudentGuardianAvgAggregateOutputType | null
    _sum: StudentGuardianSumAggregateOutputType | null
    _min: StudentGuardianMinAggregateOutputType | null
    _max: StudentGuardianMaxAggregateOutputType | null
  }

  type GetStudentGuardianGroupByPayload<T extends StudentGuardianGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StudentGuardianGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StudentGuardianGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StudentGuardianGroupByOutputType[P]>
            : GetScalarType<T[P], StudentGuardianGroupByOutputType[P]>
        }
      >
    >


  export type StudentGuardianSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    student_id?: boolean
    guardian_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["studentGuardian"]>



  export type StudentGuardianSelectScalar = {
    id?: boolean
    branch_id?: boolean
    student_id?: boolean
    guardian_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type StudentGuardianOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "student_id" | "guardian_id" | "created_by" | "created_at" | "updated_at" | "deleted_at" | "deleted_by", ExtArgs["result"]["studentGuardian"]>

  export type $StudentGuardianPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "StudentGuardian"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      student_id: number
      guardian_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["studentGuardian"]>
    composites: {}
  }

  type StudentGuardianGetPayload<S extends boolean | null | undefined | StudentGuardianDefaultArgs> = $Result.GetResult<Prisma.$StudentGuardianPayload, S>

  type StudentGuardianCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StudentGuardianFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StudentGuardianCountAggregateInputType | true
    }

  export interface StudentGuardianDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['StudentGuardian'], meta: { name: 'StudentGuardian' } }
    /**
     * Find zero or one StudentGuardian that matches the filter.
     * @param {StudentGuardianFindUniqueArgs} args - Arguments to find a StudentGuardian
     * @example
     * // Get one StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StudentGuardianFindUniqueArgs>(args: SelectSubset<T, StudentGuardianFindUniqueArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one StudentGuardian that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StudentGuardianFindUniqueOrThrowArgs} args - Arguments to find a StudentGuardian
     * @example
     * // Get one StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StudentGuardianFindUniqueOrThrowArgs>(args: SelectSubset<T, StudentGuardianFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentGuardian that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianFindFirstArgs} args - Arguments to find a StudentGuardian
     * @example
     * // Get one StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StudentGuardianFindFirstArgs>(args?: SelectSubset<T, StudentGuardianFindFirstArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentGuardian that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianFindFirstOrThrowArgs} args - Arguments to find a StudentGuardian
     * @example
     * // Get one StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StudentGuardianFindFirstOrThrowArgs>(args?: SelectSubset<T, StudentGuardianFindFirstOrThrowArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more StudentGuardians that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all StudentGuardians
     * const studentGuardians = await prisma.studentGuardian.findMany()
     * 
     * // Get first 10 StudentGuardians
     * const studentGuardians = await prisma.studentGuardian.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const studentGuardianWithIdOnly = await prisma.studentGuardian.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StudentGuardianFindManyArgs>(args?: SelectSubset<T, StudentGuardianFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a StudentGuardian.
     * @param {StudentGuardianCreateArgs} args - Arguments to create a StudentGuardian.
     * @example
     * // Create one StudentGuardian
     * const StudentGuardian = await prisma.studentGuardian.create({
     *   data: {
     *     // ... data to create a StudentGuardian
     *   }
     * })
     * 
     */
    create<T extends StudentGuardianCreateArgs>(args: SelectSubset<T, StudentGuardianCreateArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many StudentGuardians.
     * @param {StudentGuardianCreateManyArgs} args - Arguments to create many StudentGuardians.
     * @example
     * // Create many StudentGuardians
     * const studentGuardian = await prisma.studentGuardian.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StudentGuardianCreateManyArgs>(args?: SelectSubset<T, StudentGuardianCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a StudentGuardian.
     * @param {StudentGuardianDeleteArgs} args - Arguments to delete one StudentGuardian.
     * @example
     * // Delete one StudentGuardian
     * const StudentGuardian = await prisma.studentGuardian.delete({
     *   where: {
     *     // ... filter to delete one StudentGuardian
     *   }
     * })
     * 
     */
    delete<T extends StudentGuardianDeleteArgs>(args: SelectSubset<T, StudentGuardianDeleteArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one StudentGuardian.
     * @param {StudentGuardianUpdateArgs} args - Arguments to update one StudentGuardian.
     * @example
     * // Update one StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StudentGuardianUpdateArgs>(args: SelectSubset<T, StudentGuardianUpdateArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more StudentGuardians.
     * @param {StudentGuardianDeleteManyArgs} args - Arguments to filter StudentGuardians to delete.
     * @example
     * // Delete a few StudentGuardians
     * const { count } = await prisma.studentGuardian.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StudentGuardianDeleteManyArgs>(args?: SelectSubset<T, StudentGuardianDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StudentGuardians.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many StudentGuardians
     * const studentGuardian = await prisma.studentGuardian.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StudentGuardianUpdateManyArgs>(args: SelectSubset<T, StudentGuardianUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one StudentGuardian.
     * @param {StudentGuardianUpsertArgs} args - Arguments to update or create a StudentGuardian.
     * @example
     * // Update or create a StudentGuardian
     * const studentGuardian = await prisma.studentGuardian.upsert({
     *   create: {
     *     // ... data to create a StudentGuardian
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the StudentGuardian we want to update
     *   }
     * })
     */
    upsert<T extends StudentGuardianUpsertArgs>(args: SelectSubset<T, StudentGuardianUpsertArgs<ExtArgs>>): Prisma__StudentGuardianClient<$Result.GetResult<Prisma.$StudentGuardianPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of StudentGuardians.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianCountArgs} args - Arguments to filter StudentGuardians to count.
     * @example
     * // Count the number of StudentGuardians
     * const count = await prisma.studentGuardian.count({
     *   where: {
     *     // ... the filter for the StudentGuardians we want to count
     *   }
     * })
    **/
    count<T extends StudentGuardianCountArgs>(
      args?: Subset<T, StudentGuardianCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StudentGuardianCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a StudentGuardian.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StudentGuardianAggregateArgs>(args: Subset<T, StudentGuardianAggregateArgs>): Prisma.PrismaPromise<GetStudentGuardianAggregateType<T>>

    /**
     * Group by StudentGuardian.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentGuardianGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StudentGuardianGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StudentGuardianGroupByArgs['orderBy'] }
        : { orderBy?: StudentGuardianGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StudentGuardianGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStudentGuardianGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the StudentGuardian model
   */
  readonly fields: StudentGuardianFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for StudentGuardian.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StudentGuardianClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the StudentGuardian model
   */
  interface StudentGuardianFieldRefs {
    readonly id: FieldRef<"StudentGuardian", 'Int'>
    readonly branch_id: FieldRef<"StudentGuardian", 'Int'>
    readonly student_id: FieldRef<"StudentGuardian", 'Int'>
    readonly guardian_id: FieldRef<"StudentGuardian", 'Int'>
    readonly created_by: FieldRef<"StudentGuardian", 'Int'>
    readonly created_at: FieldRef<"StudentGuardian", 'DateTime'>
    readonly updated_at: FieldRef<"StudentGuardian", 'DateTime'>
    readonly deleted_at: FieldRef<"StudentGuardian", 'DateTime'>
    readonly deleted_by: FieldRef<"StudentGuardian", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * StudentGuardian findUnique
   */
  export type StudentGuardianFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter, which StudentGuardian to fetch.
     */
    where: StudentGuardianWhereUniqueInput
  }

  /**
   * StudentGuardian findUniqueOrThrow
   */
  export type StudentGuardianFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter, which StudentGuardian to fetch.
     */
    where: StudentGuardianWhereUniqueInput
  }

  /**
   * StudentGuardian findFirst
   */
  export type StudentGuardianFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter, which StudentGuardian to fetch.
     */
    where?: StudentGuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentGuardians to fetch.
     */
    orderBy?: StudentGuardianOrderByWithRelationInput | StudentGuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentGuardians.
     */
    cursor?: StudentGuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentGuardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentGuardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentGuardians.
     */
    distinct?: StudentGuardianScalarFieldEnum | StudentGuardianScalarFieldEnum[]
  }

  /**
   * StudentGuardian findFirstOrThrow
   */
  export type StudentGuardianFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter, which StudentGuardian to fetch.
     */
    where?: StudentGuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentGuardians to fetch.
     */
    orderBy?: StudentGuardianOrderByWithRelationInput | StudentGuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentGuardians.
     */
    cursor?: StudentGuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentGuardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentGuardians.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentGuardians.
     */
    distinct?: StudentGuardianScalarFieldEnum | StudentGuardianScalarFieldEnum[]
  }

  /**
   * StudentGuardian findMany
   */
  export type StudentGuardianFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter, which StudentGuardians to fetch.
     */
    where?: StudentGuardianWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentGuardians to fetch.
     */
    orderBy?: StudentGuardianOrderByWithRelationInput | StudentGuardianOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing StudentGuardians.
     */
    cursor?: StudentGuardianWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentGuardians from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentGuardians.
     */
    skip?: number
    distinct?: StudentGuardianScalarFieldEnum | StudentGuardianScalarFieldEnum[]
  }

  /**
   * StudentGuardian create
   */
  export type StudentGuardianCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * The data needed to create a StudentGuardian.
     */
    data: XOR<StudentGuardianCreateInput, StudentGuardianUncheckedCreateInput>
  }

  /**
   * StudentGuardian createMany
   */
  export type StudentGuardianCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many StudentGuardians.
     */
    data: StudentGuardianCreateManyInput | StudentGuardianCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * StudentGuardian update
   */
  export type StudentGuardianUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * The data needed to update a StudentGuardian.
     */
    data: XOR<StudentGuardianUpdateInput, StudentGuardianUncheckedUpdateInput>
    /**
     * Choose, which StudentGuardian to update.
     */
    where: StudentGuardianWhereUniqueInput
  }

  /**
   * StudentGuardian updateMany
   */
  export type StudentGuardianUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update StudentGuardians.
     */
    data: XOR<StudentGuardianUpdateManyMutationInput, StudentGuardianUncheckedUpdateManyInput>
    /**
     * Filter which StudentGuardians to update
     */
    where?: StudentGuardianWhereInput
    /**
     * Limit how many StudentGuardians to update.
     */
    limit?: number
  }

  /**
   * StudentGuardian upsert
   */
  export type StudentGuardianUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * The filter to search for the StudentGuardian to update in case it exists.
     */
    where: StudentGuardianWhereUniqueInput
    /**
     * In case the StudentGuardian found by the `where` argument doesn't exist, create a new StudentGuardian with this data.
     */
    create: XOR<StudentGuardianCreateInput, StudentGuardianUncheckedCreateInput>
    /**
     * In case the StudentGuardian was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StudentGuardianUpdateInput, StudentGuardianUncheckedUpdateInput>
  }

  /**
   * StudentGuardian delete
   */
  export type StudentGuardianDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
    /**
     * Filter which StudentGuardian to delete.
     */
    where: StudentGuardianWhereUniqueInput
  }

  /**
   * StudentGuardian deleteMany
   */
  export type StudentGuardianDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentGuardians to delete
     */
    where?: StudentGuardianWhereInput
    /**
     * Limit how many StudentGuardians to delete.
     */
    limit?: number
  }

  /**
   * StudentGuardian without action
   */
  export type StudentGuardianDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentGuardian
     */
    select?: StudentGuardianSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentGuardian
     */
    omit?: StudentGuardianOmit<ExtArgs> | null
  }


  /**
   * Model Permission
   */

  export type AggregatePermission = {
    _count: PermissionCountAggregateOutputType | null
    _avg: PermissionAvgAggregateOutputType | null
    _sum: PermissionSumAggregateOutputType | null
    _min: PermissionMinAggregateOutputType | null
    _max: PermissionMaxAggregateOutputType | null
  }

  export type PermissionAvgAggregateOutputType = {
    id: number | null
    is_crud: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type PermissionSumAggregateOutputType = {
    id: number | null
    is_crud: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type PermissionMinAggregateOutputType = {
    id: number | null
    name: string | null
    display_name: string | null
    description: string | null
    is_crud: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type PermissionMaxAggregateOutputType = {
    id: number | null
    name: string | null
    display_name: string | null
    description: string | null
    is_crud: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type PermissionCountAggregateOutputType = {
    id: number
    name: number
    display_name: number
    description: number
    is_crud: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type PermissionAvgAggregateInputType = {
    id?: true
    is_crud?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type PermissionSumAggregateInputType = {
    id?: true
    is_crud?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type PermissionMinAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    is_crud?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type PermissionMaxAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    is_crud?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type PermissionCountAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    is_crud?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type PermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Permission to aggregate.
     */
    where?: PermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Permissions to fetch.
     */
    orderBy?: PermissionOrderByWithRelationInput | PermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Permissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Permissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Permissions
    **/
    _count?: true | PermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PermissionMaxAggregateInputType
  }

  export type GetPermissionAggregateType<T extends PermissionAggregateArgs> = {
        [P in keyof T & keyof AggregatePermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePermission[P]>
      : GetScalarType<T[P], AggregatePermission[P]>
  }




  export type PermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PermissionWhereInput
    orderBy?: PermissionOrderByWithAggregationInput | PermissionOrderByWithAggregationInput[]
    by: PermissionScalarFieldEnum[] | PermissionScalarFieldEnum
    having?: PermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PermissionCountAggregateInputType | true
    _avg?: PermissionAvgAggregateInputType
    _sum?: PermissionSumAggregateInputType
    _min?: PermissionMinAggregateInputType
    _max?: PermissionMaxAggregateInputType
  }

  export type PermissionGroupByOutputType = {
    id: number
    name: string
    display_name: string
    description: string | null
    is_crud: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: PermissionCountAggregateOutputType | null
    _avg: PermissionAvgAggregateOutputType | null
    _sum: PermissionSumAggregateOutputType | null
    _min: PermissionMinAggregateOutputType | null
    _max: PermissionMaxAggregateOutputType | null
  }

  type GetPermissionGroupByPayload<T extends PermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PermissionGroupByOutputType[P]>
            : GetScalarType<T[P], PermissionGroupByOutputType[P]>
        }
      >
    >


  export type PermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    display_name?: boolean
    description?: boolean
    is_crud?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    RoleCrudPermission?: boolean | Permission$RoleCrudPermissionArgs<ExtArgs>
    UserCrudPermission?: boolean | Permission$UserCrudPermissionArgs<ExtArgs>
    RolePermission?: boolean | Permission$RolePermissionArgs<ExtArgs>
    UserPermission?: boolean | Permission$UserPermissionArgs<ExtArgs>
    _count?: boolean | PermissionCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["permission"]>



  export type PermissionSelectScalar = {
    id?: boolean
    name?: boolean
    display_name?: boolean
    description?: boolean
    is_crud?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type PermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "display_name" | "description" | "is_crud" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["permission"]>
  export type PermissionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    RoleCrudPermission?: boolean | Permission$RoleCrudPermissionArgs<ExtArgs>
    UserCrudPermission?: boolean | Permission$UserCrudPermissionArgs<ExtArgs>
    RolePermission?: boolean | Permission$RolePermissionArgs<ExtArgs>
    UserPermission?: boolean | Permission$UserPermissionArgs<ExtArgs>
    _count?: boolean | PermissionCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $PermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Permission"
    objects: {
      RoleCrudPermission: Prisma.$RoleCrudPermissionPayload<ExtArgs>[]
      UserCrudPermission: Prisma.$UserCrudPermissionPayload<ExtArgs>[]
      RolePermission: Prisma.$RolePermissionPayload<ExtArgs>[]
      UserPermission: Prisma.$UserPermissionPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      display_name: string
      description: string | null
      is_crud: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["permission"]>
    composites: {}
  }

  type PermissionGetPayload<S extends boolean | null | undefined | PermissionDefaultArgs> = $Result.GetResult<Prisma.$PermissionPayload, S>

  type PermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PermissionCountAggregateInputType | true
    }

  export interface PermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Permission'], meta: { name: 'Permission' } }
    /**
     * Find zero or one Permission that matches the filter.
     * @param {PermissionFindUniqueArgs} args - Arguments to find a Permission
     * @example
     * // Get one Permission
     * const permission = await prisma.permission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PermissionFindUniqueArgs>(args: SelectSubset<T, PermissionFindUniqueArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Permission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PermissionFindUniqueOrThrowArgs} args - Arguments to find a Permission
     * @example
     * // Get one Permission
     * const permission = await prisma.permission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, PermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Permission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionFindFirstArgs} args - Arguments to find a Permission
     * @example
     * // Get one Permission
     * const permission = await prisma.permission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PermissionFindFirstArgs>(args?: SelectSubset<T, PermissionFindFirstArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Permission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionFindFirstOrThrowArgs} args - Arguments to find a Permission
     * @example
     * // Get one Permission
     * const permission = await prisma.permission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, PermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Permissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Permissions
     * const permissions = await prisma.permission.findMany()
     * 
     * // Get first 10 Permissions
     * const permissions = await prisma.permission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const permissionWithIdOnly = await prisma.permission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PermissionFindManyArgs>(args?: SelectSubset<T, PermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Permission.
     * @param {PermissionCreateArgs} args - Arguments to create a Permission.
     * @example
     * // Create one Permission
     * const Permission = await prisma.permission.create({
     *   data: {
     *     // ... data to create a Permission
     *   }
     * })
     * 
     */
    create<T extends PermissionCreateArgs>(args: SelectSubset<T, PermissionCreateArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Permissions.
     * @param {PermissionCreateManyArgs} args - Arguments to create many Permissions.
     * @example
     * // Create many Permissions
     * const permission = await prisma.permission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PermissionCreateManyArgs>(args?: SelectSubset<T, PermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Permission.
     * @param {PermissionDeleteArgs} args - Arguments to delete one Permission.
     * @example
     * // Delete one Permission
     * const Permission = await prisma.permission.delete({
     *   where: {
     *     // ... filter to delete one Permission
     *   }
     * })
     * 
     */
    delete<T extends PermissionDeleteArgs>(args: SelectSubset<T, PermissionDeleteArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Permission.
     * @param {PermissionUpdateArgs} args - Arguments to update one Permission.
     * @example
     * // Update one Permission
     * const permission = await prisma.permission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PermissionUpdateArgs>(args: SelectSubset<T, PermissionUpdateArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Permissions.
     * @param {PermissionDeleteManyArgs} args - Arguments to filter Permissions to delete.
     * @example
     * // Delete a few Permissions
     * const { count } = await prisma.permission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PermissionDeleteManyArgs>(args?: SelectSubset<T, PermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Permissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Permissions
     * const permission = await prisma.permission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PermissionUpdateManyArgs>(args: SelectSubset<T, PermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Permission.
     * @param {PermissionUpsertArgs} args - Arguments to update or create a Permission.
     * @example
     * // Update or create a Permission
     * const permission = await prisma.permission.upsert({
     *   create: {
     *     // ... data to create a Permission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Permission we want to update
     *   }
     * })
     */
    upsert<T extends PermissionUpsertArgs>(args: SelectSubset<T, PermissionUpsertArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Permissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionCountArgs} args - Arguments to filter Permissions to count.
     * @example
     * // Count the number of Permissions
     * const count = await prisma.permission.count({
     *   where: {
     *     // ... the filter for the Permissions we want to count
     *   }
     * })
    **/
    count<T extends PermissionCountArgs>(
      args?: Subset<T, PermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Permission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PermissionAggregateArgs>(args: Subset<T, PermissionAggregateArgs>): Prisma.PrismaPromise<GetPermissionAggregateType<T>>

    /**
     * Group by Permission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PermissionGroupByArgs['orderBy'] }
        : { orderBy?: PermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Permission model
   */
  readonly fields: PermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Permission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    RoleCrudPermission<T extends Permission$RoleCrudPermissionArgs<ExtArgs> = {}>(args?: Subset<T, Permission$RoleCrudPermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    UserCrudPermission<T extends Permission$UserCrudPermissionArgs<ExtArgs> = {}>(args?: Subset<T, Permission$UserCrudPermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    RolePermission<T extends Permission$RolePermissionArgs<ExtArgs> = {}>(args?: Subset<T, Permission$RolePermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    UserPermission<T extends Permission$UserPermissionArgs<ExtArgs> = {}>(args?: Subset<T, Permission$UserPermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Permission model
   */
  interface PermissionFieldRefs {
    readonly id: FieldRef<"Permission", 'Int'>
    readonly name: FieldRef<"Permission", 'String'>
    readonly display_name: FieldRef<"Permission", 'String'>
    readonly description: FieldRef<"Permission", 'String'>
    readonly is_crud: FieldRef<"Permission", 'Int'>
    readonly created_at: FieldRef<"Permission", 'DateTime'>
    readonly created_by: FieldRef<"Permission", 'Int'>
    readonly updated_at: FieldRef<"Permission", 'DateTime'>
    readonly updated_by: FieldRef<"Permission", 'Int'>
    readonly deleted_at: FieldRef<"Permission", 'DateTime'>
    readonly deleted_by: FieldRef<"Permission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Permission findUnique
   */
  export type PermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter, which Permission to fetch.
     */
    where: PermissionWhereUniqueInput
  }

  /**
   * Permission findUniqueOrThrow
   */
  export type PermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter, which Permission to fetch.
     */
    where: PermissionWhereUniqueInput
  }

  /**
   * Permission findFirst
   */
  export type PermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter, which Permission to fetch.
     */
    where?: PermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Permissions to fetch.
     */
    orderBy?: PermissionOrderByWithRelationInput | PermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Permissions.
     */
    cursor?: PermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Permissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Permissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Permissions.
     */
    distinct?: PermissionScalarFieldEnum | PermissionScalarFieldEnum[]
  }

  /**
   * Permission findFirstOrThrow
   */
  export type PermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter, which Permission to fetch.
     */
    where?: PermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Permissions to fetch.
     */
    orderBy?: PermissionOrderByWithRelationInput | PermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Permissions.
     */
    cursor?: PermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Permissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Permissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Permissions.
     */
    distinct?: PermissionScalarFieldEnum | PermissionScalarFieldEnum[]
  }

  /**
   * Permission findMany
   */
  export type PermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter, which Permissions to fetch.
     */
    where?: PermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Permissions to fetch.
     */
    orderBy?: PermissionOrderByWithRelationInput | PermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Permissions.
     */
    cursor?: PermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Permissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Permissions.
     */
    skip?: number
    distinct?: PermissionScalarFieldEnum | PermissionScalarFieldEnum[]
  }

  /**
   * Permission create
   */
  export type PermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * The data needed to create a Permission.
     */
    data: XOR<PermissionCreateInput, PermissionUncheckedCreateInput>
  }

  /**
   * Permission createMany
   */
  export type PermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Permissions.
     */
    data: PermissionCreateManyInput | PermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Permission update
   */
  export type PermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * The data needed to update a Permission.
     */
    data: XOR<PermissionUpdateInput, PermissionUncheckedUpdateInput>
    /**
     * Choose, which Permission to update.
     */
    where: PermissionWhereUniqueInput
  }

  /**
   * Permission updateMany
   */
  export type PermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Permissions.
     */
    data: XOR<PermissionUpdateManyMutationInput, PermissionUncheckedUpdateManyInput>
    /**
     * Filter which Permissions to update
     */
    where?: PermissionWhereInput
    /**
     * Limit how many Permissions to update.
     */
    limit?: number
  }

  /**
   * Permission upsert
   */
  export type PermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * The filter to search for the Permission to update in case it exists.
     */
    where: PermissionWhereUniqueInput
    /**
     * In case the Permission found by the `where` argument doesn't exist, create a new Permission with this data.
     */
    create: XOR<PermissionCreateInput, PermissionUncheckedCreateInput>
    /**
     * In case the Permission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PermissionUpdateInput, PermissionUncheckedUpdateInput>
  }

  /**
   * Permission delete
   */
  export type PermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
    /**
     * Filter which Permission to delete.
     */
    where: PermissionWhereUniqueInput
  }

  /**
   * Permission deleteMany
   */
  export type PermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Permissions to delete
     */
    where?: PermissionWhereInput
    /**
     * Limit how many Permissions to delete.
     */
    limit?: number
  }

  /**
   * Permission.RoleCrudPermission
   */
  export type Permission$RoleCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    where?: RoleCrudPermissionWhereInput
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    cursor?: RoleCrudPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: RoleCrudPermissionScalarFieldEnum | RoleCrudPermissionScalarFieldEnum[]
  }

  /**
   * Permission.UserCrudPermission
   */
  export type Permission$UserCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    where?: UserCrudPermissionWhereInput
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    cursor?: UserCrudPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserCrudPermissionScalarFieldEnum | UserCrudPermissionScalarFieldEnum[]
  }

  /**
   * Permission.RolePermission
   */
  export type Permission$RolePermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    where?: RolePermissionWhereInput
    orderBy?: RolePermissionOrderByWithRelationInput | RolePermissionOrderByWithRelationInput[]
    cursor?: RolePermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: RolePermissionScalarFieldEnum | RolePermissionScalarFieldEnum[]
  }

  /**
   * Permission.UserPermission
   */
  export type Permission$UserPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    where?: UserPermissionWhereInput
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    cursor?: UserPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: UserPermissionScalarFieldEnum | UserPermissionScalarFieldEnum[]
  }

  /**
   * Permission without action
   */
  export type PermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Permission
     */
    select?: PermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Permission
     */
    omit?: PermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: PermissionInclude<ExtArgs> | null
  }


  /**
   * Model RoleCrudPermission
   */

  export type AggregateRoleCrudPermission = {
    _count: RoleCrudPermissionCountAggregateOutputType | null
    _avg: RoleCrudPermissionAvgAggregateOutputType | null
    _sum: RoleCrudPermissionSumAggregateOutputType | null
    _min: RoleCrudPermissionMinAggregateOutputType | null
    _max: RoleCrudPermissionMaxAggregateOutputType | null
  }

  export type RoleCrudPermissionAvgAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleCrudPermissionSumAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleCrudPermissionMinAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleCrudPermissionMaxAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleCrudPermissionCountAggregateOutputType = {
    id: number
    role_id: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type RoleCrudPermissionAvgAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleCrudPermissionSumAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleCrudPermissionMinAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleCrudPermissionMaxAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleCrudPermissionCountAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type RoleCrudPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleCrudPermission to aggregate.
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleCrudPermissions to fetch.
     */
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RoleCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned RoleCrudPermissions
    **/
    _count?: true | RoleCrudPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RoleCrudPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RoleCrudPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RoleCrudPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RoleCrudPermissionMaxAggregateInputType
  }

  export type GetRoleCrudPermissionAggregateType<T extends RoleCrudPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateRoleCrudPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRoleCrudPermission[P]>
      : GetScalarType<T[P], AggregateRoleCrudPermission[P]>
  }




  export type RoleCrudPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleCrudPermissionWhereInput
    orderBy?: RoleCrudPermissionOrderByWithAggregationInput | RoleCrudPermissionOrderByWithAggregationInput[]
    by: RoleCrudPermissionScalarFieldEnum[] | RoleCrudPermissionScalarFieldEnum
    having?: RoleCrudPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RoleCrudPermissionCountAggregateInputType | true
    _avg?: RoleCrudPermissionAvgAggregateInputType
    _sum?: RoleCrudPermissionSumAggregateInputType
    _min?: RoleCrudPermissionMinAggregateInputType
    _max?: RoleCrudPermissionMaxAggregateInputType
  }

  export type RoleCrudPermissionGroupByOutputType = {
    id: number
    role_id: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: RoleCrudPermissionCountAggregateOutputType | null
    _avg: RoleCrudPermissionAvgAggregateOutputType | null
    _sum: RoleCrudPermissionSumAggregateOutputType | null
    _min: RoleCrudPermissionMinAggregateOutputType | null
    _max: RoleCrudPermissionMaxAggregateOutputType | null
  }

  type GetRoleCrudPermissionGroupByPayload<T extends RoleCrudPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RoleCrudPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RoleCrudPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RoleCrudPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], RoleCrudPermissionGroupByOutputType[P]>
        }
      >
    >


  export type RoleCrudPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    role?: boolean | RoleDefaultArgs<ExtArgs>
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["roleCrudPermission"]>



  export type RoleCrudPermissionSelectScalar = {
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type RoleCrudPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "role_id" | "permission_id" | "permission_menu" | "permission_create" | "permission_read" | "permission_update" | "permission_delete" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["roleCrudPermission"]>
  export type RoleCrudPermissionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    role?: boolean | RoleDefaultArgs<ExtArgs>
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
  }

  export type $RoleCrudPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "RoleCrudPermission"
    objects: {
      role: Prisma.$RolePayload<ExtArgs>
      permission: Prisma.$PermissionPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      role_id: number
      permission_id: number
      permission_menu: number
      permission_create: number
      permission_read: number
      permission_update: number
      permission_delete: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["roleCrudPermission"]>
    composites: {}
  }

  type RoleCrudPermissionGetPayload<S extends boolean | null | undefined | RoleCrudPermissionDefaultArgs> = $Result.GetResult<Prisma.$RoleCrudPermissionPayload, S>

  type RoleCrudPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RoleCrudPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RoleCrudPermissionCountAggregateInputType | true
    }

  export interface RoleCrudPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['RoleCrudPermission'], meta: { name: 'RoleCrudPermission' } }
    /**
     * Find zero or one RoleCrudPermission that matches the filter.
     * @param {RoleCrudPermissionFindUniqueArgs} args - Arguments to find a RoleCrudPermission
     * @example
     * // Get one RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RoleCrudPermissionFindUniqueArgs>(args: SelectSubset<T, RoleCrudPermissionFindUniqueArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one RoleCrudPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RoleCrudPermissionFindUniqueOrThrowArgs} args - Arguments to find a RoleCrudPermission
     * @example
     * // Get one RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RoleCrudPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, RoleCrudPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleCrudPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionFindFirstArgs} args - Arguments to find a RoleCrudPermission
     * @example
     * // Get one RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RoleCrudPermissionFindFirstArgs>(args?: SelectSubset<T, RoleCrudPermissionFindFirstArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleCrudPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionFindFirstOrThrowArgs} args - Arguments to find a RoleCrudPermission
     * @example
     * // Get one RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RoleCrudPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, RoleCrudPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more RoleCrudPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all RoleCrudPermissions
     * const roleCrudPermissions = await prisma.roleCrudPermission.findMany()
     * 
     * // Get first 10 RoleCrudPermissions
     * const roleCrudPermissions = await prisma.roleCrudPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const roleCrudPermissionWithIdOnly = await prisma.roleCrudPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RoleCrudPermissionFindManyArgs>(args?: SelectSubset<T, RoleCrudPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a RoleCrudPermission.
     * @param {RoleCrudPermissionCreateArgs} args - Arguments to create a RoleCrudPermission.
     * @example
     * // Create one RoleCrudPermission
     * const RoleCrudPermission = await prisma.roleCrudPermission.create({
     *   data: {
     *     // ... data to create a RoleCrudPermission
     *   }
     * })
     * 
     */
    create<T extends RoleCrudPermissionCreateArgs>(args: SelectSubset<T, RoleCrudPermissionCreateArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many RoleCrudPermissions.
     * @param {RoleCrudPermissionCreateManyArgs} args - Arguments to create many RoleCrudPermissions.
     * @example
     * // Create many RoleCrudPermissions
     * const roleCrudPermission = await prisma.roleCrudPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RoleCrudPermissionCreateManyArgs>(args?: SelectSubset<T, RoleCrudPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a RoleCrudPermission.
     * @param {RoleCrudPermissionDeleteArgs} args - Arguments to delete one RoleCrudPermission.
     * @example
     * // Delete one RoleCrudPermission
     * const RoleCrudPermission = await prisma.roleCrudPermission.delete({
     *   where: {
     *     // ... filter to delete one RoleCrudPermission
     *   }
     * })
     * 
     */
    delete<T extends RoleCrudPermissionDeleteArgs>(args: SelectSubset<T, RoleCrudPermissionDeleteArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one RoleCrudPermission.
     * @param {RoleCrudPermissionUpdateArgs} args - Arguments to update one RoleCrudPermission.
     * @example
     * // Update one RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RoleCrudPermissionUpdateArgs>(args: SelectSubset<T, RoleCrudPermissionUpdateArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more RoleCrudPermissions.
     * @param {RoleCrudPermissionDeleteManyArgs} args - Arguments to filter RoleCrudPermissions to delete.
     * @example
     * // Delete a few RoleCrudPermissions
     * const { count } = await prisma.roleCrudPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RoleCrudPermissionDeleteManyArgs>(args?: SelectSubset<T, RoleCrudPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more RoleCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many RoleCrudPermissions
     * const roleCrudPermission = await prisma.roleCrudPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RoleCrudPermissionUpdateManyArgs>(args: SelectSubset<T, RoleCrudPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one RoleCrudPermission.
     * @param {RoleCrudPermissionUpsertArgs} args - Arguments to update or create a RoleCrudPermission.
     * @example
     * // Update or create a RoleCrudPermission
     * const roleCrudPermission = await prisma.roleCrudPermission.upsert({
     *   create: {
     *     // ... data to create a RoleCrudPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the RoleCrudPermission we want to update
     *   }
     * })
     */
    upsert<T extends RoleCrudPermissionUpsertArgs>(args: SelectSubset<T, RoleCrudPermissionUpsertArgs<ExtArgs>>): Prisma__RoleCrudPermissionClient<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of RoleCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionCountArgs} args - Arguments to filter RoleCrudPermissions to count.
     * @example
     * // Count the number of RoleCrudPermissions
     * const count = await prisma.roleCrudPermission.count({
     *   where: {
     *     // ... the filter for the RoleCrudPermissions we want to count
     *   }
     * })
    **/
    count<T extends RoleCrudPermissionCountArgs>(
      args?: Subset<T, RoleCrudPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RoleCrudPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a RoleCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RoleCrudPermissionAggregateArgs>(args: Subset<T, RoleCrudPermissionAggregateArgs>): Prisma.PrismaPromise<GetRoleCrudPermissionAggregateType<T>>

    /**
     * Group by RoleCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCrudPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RoleCrudPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RoleCrudPermissionGroupByArgs['orderBy'] }
        : { orderBy?: RoleCrudPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RoleCrudPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRoleCrudPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the RoleCrudPermission model
   */
  readonly fields: RoleCrudPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for RoleCrudPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RoleCrudPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    role<T extends RoleDefaultArgs<ExtArgs> = {}>(args?: Subset<T, RoleDefaultArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    permission<T extends PermissionDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PermissionDefaultArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the RoleCrudPermission model
   */
  interface RoleCrudPermissionFieldRefs {
    readonly id: FieldRef<"RoleCrudPermission", 'Int'>
    readonly role_id: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_id: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_menu: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_create: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_read: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_update: FieldRef<"RoleCrudPermission", 'Int'>
    readonly permission_delete: FieldRef<"RoleCrudPermission", 'Int'>
    readonly created_at: FieldRef<"RoleCrudPermission", 'DateTime'>
    readonly created_by: FieldRef<"RoleCrudPermission", 'Int'>
    readonly updated_at: FieldRef<"RoleCrudPermission", 'DateTime'>
    readonly updated_by: FieldRef<"RoleCrudPermission", 'Int'>
    readonly deleted_at: FieldRef<"RoleCrudPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"RoleCrudPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * RoleCrudPermission findUnique
   */
  export type RoleCrudPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which RoleCrudPermission to fetch.
     */
    where: RoleCrudPermissionWhereUniqueInput
  }

  /**
   * RoleCrudPermission findUniqueOrThrow
   */
  export type RoleCrudPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which RoleCrudPermission to fetch.
     */
    where: RoleCrudPermissionWhereUniqueInput
  }

  /**
   * RoleCrudPermission findFirst
   */
  export type RoleCrudPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which RoleCrudPermission to fetch.
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleCrudPermissions to fetch.
     */
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleCrudPermissions.
     */
    cursor?: RoleCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleCrudPermissions.
     */
    distinct?: RoleCrudPermissionScalarFieldEnum | RoleCrudPermissionScalarFieldEnum[]
  }

  /**
   * RoleCrudPermission findFirstOrThrow
   */
  export type RoleCrudPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which RoleCrudPermission to fetch.
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleCrudPermissions to fetch.
     */
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleCrudPermissions.
     */
    cursor?: RoleCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleCrudPermissions.
     */
    distinct?: RoleCrudPermissionScalarFieldEnum | RoleCrudPermissionScalarFieldEnum[]
  }

  /**
   * RoleCrudPermission findMany
   */
  export type RoleCrudPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which RoleCrudPermissions to fetch.
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleCrudPermissions to fetch.
     */
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing RoleCrudPermissions.
     */
    cursor?: RoleCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleCrudPermissions.
     */
    skip?: number
    distinct?: RoleCrudPermissionScalarFieldEnum | RoleCrudPermissionScalarFieldEnum[]
  }

  /**
   * RoleCrudPermission create
   */
  export type RoleCrudPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * The data needed to create a RoleCrudPermission.
     */
    data: XOR<RoleCrudPermissionCreateInput, RoleCrudPermissionUncheckedCreateInput>
  }

  /**
   * RoleCrudPermission createMany
   */
  export type RoleCrudPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many RoleCrudPermissions.
     */
    data: RoleCrudPermissionCreateManyInput | RoleCrudPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * RoleCrudPermission update
   */
  export type RoleCrudPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * The data needed to update a RoleCrudPermission.
     */
    data: XOR<RoleCrudPermissionUpdateInput, RoleCrudPermissionUncheckedUpdateInput>
    /**
     * Choose, which RoleCrudPermission to update.
     */
    where: RoleCrudPermissionWhereUniqueInput
  }

  /**
   * RoleCrudPermission updateMany
   */
  export type RoleCrudPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update RoleCrudPermissions.
     */
    data: XOR<RoleCrudPermissionUpdateManyMutationInput, RoleCrudPermissionUncheckedUpdateManyInput>
    /**
     * Filter which RoleCrudPermissions to update
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * Limit how many RoleCrudPermissions to update.
     */
    limit?: number
  }

  /**
   * RoleCrudPermission upsert
   */
  export type RoleCrudPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * The filter to search for the RoleCrudPermission to update in case it exists.
     */
    where: RoleCrudPermissionWhereUniqueInput
    /**
     * In case the RoleCrudPermission found by the `where` argument doesn't exist, create a new RoleCrudPermission with this data.
     */
    create: XOR<RoleCrudPermissionCreateInput, RoleCrudPermissionUncheckedCreateInput>
    /**
     * In case the RoleCrudPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RoleCrudPermissionUpdateInput, RoleCrudPermissionUncheckedUpdateInput>
  }

  /**
   * RoleCrudPermission delete
   */
  export type RoleCrudPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter which RoleCrudPermission to delete.
     */
    where: RoleCrudPermissionWhereUniqueInput
  }

  /**
   * RoleCrudPermission deleteMany
   */
  export type RoleCrudPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleCrudPermissions to delete
     */
    where?: RoleCrudPermissionWhereInput
    /**
     * Limit how many RoleCrudPermissions to delete.
     */
    limit?: number
  }

  /**
   * RoleCrudPermission without action
   */
  export type RoleCrudPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
  }


  /**
   * Model RoleMaxCrudPermissions
   */

  export type AggregateRoleMaxCrudPermissions = {
    _count: RoleMaxCrudPermissionsCountAggregateOutputType | null
    _avg: RoleMaxCrudPermissionsAvgAggregateOutputType | null
    _sum: RoleMaxCrudPermissionsSumAggregateOutputType | null
    _min: RoleMaxCrudPermissionsMinAggregateOutputType | null
    _max: RoleMaxCrudPermissionsMaxAggregateOutputType | null
  }

  export type RoleMaxCrudPermissionsAvgAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleMaxCrudPermissionsSumAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleMaxCrudPermissionsMinAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleMaxCrudPermissionsMaxAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleMaxCrudPermissionsCountAggregateOutputType = {
    id: number
    role_id: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type RoleMaxCrudPermissionsAvgAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleMaxCrudPermissionsSumAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleMaxCrudPermissionsMinAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleMaxCrudPermissionsMaxAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleMaxCrudPermissionsCountAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type RoleMaxCrudPermissionsAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleMaxCrudPermissions to aggregate.
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxCrudPermissions to fetch.
     */
    orderBy?: RoleMaxCrudPermissionsOrderByWithRelationInput | RoleMaxCrudPermissionsOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RoleMaxCrudPermissionsWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned RoleMaxCrudPermissions
    **/
    _count?: true | RoleMaxCrudPermissionsCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RoleMaxCrudPermissionsAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RoleMaxCrudPermissionsSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RoleMaxCrudPermissionsMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RoleMaxCrudPermissionsMaxAggregateInputType
  }

  export type GetRoleMaxCrudPermissionsAggregateType<T extends RoleMaxCrudPermissionsAggregateArgs> = {
        [P in keyof T & keyof AggregateRoleMaxCrudPermissions]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRoleMaxCrudPermissions[P]>
      : GetScalarType<T[P], AggregateRoleMaxCrudPermissions[P]>
  }




  export type RoleMaxCrudPermissionsGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleMaxCrudPermissionsWhereInput
    orderBy?: RoleMaxCrudPermissionsOrderByWithAggregationInput | RoleMaxCrudPermissionsOrderByWithAggregationInput[]
    by: RoleMaxCrudPermissionsScalarFieldEnum[] | RoleMaxCrudPermissionsScalarFieldEnum
    having?: RoleMaxCrudPermissionsScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RoleMaxCrudPermissionsCountAggregateInputType | true
    _avg?: RoleMaxCrudPermissionsAvgAggregateInputType
    _sum?: RoleMaxCrudPermissionsSumAggregateInputType
    _min?: RoleMaxCrudPermissionsMinAggregateInputType
    _max?: RoleMaxCrudPermissionsMaxAggregateInputType
  }

  export type RoleMaxCrudPermissionsGroupByOutputType = {
    id: number
    role_id: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: RoleMaxCrudPermissionsCountAggregateOutputType | null
    _avg: RoleMaxCrudPermissionsAvgAggregateOutputType | null
    _sum: RoleMaxCrudPermissionsSumAggregateOutputType | null
    _min: RoleMaxCrudPermissionsMinAggregateOutputType | null
    _max: RoleMaxCrudPermissionsMaxAggregateOutputType | null
  }

  type GetRoleMaxCrudPermissionsGroupByPayload<T extends RoleMaxCrudPermissionsGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RoleMaxCrudPermissionsGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RoleMaxCrudPermissionsGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RoleMaxCrudPermissionsGroupByOutputType[P]>
            : GetScalarType<T[P], RoleMaxCrudPermissionsGroupByOutputType[P]>
        }
      >
    >


  export type RoleMaxCrudPermissionsSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["roleMaxCrudPermissions"]>



  export type RoleMaxCrudPermissionsSelectScalar = {
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type RoleMaxCrudPermissionsOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "role_id" | "permission_id" | "permission_menu" | "permission_create" | "permission_read" | "permission_update" | "permission_delete" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["roleMaxCrudPermissions"]>

  export type $RoleMaxCrudPermissionsPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "RoleMaxCrudPermissions"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      role_id: number
      permission_id: number
      permission_menu: number
      permission_create: number
      permission_read: number
      permission_update: number
      permission_delete: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["roleMaxCrudPermissions"]>
    composites: {}
  }

  type RoleMaxCrudPermissionsGetPayload<S extends boolean | null | undefined | RoleMaxCrudPermissionsDefaultArgs> = $Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload, S>

  type RoleMaxCrudPermissionsCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RoleMaxCrudPermissionsFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RoleMaxCrudPermissionsCountAggregateInputType | true
    }

  export interface RoleMaxCrudPermissionsDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['RoleMaxCrudPermissions'], meta: { name: 'RoleMaxCrudPermissions' } }
    /**
     * Find zero or one RoleMaxCrudPermissions that matches the filter.
     * @param {RoleMaxCrudPermissionsFindUniqueArgs} args - Arguments to find a RoleMaxCrudPermissions
     * @example
     * // Get one RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RoleMaxCrudPermissionsFindUniqueArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsFindUniqueArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one RoleMaxCrudPermissions that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RoleMaxCrudPermissionsFindUniqueOrThrowArgs} args - Arguments to find a RoleMaxCrudPermissions
     * @example
     * // Get one RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RoleMaxCrudPermissionsFindUniqueOrThrowArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleMaxCrudPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsFindFirstArgs} args - Arguments to find a RoleMaxCrudPermissions
     * @example
     * // Get one RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RoleMaxCrudPermissionsFindFirstArgs>(args?: SelectSubset<T, RoleMaxCrudPermissionsFindFirstArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleMaxCrudPermissions that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsFindFirstOrThrowArgs} args - Arguments to find a RoleMaxCrudPermissions
     * @example
     * // Get one RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RoleMaxCrudPermissionsFindFirstOrThrowArgs>(args?: SelectSubset<T, RoleMaxCrudPermissionsFindFirstOrThrowArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more RoleMaxCrudPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findMany()
     * 
     * // Get first 10 RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const roleMaxCrudPermissionsWithIdOnly = await prisma.roleMaxCrudPermissions.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RoleMaxCrudPermissionsFindManyArgs>(args?: SelectSubset<T, RoleMaxCrudPermissionsFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsCreateArgs} args - Arguments to create a RoleMaxCrudPermissions.
     * @example
     * // Create one RoleMaxCrudPermissions
     * const RoleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.create({
     *   data: {
     *     // ... data to create a RoleMaxCrudPermissions
     *   }
     * })
     * 
     */
    create<T extends RoleMaxCrudPermissionsCreateArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsCreateArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsCreateManyArgs} args - Arguments to create many RoleMaxCrudPermissions.
     * @example
     * // Create many RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RoleMaxCrudPermissionsCreateManyArgs>(args?: SelectSubset<T, RoleMaxCrudPermissionsCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsDeleteArgs} args - Arguments to delete one RoleMaxCrudPermissions.
     * @example
     * // Delete one RoleMaxCrudPermissions
     * const RoleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.delete({
     *   where: {
     *     // ... filter to delete one RoleMaxCrudPermissions
     *   }
     * })
     * 
     */
    delete<T extends RoleMaxCrudPermissionsDeleteArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsDeleteArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsUpdateArgs} args - Arguments to update one RoleMaxCrudPermissions.
     * @example
     * // Update one RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RoleMaxCrudPermissionsUpdateArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsUpdateArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsDeleteManyArgs} args - Arguments to filter RoleMaxCrudPermissions to delete.
     * @example
     * // Delete a few RoleMaxCrudPermissions
     * const { count } = await prisma.roleMaxCrudPermissions.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RoleMaxCrudPermissionsDeleteManyArgs>(args?: SelectSubset<T, RoleMaxCrudPermissionsDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more RoleMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RoleMaxCrudPermissionsUpdateManyArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one RoleMaxCrudPermissions.
     * @param {RoleMaxCrudPermissionsUpsertArgs} args - Arguments to update or create a RoleMaxCrudPermissions.
     * @example
     * // Update or create a RoleMaxCrudPermissions
     * const roleMaxCrudPermissions = await prisma.roleMaxCrudPermissions.upsert({
     *   create: {
     *     // ... data to create a RoleMaxCrudPermissions
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the RoleMaxCrudPermissions we want to update
     *   }
     * })
     */
    upsert<T extends RoleMaxCrudPermissionsUpsertArgs>(args: SelectSubset<T, RoleMaxCrudPermissionsUpsertArgs<ExtArgs>>): Prisma__RoleMaxCrudPermissionsClient<$Result.GetResult<Prisma.$RoleMaxCrudPermissionsPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of RoleMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsCountArgs} args - Arguments to filter RoleMaxCrudPermissions to count.
     * @example
     * // Count the number of RoleMaxCrudPermissions
     * const count = await prisma.roleMaxCrudPermissions.count({
     *   where: {
     *     // ... the filter for the RoleMaxCrudPermissions we want to count
     *   }
     * })
    **/
    count<T extends RoleMaxCrudPermissionsCountArgs>(
      args?: Subset<T, RoleMaxCrudPermissionsCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RoleMaxCrudPermissionsCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a RoleMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RoleMaxCrudPermissionsAggregateArgs>(args: Subset<T, RoleMaxCrudPermissionsAggregateArgs>): Prisma.PrismaPromise<GetRoleMaxCrudPermissionsAggregateType<T>>

    /**
     * Group by RoleMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxCrudPermissionsGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RoleMaxCrudPermissionsGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RoleMaxCrudPermissionsGroupByArgs['orderBy'] }
        : { orderBy?: RoleMaxCrudPermissionsGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RoleMaxCrudPermissionsGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRoleMaxCrudPermissionsGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the RoleMaxCrudPermissions model
   */
  readonly fields: RoleMaxCrudPermissionsFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for RoleMaxCrudPermissions.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RoleMaxCrudPermissionsClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the RoleMaxCrudPermissions model
   */
  interface RoleMaxCrudPermissionsFieldRefs {
    readonly id: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly role_id: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_id: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_menu: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_create: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_read: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_update: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly permission_delete: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly created_at: FieldRef<"RoleMaxCrudPermissions", 'DateTime'>
    readonly created_by: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly updated_at: FieldRef<"RoleMaxCrudPermissions", 'DateTime'>
    readonly updated_by: FieldRef<"RoleMaxCrudPermissions", 'Int'>
    readonly deleted_at: FieldRef<"RoleMaxCrudPermissions", 'DateTime'>
    readonly deleted_by: FieldRef<"RoleMaxCrudPermissions", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * RoleMaxCrudPermissions findUnique
   */
  export type RoleMaxCrudPermissionsFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxCrudPermissions to fetch.
     */
    where: RoleMaxCrudPermissionsWhereUniqueInput
  }

  /**
   * RoleMaxCrudPermissions findUniqueOrThrow
   */
  export type RoleMaxCrudPermissionsFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxCrudPermissions to fetch.
     */
    where: RoleMaxCrudPermissionsWhereUniqueInput
  }

  /**
   * RoleMaxCrudPermissions findFirst
   */
  export type RoleMaxCrudPermissionsFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxCrudPermissions to fetch.
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxCrudPermissions to fetch.
     */
    orderBy?: RoleMaxCrudPermissionsOrderByWithRelationInput | RoleMaxCrudPermissionsOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleMaxCrudPermissions.
     */
    cursor?: RoleMaxCrudPermissionsWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleMaxCrudPermissions.
     */
    distinct?: RoleMaxCrudPermissionsScalarFieldEnum | RoleMaxCrudPermissionsScalarFieldEnum[]
  }

  /**
   * RoleMaxCrudPermissions findFirstOrThrow
   */
  export type RoleMaxCrudPermissionsFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxCrudPermissions to fetch.
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxCrudPermissions to fetch.
     */
    orderBy?: RoleMaxCrudPermissionsOrderByWithRelationInput | RoleMaxCrudPermissionsOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleMaxCrudPermissions.
     */
    cursor?: RoleMaxCrudPermissionsWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleMaxCrudPermissions.
     */
    distinct?: RoleMaxCrudPermissionsScalarFieldEnum | RoleMaxCrudPermissionsScalarFieldEnum[]
  }

  /**
   * RoleMaxCrudPermissions findMany
   */
  export type RoleMaxCrudPermissionsFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxCrudPermissions to fetch.
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxCrudPermissions to fetch.
     */
    orderBy?: RoleMaxCrudPermissionsOrderByWithRelationInput | RoleMaxCrudPermissionsOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing RoleMaxCrudPermissions.
     */
    cursor?: RoleMaxCrudPermissionsWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxCrudPermissions.
     */
    skip?: number
    distinct?: RoleMaxCrudPermissionsScalarFieldEnum | RoleMaxCrudPermissionsScalarFieldEnum[]
  }

  /**
   * RoleMaxCrudPermissions create
   */
  export type RoleMaxCrudPermissionsCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * The data needed to create a RoleMaxCrudPermissions.
     */
    data: XOR<RoleMaxCrudPermissionsCreateInput, RoleMaxCrudPermissionsUncheckedCreateInput>
  }

  /**
   * RoleMaxCrudPermissions createMany
   */
  export type RoleMaxCrudPermissionsCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many RoleMaxCrudPermissions.
     */
    data: RoleMaxCrudPermissionsCreateManyInput | RoleMaxCrudPermissionsCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * RoleMaxCrudPermissions update
   */
  export type RoleMaxCrudPermissionsUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * The data needed to update a RoleMaxCrudPermissions.
     */
    data: XOR<RoleMaxCrudPermissionsUpdateInput, RoleMaxCrudPermissionsUncheckedUpdateInput>
    /**
     * Choose, which RoleMaxCrudPermissions to update.
     */
    where: RoleMaxCrudPermissionsWhereUniqueInput
  }

  /**
   * RoleMaxCrudPermissions updateMany
   */
  export type RoleMaxCrudPermissionsUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update RoleMaxCrudPermissions.
     */
    data: XOR<RoleMaxCrudPermissionsUpdateManyMutationInput, RoleMaxCrudPermissionsUncheckedUpdateManyInput>
    /**
     * Filter which RoleMaxCrudPermissions to update
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * Limit how many RoleMaxCrudPermissions to update.
     */
    limit?: number
  }

  /**
   * RoleMaxCrudPermissions upsert
   */
  export type RoleMaxCrudPermissionsUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * The filter to search for the RoleMaxCrudPermissions to update in case it exists.
     */
    where: RoleMaxCrudPermissionsWhereUniqueInput
    /**
     * In case the RoleMaxCrudPermissions found by the `where` argument doesn't exist, create a new RoleMaxCrudPermissions with this data.
     */
    create: XOR<RoleMaxCrudPermissionsCreateInput, RoleMaxCrudPermissionsUncheckedCreateInput>
    /**
     * In case the RoleMaxCrudPermissions was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RoleMaxCrudPermissionsUpdateInput, RoleMaxCrudPermissionsUncheckedUpdateInput>
  }

  /**
   * RoleMaxCrudPermissions delete
   */
  export type RoleMaxCrudPermissionsDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
    /**
     * Filter which RoleMaxCrudPermissions to delete.
     */
    where: RoleMaxCrudPermissionsWhereUniqueInput
  }

  /**
   * RoleMaxCrudPermissions deleteMany
   */
  export type RoleMaxCrudPermissionsDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleMaxCrudPermissions to delete
     */
    where?: RoleMaxCrudPermissionsWhereInput
    /**
     * Limit how many RoleMaxCrudPermissions to delete.
     */
    limit?: number
  }

  /**
   * RoleMaxCrudPermissions without action
   */
  export type RoleMaxCrudPermissionsDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxCrudPermissions
     */
    select?: RoleMaxCrudPermissionsSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxCrudPermissions
     */
    omit?: RoleMaxCrudPermissionsOmit<ExtArgs> | null
  }


  /**
   * Model RoleMaxPermission
   */

  export type AggregateRoleMaxPermission = {
    _count: RoleMaxPermissionCountAggregateOutputType | null
    _avg: RoleMaxPermissionAvgAggregateOutputType | null
    _sum: RoleMaxPermissionSumAggregateOutputType | null
    _min: RoleMaxPermissionMinAggregateOutputType | null
    _max: RoleMaxPermissionMaxAggregateOutputType | null
  }

  export type RoleMaxPermissionAvgAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleMaxPermissionSumAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleMaxPermissionMinAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleMaxPermissionMaxAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleMaxPermissionCountAggregateOutputType = {
    id: number
    role_id: number
    permission_id: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type RoleMaxPermissionAvgAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleMaxPermissionSumAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleMaxPermissionMinAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleMaxPermissionMaxAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleMaxPermissionCountAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type RoleMaxPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleMaxPermission to aggregate.
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxPermissions to fetch.
     */
    orderBy?: RoleMaxPermissionOrderByWithRelationInput | RoleMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RoleMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned RoleMaxPermissions
    **/
    _count?: true | RoleMaxPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RoleMaxPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RoleMaxPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RoleMaxPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RoleMaxPermissionMaxAggregateInputType
  }

  export type GetRoleMaxPermissionAggregateType<T extends RoleMaxPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateRoleMaxPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRoleMaxPermission[P]>
      : GetScalarType<T[P], AggregateRoleMaxPermission[P]>
  }




  export type RoleMaxPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleMaxPermissionWhereInput
    orderBy?: RoleMaxPermissionOrderByWithAggregationInput | RoleMaxPermissionOrderByWithAggregationInput[]
    by: RoleMaxPermissionScalarFieldEnum[] | RoleMaxPermissionScalarFieldEnum
    having?: RoleMaxPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RoleMaxPermissionCountAggregateInputType | true
    _avg?: RoleMaxPermissionAvgAggregateInputType
    _sum?: RoleMaxPermissionSumAggregateInputType
    _min?: RoleMaxPermissionMinAggregateInputType
    _max?: RoleMaxPermissionMaxAggregateInputType
  }

  export type RoleMaxPermissionGroupByOutputType = {
    id: number
    role_id: number
    permission_id: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: RoleMaxPermissionCountAggregateOutputType | null
    _avg: RoleMaxPermissionAvgAggregateOutputType | null
    _sum: RoleMaxPermissionSumAggregateOutputType | null
    _min: RoleMaxPermissionMinAggregateOutputType | null
    _max: RoleMaxPermissionMaxAggregateOutputType | null
  }

  type GetRoleMaxPermissionGroupByPayload<T extends RoleMaxPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RoleMaxPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RoleMaxPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RoleMaxPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], RoleMaxPermissionGroupByOutputType[P]>
        }
      >
    >


  export type RoleMaxPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["roleMaxPermission"]>



  export type RoleMaxPermissionSelectScalar = {
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type RoleMaxPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "role_id" | "permission_id" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["roleMaxPermission"]>

  export type $RoleMaxPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "RoleMaxPermission"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      role_id: number
      permission_id: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["roleMaxPermission"]>
    composites: {}
  }

  type RoleMaxPermissionGetPayload<S extends boolean | null | undefined | RoleMaxPermissionDefaultArgs> = $Result.GetResult<Prisma.$RoleMaxPermissionPayload, S>

  type RoleMaxPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RoleMaxPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RoleMaxPermissionCountAggregateInputType | true
    }

  export interface RoleMaxPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['RoleMaxPermission'], meta: { name: 'RoleMaxPermission' } }
    /**
     * Find zero or one RoleMaxPermission that matches the filter.
     * @param {RoleMaxPermissionFindUniqueArgs} args - Arguments to find a RoleMaxPermission
     * @example
     * // Get one RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RoleMaxPermissionFindUniqueArgs>(args: SelectSubset<T, RoleMaxPermissionFindUniqueArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one RoleMaxPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RoleMaxPermissionFindUniqueOrThrowArgs} args - Arguments to find a RoleMaxPermission
     * @example
     * // Get one RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RoleMaxPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, RoleMaxPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleMaxPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionFindFirstArgs} args - Arguments to find a RoleMaxPermission
     * @example
     * // Get one RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RoleMaxPermissionFindFirstArgs>(args?: SelectSubset<T, RoleMaxPermissionFindFirstArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RoleMaxPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionFindFirstOrThrowArgs} args - Arguments to find a RoleMaxPermission
     * @example
     * // Get one RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RoleMaxPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, RoleMaxPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more RoleMaxPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all RoleMaxPermissions
     * const roleMaxPermissions = await prisma.roleMaxPermission.findMany()
     * 
     * // Get first 10 RoleMaxPermissions
     * const roleMaxPermissions = await prisma.roleMaxPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const roleMaxPermissionWithIdOnly = await prisma.roleMaxPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RoleMaxPermissionFindManyArgs>(args?: SelectSubset<T, RoleMaxPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a RoleMaxPermission.
     * @param {RoleMaxPermissionCreateArgs} args - Arguments to create a RoleMaxPermission.
     * @example
     * // Create one RoleMaxPermission
     * const RoleMaxPermission = await prisma.roleMaxPermission.create({
     *   data: {
     *     // ... data to create a RoleMaxPermission
     *   }
     * })
     * 
     */
    create<T extends RoleMaxPermissionCreateArgs>(args: SelectSubset<T, RoleMaxPermissionCreateArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many RoleMaxPermissions.
     * @param {RoleMaxPermissionCreateManyArgs} args - Arguments to create many RoleMaxPermissions.
     * @example
     * // Create many RoleMaxPermissions
     * const roleMaxPermission = await prisma.roleMaxPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RoleMaxPermissionCreateManyArgs>(args?: SelectSubset<T, RoleMaxPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a RoleMaxPermission.
     * @param {RoleMaxPermissionDeleteArgs} args - Arguments to delete one RoleMaxPermission.
     * @example
     * // Delete one RoleMaxPermission
     * const RoleMaxPermission = await prisma.roleMaxPermission.delete({
     *   where: {
     *     // ... filter to delete one RoleMaxPermission
     *   }
     * })
     * 
     */
    delete<T extends RoleMaxPermissionDeleteArgs>(args: SelectSubset<T, RoleMaxPermissionDeleteArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one RoleMaxPermission.
     * @param {RoleMaxPermissionUpdateArgs} args - Arguments to update one RoleMaxPermission.
     * @example
     * // Update one RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RoleMaxPermissionUpdateArgs>(args: SelectSubset<T, RoleMaxPermissionUpdateArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more RoleMaxPermissions.
     * @param {RoleMaxPermissionDeleteManyArgs} args - Arguments to filter RoleMaxPermissions to delete.
     * @example
     * // Delete a few RoleMaxPermissions
     * const { count } = await prisma.roleMaxPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RoleMaxPermissionDeleteManyArgs>(args?: SelectSubset<T, RoleMaxPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more RoleMaxPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many RoleMaxPermissions
     * const roleMaxPermission = await prisma.roleMaxPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RoleMaxPermissionUpdateManyArgs>(args: SelectSubset<T, RoleMaxPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one RoleMaxPermission.
     * @param {RoleMaxPermissionUpsertArgs} args - Arguments to update or create a RoleMaxPermission.
     * @example
     * // Update or create a RoleMaxPermission
     * const roleMaxPermission = await prisma.roleMaxPermission.upsert({
     *   create: {
     *     // ... data to create a RoleMaxPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the RoleMaxPermission we want to update
     *   }
     * })
     */
    upsert<T extends RoleMaxPermissionUpsertArgs>(args: SelectSubset<T, RoleMaxPermissionUpsertArgs<ExtArgs>>): Prisma__RoleMaxPermissionClient<$Result.GetResult<Prisma.$RoleMaxPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of RoleMaxPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionCountArgs} args - Arguments to filter RoleMaxPermissions to count.
     * @example
     * // Count the number of RoleMaxPermissions
     * const count = await prisma.roleMaxPermission.count({
     *   where: {
     *     // ... the filter for the RoleMaxPermissions we want to count
     *   }
     * })
    **/
    count<T extends RoleMaxPermissionCountArgs>(
      args?: Subset<T, RoleMaxPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RoleMaxPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a RoleMaxPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RoleMaxPermissionAggregateArgs>(args: Subset<T, RoleMaxPermissionAggregateArgs>): Prisma.PrismaPromise<GetRoleMaxPermissionAggregateType<T>>

    /**
     * Group by RoleMaxPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleMaxPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RoleMaxPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RoleMaxPermissionGroupByArgs['orderBy'] }
        : { orderBy?: RoleMaxPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RoleMaxPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRoleMaxPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the RoleMaxPermission model
   */
  readonly fields: RoleMaxPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for RoleMaxPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RoleMaxPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the RoleMaxPermission model
   */
  interface RoleMaxPermissionFieldRefs {
    readonly id: FieldRef<"RoleMaxPermission", 'Int'>
    readonly role_id: FieldRef<"RoleMaxPermission", 'Int'>
    readonly permission_id: FieldRef<"RoleMaxPermission", 'Int'>
    readonly created_at: FieldRef<"RoleMaxPermission", 'DateTime'>
    readonly created_by: FieldRef<"RoleMaxPermission", 'Int'>
    readonly updated_at: FieldRef<"RoleMaxPermission", 'DateTime'>
    readonly updated_by: FieldRef<"RoleMaxPermission", 'Int'>
    readonly deleted_at: FieldRef<"RoleMaxPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"RoleMaxPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * RoleMaxPermission findUnique
   */
  export type RoleMaxPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxPermission to fetch.
     */
    where: RoleMaxPermissionWhereUniqueInput
  }

  /**
   * RoleMaxPermission findUniqueOrThrow
   */
  export type RoleMaxPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxPermission to fetch.
     */
    where: RoleMaxPermissionWhereUniqueInput
  }

  /**
   * RoleMaxPermission findFirst
   */
  export type RoleMaxPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxPermission to fetch.
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxPermissions to fetch.
     */
    orderBy?: RoleMaxPermissionOrderByWithRelationInput | RoleMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleMaxPermissions.
     */
    cursor?: RoleMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleMaxPermissions.
     */
    distinct?: RoleMaxPermissionScalarFieldEnum | RoleMaxPermissionScalarFieldEnum[]
  }

  /**
   * RoleMaxPermission findFirstOrThrow
   */
  export type RoleMaxPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxPermission to fetch.
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxPermissions to fetch.
     */
    orderBy?: RoleMaxPermissionOrderByWithRelationInput | RoleMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RoleMaxPermissions.
     */
    cursor?: RoleMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RoleMaxPermissions.
     */
    distinct?: RoleMaxPermissionScalarFieldEnum | RoleMaxPermissionScalarFieldEnum[]
  }

  /**
   * RoleMaxPermission findMany
   */
  export type RoleMaxPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which RoleMaxPermissions to fetch.
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RoleMaxPermissions to fetch.
     */
    orderBy?: RoleMaxPermissionOrderByWithRelationInput | RoleMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing RoleMaxPermissions.
     */
    cursor?: RoleMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RoleMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RoleMaxPermissions.
     */
    skip?: number
    distinct?: RoleMaxPermissionScalarFieldEnum | RoleMaxPermissionScalarFieldEnum[]
  }

  /**
   * RoleMaxPermission create
   */
  export type RoleMaxPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * The data needed to create a RoleMaxPermission.
     */
    data: XOR<RoleMaxPermissionCreateInput, RoleMaxPermissionUncheckedCreateInput>
  }

  /**
   * RoleMaxPermission createMany
   */
  export type RoleMaxPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many RoleMaxPermissions.
     */
    data: RoleMaxPermissionCreateManyInput | RoleMaxPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * RoleMaxPermission update
   */
  export type RoleMaxPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * The data needed to update a RoleMaxPermission.
     */
    data: XOR<RoleMaxPermissionUpdateInput, RoleMaxPermissionUncheckedUpdateInput>
    /**
     * Choose, which RoleMaxPermission to update.
     */
    where: RoleMaxPermissionWhereUniqueInput
  }

  /**
   * RoleMaxPermission updateMany
   */
  export type RoleMaxPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update RoleMaxPermissions.
     */
    data: XOR<RoleMaxPermissionUpdateManyMutationInput, RoleMaxPermissionUncheckedUpdateManyInput>
    /**
     * Filter which RoleMaxPermissions to update
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * Limit how many RoleMaxPermissions to update.
     */
    limit?: number
  }

  /**
   * RoleMaxPermission upsert
   */
  export type RoleMaxPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * The filter to search for the RoleMaxPermission to update in case it exists.
     */
    where: RoleMaxPermissionWhereUniqueInput
    /**
     * In case the RoleMaxPermission found by the `where` argument doesn't exist, create a new RoleMaxPermission with this data.
     */
    create: XOR<RoleMaxPermissionCreateInput, RoleMaxPermissionUncheckedCreateInput>
    /**
     * In case the RoleMaxPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RoleMaxPermissionUpdateInput, RoleMaxPermissionUncheckedUpdateInput>
  }

  /**
   * RoleMaxPermission delete
   */
  export type RoleMaxPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter which RoleMaxPermission to delete.
     */
    where: RoleMaxPermissionWhereUniqueInput
  }

  /**
   * RoleMaxPermission deleteMany
   */
  export type RoleMaxPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RoleMaxPermissions to delete
     */
    where?: RoleMaxPermissionWhereInput
    /**
     * Limit how many RoleMaxPermissions to delete.
     */
    limit?: number
  }

  /**
   * RoleMaxPermission without action
   */
  export type RoleMaxPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleMaxPermission
     */
    select?: RoleMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleMaxPermission
     */
    omit?: RoleMaxPermissionOmit<ExtArgs> | null
  }


  /**
   * Model RolePermission
   */

  export type AggregateRolePermission = {
    _count: RolePermissionCountAggregateOutputType | null
    _avg: RolePermissionAvgAggregateOutputType | null
    _sum: RolePermissionSumAggregateOutputType | null
    _min: RolePermissionMinAggregateOutputType | null
    _max: RolePermissionMaxAggregateOutputType | null
  }

  export type RolePermissionAvgAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RolePermissionSumAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RolePermissionMinAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RolePermissionMaxAggregateOutputType = {
    id: number | null
    role_id: number | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RolePermissionCountAggregateOutputType = {
    id: number
    role_id: number
    permission_id: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type RolePermissionAvgAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RolePermissionSumAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RolePermissionMinAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RolePermissionMaxAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RolePermissionCountAggregateInputType = {
    id?: true
    role_id?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type RolePermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RolePermission to aggregate.
     */
    where?: RolePermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RolePermissions to fetch.
     */
    orderBy?: RolePermissionOrderByWithRelationInput | RolePermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RolePermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RolePermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RolePermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned RolePermissions
    **/
    _count?: true | RolePermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RolePermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RolePermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RolePermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RolePermissionMaxAggregateInputType
  }

  export type GetRolePermissionAggregateType<T extends RolePermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateRolePermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRolePermission[P]>
      : GetScalarType<T[P], AggregateRolePermission[P]>
  }




  export type RolePermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RolePermissionWhereInput
    orderBy?: RolePermissionOrderByWithAggregationInput | RolePermissionOrderByWithAggregationInput[]
    by: RolePermissionScalarFieldEnum[] | RolePermissionScalarFieldEnum
    having?: RolePermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RolePermissionCountAggregateInputType | true
    _avg?: RolePermissionAvgAggregateInputType
    _sum?: RolePermissionSumAggregateInputType
    _min?: RolePermissionMinAggregateInputType
    _max?: RolePermissionMaxAggregateInputType
  }

  export type RolePermissionGroupByOutputType = {
    id: number
    role_id: number
    permission_id: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: RolePermissionCountAggregateOutputType | null
    _avg: RolePermissionAvgAggregateOutputType | null
    _sum: RolePermissionSumAggregateOutputType | null
    _min: RolePermissionMinAggregateOutputType | null
    _max: RolePermissionMaxAggregateOutputType | null
  }

  type GetRolePermissionGroupByPayload<T extends RolePermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RolePermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RolePermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RolePermissionGroupByOutputType[P]>
            : GetScalarType<T[P], RolePermissionGroupByOutputType[P]>
        }
      >
    >


  export type RolePermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["rolePermission"]>



  export type RolePermissionSelectScalar = {
    id?: boolean
    role_id?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type RolePermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "role_id" | "permission_id" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["rolePermission"]>
  export type RolePermissionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
  }

  export type $RolePermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "RolePermission"
    objects: {
      permission: Prisma.$PermissionPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      role_id: number
      permission_id: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["rolePermission"]>
    composites: {}
  }

  type RolePermissionGetPayload<S extends boolean | null | undefined | RolePermissionDefaultArgs> = $Result.GetResult<Prisma.$RolePermissionPayload, S>

  type RolePermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RolePermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RolePermissionCountAggregateInputType | true
    }

  export interface RolePermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['RolePermission'], meta: { name: 'RolePermission' } }
    /**
     * Find zero or one RolePermission that matches the filter.
     * @param {RolePermissionFindUniqueArgs} args - Arguments to find a RolePermission
     * @example
     * // Get one RolePermission
     * const rolePermission = await prisma.rolePermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RolePermissionFindUniqueArgs>(args: SelectSubset<T, RolePermissionFindUniqueArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one RolePermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RolePermissionFindUniqueOrThrowArgs} args - Arguments to find a RolePermission
     * @example
     * // Get one RolePermission
     * const rolePermission = await prisma.rolePermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RolePermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, RolePermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RolePermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionFindFirstArgs} args - Arguments to find a RolePermission
     * @example
     * // Get one RolePermission
     * const rolePermission = await prisma.rolePermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RolePermissionFindFirstArgs>(args?: SelectSubset<T, RolePermissionFindFirstArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first RolePermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionFindFirstOrThrowArgs} args - Arguments to find a RolePermission
     * @example
     * // Get one RolePermission
     * const rolePermission = await prisma.rolePermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RolePermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, RolePermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more RolePermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all RolePermissions
     * const rolePermissions = await prisma.rolePermission.findMany()
     * 
     * // Get first 10 RolePermissions
     * const rolePermissions = await prisma.rolePermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const rolePermissionWithIdOnly = await prisma.rolePermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RolePermissionFindManyArgs>(args?: SelectSubset<T, RolePermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a RolePermission.
     * @param {RolePermissionCreateArgs} args - Arguments to create a RolePermission.
     * @example
     * // Create one RolePermission
     * const RolePermission = await prisma.rolePermission.create({
     *   data: {
     *     // ... data to create a RolePermission
     *   }
     * })
     * 
     */
    create<T extends RolePermissionCreateArgs>(args: SelectSubset<T, RolePermissionCreateArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many RolePermissions.
     * @param {RolePermissionCreateManyArgs} args - Arguments to create many RolePermissions.
     * @example
     * // Create many RolePermissions
     * const rolePermission = await prisma.rolePermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RolePermissionCreateManyArgs>(args?: SelectSubset<T, RolePermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a RolePermission.
     * @param {RolePermissionDeleteArgs} args - Arguments to delete one RolePermission.
     * @example
     * // Delete one RolePermission
     * const RolePermission = await prisma.rolePermission.delete({
     *   where: {
     *     // ... filter to delete one RolePermission
     *   }
     * })
     * 
     */
    delete<T extends RolePermissionDeleteArgs>(args: SelectSubset<T, RolePermissionDeleteArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one RolePermission.
     * @param {RolePermissionUpdateArgs} args - Arguments to update one RolePermission.
     * @example
     * // Update one RolePermission
     * const rolePermission = await prisma.rolePermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RolePermissionUpdateArgs>(args: SelectSubset<T, RolePermissionUpdateArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more RolePermissions.
     * @param {RolePermissionDeleteManyArgs} args - Arguments to filter RolePermissions to delete.
     * @example
     * // Delete a few RolePermissions
     * const { count } = await prisma.rolePermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RolePermissionDeleteManyArgs>(args?: SelectSubset<T, RolePermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more RolePermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many RolePermissions
     * const rolePermission = await prisma.rolePermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RolePermissionUpdateManyArgs>(args: SelectSubset<T, RolePermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one RolePermission.
     * @param {RolePermissionUpsertArgs} args - Arguments to update or create a RolePermission.
     * @example
     * // Update or create a RolePermission
     * const rolePermission = await prisma.rolePermission.upsert({
     *   create: {
     *     // ... data to create a RolePermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the RolePermission we want to update
     *   }
     * })
     */
    upsert<T extends RolePermissionUpsertArgs>(args: SelectSubset<T, RolePermissionUpsertArgs<ExtArgs>>): Prisma__RolePermissionClient<$Result.GetResult<Prisma.$RolePermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of RolePermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionCountArgs} args - Arguments to filter RolePermissions to count.
     * @example
     * // Count the number of RolePermissions
     * const count = await prisma.rolePermission.count({
     *   where: {
     *     // ... the filter for the RolePermissions we want to count
     *   }
     * })
    **/
    count<T extends RolePermissionCountArgs>(
      args?: Subset<T, RolePermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RolePermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a RolePermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RolePermissionAggregateArgs>(args: Subset<T, RolePermissionAggregateArgs>): Prisma.PrismaPromise<GetRolePermissionAggregateType<T>>

    /**
     * Group by RolePermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RolePermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RolePermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RolePermissionGroupByArgs['orderBy'] }
        : { orderBy?: RolePermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RolePermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRolePermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the RolePermission model
   */
  readonly fields: RolePermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for RolePermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RolePermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    permission<T extends PermissionDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PermissionDefaultArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the RolePermission model
   */
  interface RolePermissionFieldRefs {
    readonly id: FieldRef<"RolePermission", 'Int'>
    readonly role_id: FieldRef<"RolePermission", 'Int'>
    readonly permission_id: FieldRef<"RolePermission", 'Int'>
    readonly created_at: FieldRef<"RolePermission", 'DateTime'>
    readonly created_by: FieldRef<"RolePermission", 'Int'>
    readonly updated_at: FieldRef<"RolePermission", 'DateTime'>
    readonly updated_by: FieldRef<"RolePermission", 'Int'>
    readonly deleted_at: FieldRef<"RolePermission", 'DateTime'>
    readonly deleted_by: FieldRef<"RolePermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * RolePermission findUnique
   */
  export type RolePermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter, which RolePermission to fetch.
     */
    where: RolePermissionWhereUniqueInput
  }

  /**
   * RolePermission findUniqueOrThrow
   */
  export type RolePermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter, which RolePermission to fetch.
     */
    where: RolePermissionWhereUniqueInput
  }

  /**
   * RolePermission findFirst
   */
  export type RolePermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter, which RolePermission to fetch.
     */
    where?: RolePermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RolePermissions to fetch.
     */
    orderBy?: RolePermissionOrderByWithRelationInput | RolePermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RolePermissions.
     */
    cursor?: RolePermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RolePermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RolePermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RolePermissions.
     */
    distinct?: RolePermissionScalarFieldEnum | RolePermissionScalarFieldEnum[]
  }

  /**
   * RolePermission findFirstOrThrow
   */
  export type RolePermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter, which RolePermission to fetch.
     */
    where?: RolePermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RolePermissions to fetch.
     */
    orderBy?: RolePermissionOrderByWithRelationInput | RolePermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for RolePermissions.
     */
    cursor?: RolePermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RolePermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RolePermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of RolePermissions.
     */
    distinct?: RolePermissionScalarFieldEnum | RolePermissionScalarFieldEnum[]
  }

  /**
   * RolePermission findMany
   */
  export type RolePermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter, which RolePermissions to fetch.
     */
    where?: RolePermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of RolePermissions to fetch.
     */
    orderBy?: RolePermissionOrderByWithRelationInput | RolePermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing RolePermissions.
     */
    cursor?: RolePermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` RolePermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` RolePermissions.
     */
    skip?: number
    distinct?: RolePermissionScalarFieldEnum | RolePermissionScalarFieldEnum[]
  }

  /**
   * RolePermission create
   */
  export type RolePermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * The data needed to create a RolePermission.
     */
    data: XOR<RolePermissionCreateInput, RolePermissionUncheckedCreateInput>
  }

  /**
   * RolePermission createMany
   */
  export type RolePermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many RolePermissions.
     */
    data: RolePermissionCreateManyInput | RolePermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * RolePermission update
   */
  export type RolePermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * The data needed to update a RolePermission.
     */
    data: XOR<RolePermissionUpdateInput, RolePermissionUncheckedUpdateInput>
    /**
     * Choose, which RolePermission to update.
     */
    where: RolePermissionWhereUniqueInput
  }

  /**
   * RolePermission updateMany
   */
  export type RolePermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update RolePermissions.
     */
    data: XOR<RolePermissionUpdateManyMutationInput, RolePermissionUncheckedUpdateManyInput>
    /**
     * Filter which RolePermissions to update
     */
    where?: RolePermissionWhereInput
    /**
     * Limit how many RolePermissions to update.
     */
    limit?: number
  }

  /**
   * RolePermission upsert
   */
  export type RolePermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * The filter to search for the RolePermission to update in case it exists.
     */
    where: RolePermissionWhereUniqueInput
    /**
     * In case the RolePermission found by the `where` argument doesn't exist, create a new RolePermission with this data.
     */
    create: XOR<RolePermissionCreateInput, RolePermissionUncheckedCreateInput>
    /**
     * In case the RolePermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RolePermissionUpdateInput, RolePermissionUncheckedUpdateInput>
  }

  /**
   * RolePermission delete
   */
  export type RolePermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
    /**
     * Filter which RolePermission to delete.
     */
    where: RolePermissionWhereUniqueInput
  }

  /**
   * RolePermission deleteMany
   */
  export type RolePermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which RolePermissions to delete
     */
    where?: RolePermissionWhereInput
    /**
     * Limit how many RolePermissions to delete.
     */
    limit?: number
  }

  /**
   * RolePermission without action
   */
  export type RolePermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RolePermission
     */
    select?: RolePermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RolePermission
     */
    omit?: RolePermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RolePermissionInclude<ExtArgs> | null
  }


  /**
   * Model Role
   */

  export type AggregateRole = {
    _count: RoleCountAggregateOutputType | null
    _avg: RoleAvgAggregateOutputType | null
    _sum: RoleSumAggregateOutputType | null
    _min: RoleMinAggregateOutputType | null
    _max: RoleMaxAggregateOutputType | null
  }

  export type RoleAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleSumAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type RoleMinAggregateOutputType = {
    id: number | null
    name: string | null
    display_name: string | null
    description: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleMaxAggregateOutputType = {
    id: number | null
    name: string | null
    display_name: string | null
    description: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type RoleCountAggregateOutputType = {
    id: number
    name: number
    display_name: number
    description: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type RoleAvgAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleSumAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type RoleMinAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleMaxAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type RoleCountAggregateInputType = {
    id?: true
    name?: true
    display_name?: true
    description?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type RoleAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Role to aggregate.
     */
    where?: RoleWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Roles to fetch.
     */
    orderBy?: RoleOrderByWithRelationInput | RoleOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RoleWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Roles from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Roles.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Roles
    **/
    _count?: true | RoleCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RoleAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RoleSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RoleMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RoleMaxAggregateInputType
  }

  export type GetRoleAggregateType<T extends RoleAggregateArgs> = {
        [P in keyof T & keyof AggregateRole]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRole[P]>
      : GetScalarType<T[P], AggregateRole[P]>
  }




  export type RoleGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RoleWhereInput
    orderBy?: RoleOrderByWithAggregationInput | RoleOrderByWithAggregationInput[]
    by: RoleScalarFieldEnum[] | RoleScalarFieldEnum
    having?: RoleScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RoleCountAggregateInputType | true
    _avg?: RoleAvgAggregateInputType
    _sum?: RoleSumAggregateInputType
    _min?: RoleMinAggregateInputType
    _max?: RoleMaxAggregateInputType
  }

  export type RoleGroupByOutputType = {
    id: number
    name: string
    display_name: string
    description: string
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: RoleCountAggregateOutputType | null
    _avg: RoleAvgAggregateOutputType | null
    _sum: RoleSumAggregateOutputType | null
    _min: RoleMinAggregateOutputType | null
    _max: RoleMaxAggregateOutputType | null
  }

  type GetRoleGroupByPayload<T extends RoleGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RoleGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RoleGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RoleGroupByOutputType[P]>
            : GetScalarType<T[P], RoleGroupByOutputType[P]>
        }
      >
    >


  export type RoleSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    display_name?: boolean
    description?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    RoleCrudPermission?: boolean | Role$RoleCrudPermissionArgs<ExtArgs>
    _count?: boolean | RoleCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["role"]>



  export type RoleSelectScalar = {
    id?: boolean
    name?: boolean
    display_name?: boolean
    description?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type RoleOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "display_name" | "description" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["role"]>
  export type RoleInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    RoleCrudPermission?: boolean | Role$RoleCrudPermissionArgs<ExtArgs>
    _count?: boolean | RoleCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $RolePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Role"
    objects: {
      RoleCrudPermission: Prisma.$RoleCrudPermissionPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      display_name: string
      description: string
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["role"]>
    composites: {}
  }

  type RoleGetPayload<S extends boolean | null | undefined | RoleDefaultArgs> = $Result.GetResult<Prisma.$RolePayload, S>

  type RoleCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RoleFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RoleCountAggregateInputType | true
    }

  export interface RoleDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Role'], meta: { name: 'Role' } }
    /**
     * Find zero or one Role that matches the filter.
     * @param {RoleFindUniqueArgs} args - Arguments to find a Role
     * @example
     * // Get one Role
     * const role = await prisma.role.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RoleFindUniqueArgs>(args: SelectSubset<T, RoleFindUniqueArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Role that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RoleFindUniqueOrThrowArgs} args - Arguments to find a Role
     * @example
     * // Get one Role
     * const role = await prisma.role.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RoleFindUniqueOrThrowArgs>(args: SelectSubset<T, RoleFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Role that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleFindFirstArgs} args - Arguments to find a Role
     * @example
     * // Get one Role
     * const role = await prisma.role.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RoleFindFirstArgs>(args?: SelectSubset<T, RoleFindFirstArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Role that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleFindFirstOrThrowArgs} args - Arguments to find a Role
     * @example
     * // Get one Role
     * const role = await prisma.role.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RoleFindFirstOrThrowArgs>(args?: SelectSubset<T, RoleFindFirstOrThrowArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Roles that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Roles
     * const roles = await prisma.role.findMany()
     * 
     * // Get first 10 Roles
     * const roles = await prisma.role.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const roleWithIdOnly = await prisma.role.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RoleFindManyArgs>(args?: SelectSubset<T, RoleFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Role.
     * @param {RoleCreateArgs} args - Arguments to create a Role.
     * @example
     * // Create one Role
     * const Role = await prisma.role.create({
     *   data: {
     *     // ... data to create a Role
     *   }
     * })
     * 
     */
    create<T extends RoleCreateArgs>(args: SelectSubset<T, RoleCreateArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Roles.
     * @param {RoleCreateManyArgs} args - Arguments to create many Roles.
     * @example
     * // Create many Roles
     * const role = await prisma.role.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RoleCreateManyArgs>(args?: SelectSubset<T, RoleCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Role.
     * @param {RoleDeleteArgs} args - Arguments to delete one Role.
     * @example
     * // Delete one Role
     * const Role = await prisma.role.delete({
     *   where: {
     *     // ... filter to delete one Role
     *   }
     * })
     * 
     */
    delete<T extends RoleDeleteArgs>(args: SelectSubset<T, RoleDeleteArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Role.
     * @param {RoleUpdateArgs} args - Arguments to update one Role.
     * @example
     * // Update one Role
     * const role = await prisma.role.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RoleUpdateArgs>(args: SelectSubset<T, RoleUpdateArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Roles.
     * @param {RoleDeleteManyArgs} args - Arguments to filter Roles to delete.
     * @example
     * // Delete a few Roles
     * const { count } = await prisma.role.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RoleDeleteManyArgs>(args?: SelectSubset<T, RoleDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Roles.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Roles
     * const role = await prisma.role.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RoleUpdateManyArgs>(args: SelectSubset<T, RoleUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Role.
     * @param {RoleUpsertArgs} args - Arguments to update or create a Role.
     * @example
     * // Update or create a Role
     * const role = await prisma.role.upsert({
     *   create: {
     *     // ... data to create a Role
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Role we want to update
     *   }
     * })
     */
    upsert<T extends RoleUpsertArgs>(args: SelectSubset<T, RoleUpsertArgs<ExtArgs>>): Prisma__RoleClient<$Result.GetResult<Prisma.$RolePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Roles.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleCountArgs} args - Arguments to filter Roles to count.
     * @example
     * // Count the number of Roles
     * const count = await prisma.role.count({
     *   where: {
     *     // ... the filter for the Roles we want to count
     *   }
     * })
    **/
    count<T extends RoleCountArgs>(
      args?: Subset<T, RoleCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RoleCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Role.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RoleAggregateArgs>(args: Subset<T, RoleAggregateArgs>): Prisma.PrismaPromise<GetRoleAggregateType<T>>

    /**
     * Group by Role.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RoleGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RoleGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RoleGroupByArgs['orderBy'] }
        : { orderBy?: RoleGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RoleGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRoleGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Role model
   */
  readonly fields: RoleFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Role.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RoleClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    RoleCrudPermission<T extends Role$RoleCrudPermissionArgs<ExtArgs> = {}>(args?: Subset<T, Role$RoleCrudPermissionArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RoleCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Role model
   */
  interface RoleFieldRefs {
    readonly id: FieldRef<"Role", 'Int'>
    readonly name: FieldRef<"Role", 'String'>
    readonly display_name: FieldRef<"Role", 'String'>
    readonly description: FieldRef<"Role", 'String'>
    readonly created_at: FieldRef<"Role", 'DateTime'>
    readonly created_by: FieldRef<"Role", 'Int'>
    readonly updated_at: FieldRef<"Role", 'DateTime'>
    readonly updated_by: FieldRef<"Role", 'Int'>
    readonly deleted_at: FieldRef<"Role", 'DateTime'>
    readonly deleted_by: FieldRef<"Role", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Role findUnique
   */
  export type RoleFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter, which Role to fetch.
     */
    where: RoleWhereUniqueInput
  }

  /**
   * Role findUniqueOrThrow
   */
  export type RoleFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter, which Role to fetch.
     */
    where: RoleWhereUniqueInput
  }

  /**
   * Role findFirst
   */
  export type RoleFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter, which Role to fetch.
     */
    where?: RoleWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Roles to fetch.
     */
    orderBy?: RoleOrderByWithRelationInput | RoleOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Roles.
     */
    cursor?: RoleWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Roles from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Roles.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Roles.
     */
    distinct?: RoleScalarFieldEnum | RoleScalarFieldEnum[]
  }

  /**
   * Role findFirstOrThrow
   */
  export type RoleFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter, which Role to fetch.
     */
    where?: RoleWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Roles to fetch.
     */
    orderBy?: RoleOrderByWithRelationInput | RoleOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Roles.
     */
    cursor?: RoleWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Roles from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Roles.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Roles.
     */
    distinct?: RoleScalarFieldEnum | RoleScalarFieldEnum[]
  }

  /**
   * Role findMany
   */
  export type RoleFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter, which Roles to fetch.
     */
    where?: RoleWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Roles to fetch.
     */
    orderBy?: RoleOrderByWithRelationInput | RoleOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Roles.
     */
    cursor?: RoleWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Roles from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Roles.
     */
    skip?: number
    distinct?: RoleScalarFieldEnum | RoleScalarFieldEnum[]
  }

  /**
   * Role create
   */
  export type RoleCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * The data needed to create a Role.
     */
    data: XOR<RoleCreateInput, RoleUncheckedCreateInput>
  }

  /**
   * Role createMany
   */
  export type RoleCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Roles.
     */
    data: RoleCreateManyInput | RoleCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Role update
   */
  export type RoleUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * The data needed to update a Role.
     */
    data: XOR<RoleUpdateInput, RoleUncheckedUpdateInput>
    /**
     * Choose, which Role to update.
     */
    where: RoleWhereUniqueInput
  }

  /**
   * Role updateMany
   */
  export type RoleUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Roles.
     */
    data: XOR<RoleUpdateManyMutationInput, RoleUncheckedUpdateManyInput>
    /**
     * Filter which Roles to update
     */
    where?: RoleWhereInput
    /**
     * Limit how many Roles to update.
     */
    limit?: number
  }

  /**
   * Role upsert
   */
  export type RoleUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * The filter to search for the Role to update in case it exists.
     */
    where: RoleWhereUniqueInput
    /**
     * In case the Role found by the `where` argument doesn't exist, create a new Role with this data.
     */
    create: XOR<RoleCreateInput, RoleUncheckedCreateInput>
    /**
     * In case the Role was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RoleUpdateInput, RoleUncheckedUpdateInput>
  }

  /**
   * Role delete
   */
  export type RoleDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
    /**
     * Filter which Role to delete.
     */
    where: RoleWhereUniqueInput
  }

  /**
   * Role deleteMany
   */
  export type RoleDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Roles to delete
     */
    where?: RoleWhereInput
    /**
     * Limit how many Roles to delete.
     */
    limit?: number
  }

  /**
   * Role.RoleCrudPermission
   */
  export type Role$RoleCrudPermissionArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the RoleCrudPermission
     */
    select?: RoleCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the RoleCrudPermission
     */
    omit?: RoleCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleCrudPermissionInclude<ExtArgs> | null
    where?: RoleCrudPermissionWhereInput
    orderBy?: RoleCrudPermissionOrderByWithRelationInput | RoleCrudPermissionOrderByWithRelationInput[]
    cursor?: RoleCrudPermissionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: RoleCrudPermissionScalarFieldEnum | RoleCrudPermissionScalarFieldEnum[]
  }

  /**
   * Role without action
   */
  export type RoleDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Role
     */
    select?: RoleSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Role
     */
    omit?: RoleOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RoleInclude<ExtArgs> | null
  }


  /**
   * Model UserCrudPermission
   */

  export type AggregateUserCrudPermission = {
    _count: UserCrudPermissionCountAggregateOutputType | null
    _avg: UserCrudPermissionAvgAggregateOutputType | null
    _sum: UserCrudPermissionSumAggregateOutputType | null
    _min: UserCrudPermissionMinAggregateOutputType | null
    _max: UserCrudPermissionMaxAggregateOutputType | null
  }

  export type UserCrudPermissionAvgAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UserCrudPermissionSumAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UserCrudPermissionMinAggregateOutputType = {
    id: number | null
    user_id: number | null
    user_type: string | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UserCrudPermissionMaxAggregateOutputType = {
    id: number | null
    user_id: number | null
    user_type: string | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UserCrudPermissionCountAggregateOutputType = {
    id: number
    user_id: number
    user_type: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type UserCrudPermissionAvgAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UserCrudPermissionSumAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UserCrudPermissionMinAggregateInputType = {
    id?: true
    user_id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UserCrudPermissionMaxAggregateInputType = {
    id?: true
    user_id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UserCrudPermissionCountAggregateInputType = {
    id?: true
    user_id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type UserCrudPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserCrudPermission to aggregate.
     */
    where?: UserCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserCrudPermissions to fetch.
     */
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserCrudPermissions
    **/
    _count?: true | UserCrudPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserCrudPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserCrudPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserCrudPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserCrudPermissionMaxAggregateInputType
  }

  export type GetUserCrudPermissionAggregateType<T extends UserCrudPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateUserCrudPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserCrudPermission[P]>
      : GetScalarType<T[P], AggregateUserCrudPermission[P]>
  }




  export type UserCrudPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserCrudPermissionWhereInput
    orderBy?: UserCrudPermissionOrderByWithAggregationInput | UserCrudPermissionOrderByWithAggregationInput[]
    by: UserCrudPermissionScalarFieldEnum[] | UserCrudPermissionScalarFieldEnum
    having?: UserCrudPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserCrudPermissionCountAggregateInputType | true
    _avg?: UserCrudPermissionAvgAggregateInputType
    _sum?: UserCrudPermissionSumAggregateInputType
    _min?: UserCrudPermissionMinAggregateInputType
    _max?: UserCrudPermissionMaxAggregateInputType
  }

  export type UserCrudPermissionGroupByOutputType = {
    id: number
    user_id: number
    user_type: string
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: UserCrudPermissionCountAggregateOutputType | null
    _avg: UserCrudPermissionAvgAggregateOutputType | null
    _sum: UserCrudPermissionSumAggregateOutputType | null
    _min: UserCrudPermissionMinAggregateOutputType | null
    _max: UserCrudPermissionMaxAggregateOutputType | null
  }

  type GetUserCrudPermissionGroupByPayload<T extends UserCrudPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserCrudPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserCrudPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserCrudPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], UserCrudPermissionGroupByOutputType[P]>
        }
      >
    >


  export type UserCrudPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    user_id?: boolean
    user_type?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
    User?: boolean | UserCrudPermission$UserArgs<ExtArgs>
  }, ExtArgs["result"]["userCrudPermission"]>



  export type UserCrudPermissionSelectScalar = {
    id?: boolean
    user_id?: boolean
    user_type?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type UserCrudPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "user_id" | "user_type" | "permission_id" | "permission_menu" | "permission_create" | "permission_read" | "permission_update" | "permission_delete" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["userCrudPermission"]>
  export type UserCrudPermissionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
    User?: boolean | UserCrudPermission$UserArgs<ExtArgs>
  }

  export type $UserCrudPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserCrudPermission"
    objects: {
      permission: Prisma.$PermissionPayload<ExtArgs>
      User: Prisma.$UserPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      user_id: number
      user_type: string
      permission_id: number
      permission_menu: number
      permission_create: number
      permission_read: number
      permission_update: number
      permission_delete: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["userCrudPermission"]>
    composites: {}
  }

  type UserCrudPermissionGetPayload<S extends boolean | null | undefined | UserCrudPermissionDefaultArgs> = $Result.GetResult<Prisma.$UserCrudPermissionPayload, S>

  type UserCrudPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserCrudPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserCrudPermissionCountAggregateInputType | true
    }

  export interface UserCrudPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserCrudPermission'], meta: { name: 'UserCrudPermission' } }
    /**
     * Find zero or one UserCrudPermission that matches the filter.
     * @param {UserCrudPermissionFindUniqueArgs} args - Arguments to find a UserCrudPermission
     * @example
     * // Get one UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserCrudPermissionFindUniqueArgs>(args: SelectSubset<T, UserCrudPermissionFindUniqueArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserCrudPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserCrudPermissionFindUniqueOrThrowArgs} args - Arguments to find a UserCrudPermission
     * @example
     * // Get one UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserCrudPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, UserCrudPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserCrudPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionFindFirstArgs} args - Arguments to find a UserCrudPermission
     * @example
     * // Get one UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserCrudPermissionFindFirstArgs>(args?: SelectSubset<T, UserCrudPermissionFindFirstArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserCrudPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionFindFirstOrThrowArgs} args - Arguments to find a UserCrudPermission
     * @example
     * // Get one UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserCrudPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, UserCrudPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserCrudPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserCrudPermissions
     * const userCrudPermissions = await prisma.userCrudPermission.findMany()
     * 
     * // Get first 10 UserCrudPermissions
     * const userCrudPermissions = await prisma.userCrudPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userCrudPermissionWithIdOnly = await prisma.userCrudPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserCrudPermissionFindManyArgs>(args?: SelectSubset<T, UserCrudPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserCrudPermission.
     * @param {UserCrudPermissionCreateArgs} args - Arguments to create a UserCrudPermission.
     * @example
     * // Create one UserCrudPermission
     * const UserCrudPermission = await prisma.userCrudPermission.create({
     *   data: {
     *     // ... data to create a UserCrudPermission
     *   }
     * })
     * 
     */
    create<T extends UserCrudPermissionCreateArgs>(args: SelectSubset<T, UserCrudPermissionCreateArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserCrudPermissions.
     * @param {UserCrudPermissionCreateManyArgs} args - Arguments to create many UserCrudPermissions.
     * @example
     * // Create many UserCrudPermissions
     * const userCrudPermission = await prisma.userCrudPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserCrudPermissionCreateManyArgs>(args?: SelectSubset<T, UserCrudPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UserCrudPermission.
     * @param {UserCrudPermissionDeleteArgs} args - Arguments to delete one UserCrudPermission.
     * @example
     * // Delete one UserCrudPermission
     * const UserCrudPermission = await prisma.userCrudPermission.delete({
     *   where: {
     *     // ... filter to delete one UserCrudPermission
     *   }
     * })
     * 
     */
    delete<T extends UserCrudPermissionDeleteArgs>(args: SelectSubset<T, UserCrudPermissionDeleteArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserCrudPermission.
     * @param {UserCrudPermissionUpdateArgs} args - Arguments to update one UserCrudPermission.
     * @example
     * // Update one UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserCrudPermissionUpdateArgs>(args: SelectSubset<T, UserCrudPermissionUpdateArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserCrudPermissions.
     * @param {UserCrudPermissionDeleteManyArgs} args - Arguments to filter UserCrudPermissions to delete.
     * @example
     * // Delete a few UserCrudPermissions
     * const { count } = await prisma.userCrudPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserCrudPermissionDeleteManyArgs>(args?: SelectSubset<T, UserCrudPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserCrudPermissions
     * const userCrudPermission = await prisma.userCrudPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserCrudPermissionUpdateManyArgs>(args: SelectSubset<T, UserCrudPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UserCrudPermission.
     * @param {UserCrudPermissionUpsertArgs} args - Arguments to update or create a UserCrudPermission.
     * @example
     * // Update or create a UserCrudPermission
     * const userCrudPermission = await prisma.userCrudPermission.upsert({
     *   create: {
     *     // ... data to create a UserCrudPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserCrudPermission we want to update
     *   }
     * })
     */
    upsert<T extends UserCrudPermissionUpsertArgs>(args: SelectSubset<T, UserCrudPermissionUpsertArgs<ExtArgs>>): Prisma__UserCrudPermissionClient<$Result.GetResult<Prisma.$UserCrudPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionCountArgs} args - Arguments to filter UserCrudPermissions to count.
     * @example
     * // Count the number of UserCrudPermissions
     * const count = await prisma.userCrudPermission.count({
     *   where: {
     *     // ... the filter for the UserCrudPermissions we want to count
     *   }
     * })
    **/
    count<T extends UserCrudPermissionCountArgs>(
      args?: Subset<T, UserCrudPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserCrudPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserCrudPermissionAggregateArgs>(args: Subset<T, UserCrudPermissionAggregateArgs>): Prisma.PrismaPromise<GetUserCrudPermissionAggregateType<T>>

    /**
     * Group by UserCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserCrudPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserCrudPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserCrudPermissionGroupByArgs['orderBy'] }
        : { orderBy?: UserCrudPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserCrudPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserCrudPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserCrudPermission model
   */
  readonly fields: UserCrudPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserCrudPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserCrudPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    permission<T extends PermissionDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PermissionDefaultArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    User<T extends UserCrudPermission$UserArgs<ExtArgs> = {}>(args?: Subset<T, UserCrudPermission$UserArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserCrudPermission model
   */
  interface UserCrudPermissionFieldRefs {
    readonly id: FieldRef<"UserCrudPermission", 'Int'>
    readonly user_id: FieldRef<"UserCrudPermission", 'Int'>
    readonly user_type: FieldRef<"UserCrudPermission", 'String'>
    readonly permission_id: FieldRef<"UserCrudPermission", 'Int'>
    readonly permission_menu: FieldRef<"UserCrudPermission", 'Int'>
    readonly permission_create: FieldRef<"UserCrudPermission", 'Int'>
    readonly permission_read: FieldRef<"UserCrudPermission", 'Int'>
    readonly permission_update: FieldRef<"UserCrudPermission", 'Int'>
    readonly permission_delete: FieldRef<"UserCrudPermission", 'Int'>
    readonly created_at: FieldRef<"UserCrudPermission", 'DateTime'>
    readonly created_by: FieldRef<"UserCrudPermission", 'Int'>
    readonly updated_at: FieldRef<"UserCrudPermission", 'DateTime'>
    readonly updated_by: FieldRef<"UserCrudPermission", 'Int'>
    readonly deleted_at: FieldRef<"UserCrudPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"UserCrudPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * UserCrudPermission findUnique
   */
  export type UserCrudPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserCrudPermission to fetch.
     */
    where: UserCrudPermissionWhereUniqueInput
  }

  /**
   * UserCrudPermission findUniqueOrThrow
   */
  export type UserCrudPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserCrudPermission to fetch.
     */
    where: UserCrudPermissionWhereUniqueInput
  }

  /**
   * UserCrudPermission findFirst
   */
  export type UserCrudPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserCrudPermission to fetch.
     */
    where?: UserCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserCrudPermissions to fetch.
     */
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserCrudPermissions.
     */
    cursor?: UserCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserCrudPermissions.
     */
    distinct?: UserCrudPermissionScalarFieldEnum | UserCrudPermissionScalarFieldEnum[]
  }

  /**
   * UserCrudPermission findFirstOrThrow
   */
  export type UserCrudPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserCrudPermission to fetch.
     */
    where?: UserCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserCrudPermissions to fetch.
     */
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserCrudPermissions.
     */
    cursor?: UserCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserCrudPermissions.
     */
    distinct?: UserCrudPermissionScalarFieldEnum | UserCrudPermissionScalarFieldEnum[]
  }

  /**
   * UserCrudPermission findMany
   */
  export type UserCrudPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserCrudPermissions to fetch.
     */
    where?: UserCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserCrudPermissions to fetch.
     */
    orderBy?: UserCrudPermissionOrderByWithRelationInput | UserCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserCrudPermissions.
     */
    cursor?: UserCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserCrudPermissions.
     */
    skip?: number
    distinct?: UserCrudPermissionScalarFieldEnum | UserCrudPermissionScalarFieldEnum[]
  }

  /**
   * UserCrudPermission create
   */
  export type UserCrudPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * The data needed to create a UserCrudPermission.
     */
    data: XOR<UserCrudPermissionCreateInput, UserCrudPermissionUncheckedCreateInput>
  }

  /**
   * UserCrudPermission createMany
   */
  export type UserCrudPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserCrudPermissions.
     */
    data: UserCrudPermissionCreateManyInput | UserCrudPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserCrudPermission update
   */
  export type UserCrudPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * The data needed to update a UserCrudPermission.
     */
    data: XOR<UserCrudPermissionUpdateInput, UserCrudPermissionUncheckedUpdateInput>
    /**
     * Choose, which UserCrudPermission to update.
     */
    where: UserCrudPermissionWhereUniqueInput
  }

  /**
   * UserCrudPermission updateMany
   */
  export type UserCrudPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserCrudPermissions.
     */
    data: XOR<UserCrudPermissionUpdateManyMutationInput, UserCrudPermissionUncheckedUpdateManyInput>
    /**
     * Filter which UserCrudPermissions to update
     */
    where?: UserCrudPermissionWhereInput
    /**
     * Limit how many UserCrudPermissions to update.
     */
    limit?: number
  }

  /**
   * UserCrudPermission upsert
   */
  export type UserCrudPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * The filter to search for the UserCrudPermission to update in case it exists.
     */
    where: UserCrudPermissionWhereUniqueInput
    /**
     * In case the UserCrudPermission found by the `where` argument doesn't exist, create a new UserCrudPermission with this data.
     */
    create: XOR<UserCrudPermissionCreateInput, UserCrudPermissionUncheckedCreateInput>
    /**
     * In case the UserCrudPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserCrudPermissionUpdateInput, UserCrudPermissionUncheckedUpdateInput>
  }

  /**
   * UserCrudPermission delete
   */
  export type UserCrudPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
    /**
     * Filter which UserCrudPermission to delete.
     */
    where: UserCrudPermissionWhereUniqueInput
  }

  /**
   * UserCrudPermission deleteMany
   */
  export type UserCrudPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserCrudPermissions to delete
     */
    where?: UserCrudPermissionWhereInput
    /**
     * Limit how many UserCrudPermissions to delete.
     */
    limit?: number
  }

  /**
   * UserCrudPermission.User
   */
  export type UserCrudPermission$UserArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    where?: UserWhereInput
  }

  /**
   * UserCrudPermission without action
   */
  export type UserCrudPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserCrudPermission
     */
    select?: UserCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserCrudPermission
     */
    omit?: UserCrudPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserCrudPermissionInclude<ExtArgs> | null
  }


  /**
   * Model UserPermission
   */

  export type AggregateUserPermission = {
    _count: UserPermissionCountAggregateOutputType | null
    _avg: UserPermissionAvgAggregateOutputType | null
    _sum: UserPermissionSumAggregateOutputType | null
    _min: UserPermissionMinAggregateOutputType | null
    _max: UserPermissionMaxAggregateOutputType | null
  }

  export type UserPermissionAvgAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
    userId: number | null
  }

  export type UserPermissionSumAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
    userId: number | null
  }

  export type UserPermissionMinAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    user_type: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    userId: number | null
  }

  export type UserPermissionMaxAggregateOutputType = {
    id: number | null
    user_id: number | null
    permission_id: number | null
    user_type: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    userId: number | null
  }

  export type UserPermissionCountAggregateOutputType = {
    id: number
    user_id: number
    permission_id: number
    user_type: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    userId: number
    _all: number
  }


  export type UserPermissionAvgAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
    userId?: true
  }

  export type UserPermissionSumAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
    userId?: true
  }

  export type UserPermissionMinAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    userId?: true
  }

  export type UserPermissionMaxAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    userId?: true
  }

  export type UserPermissionCountAggregateInputType = {
    id?: true
    user_id?: true
    permission_id?: true
    user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    userId?: true
    _all?: true
  }

  export type UserPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserPermission to aggregate.
     */
    where?: UserPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserPermissions to fetch.
     */
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UserPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UserPermissions
    **/
    _count?: true | UserPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UserPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UserPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UserPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UserPermissionMaxAggregateInputType
  }

  export type GetUserPermissionAggregateType<T extends UserPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateUserPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUserPermission[P]>
      : GetScalarType<T[P], AggregateUserPermission[P]>
  }




  export type UserPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UserPermissionWhereInput
    orderBy?: UserPermissionOrderByWithAggregationInput | UserPermissionOrderByWithAggregationInput[]
    by: UserPermissionScalarFieldEnum[] | UserPermissionScalarFieldEnum
    having?: UserPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UserPermissionCountAggregateInputType | true
    _avg?: UserPermissionAvgAggregateInputType
    _sum?: UserPermissionSumAggregateInputType
    _min?: UserPermissionMinAggregateInputType
    _max?: UserPermissionMaxAggregateInputType
  }

  export type UserPermissionGroupByOutputType = {
    id: number
    user_id: number
    permission_id: number
    user_type: string
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    userId: number | null
    _count: UserPermissionCountAggregateOutputType | null
    _avg: UserPermissionAvgAggregateOutputType | null
    _sum: UserPermissionSumAggregateOutputType | null
    _min: UserPermissionMinAggregateOutputType | null
    _max: UserPermissionMaxAggregateOutputType | null
  }

  type GetUserPermissionGroupByPayload<T extends UserPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UserPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UserPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UserPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], UserPermissionGroupByOutputType[P]>
        }
      >
    >


  export type UserPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    user_id?: boolean
    permission_id?: boolean
    user_type?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    userId?: boolean
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
    User?: boolean | UserPermission$UserArgs<ExtArgs>
  }, ExtArgs["result"]["userPermission"]>



  export type UserPermissionSelectScalar = {
    id?: boolean
    user_id?: boolean
    permission_id?: boolean
    user_type?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
    userId?: boolean
  }

  export type UserPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "user_id" | "permission_id" | "user_type" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by" | "userId", ExtArgs["result"]["userPermission"]>
  export type UserPermissionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    permission?: boolean | PermissionDefaultArgs<ExtArgs>
    User?: boolean | UserPermission$UserArgs<ExtArgs>
  }

  export type $UserPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UserPermission"
    objects: {
      permission: Prisma.$PermissionPayload<ExtArgs>
      User: Prisma.$UserPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      user_id: number
      permission_id: number
      user_type: string
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
      userId: number | null
    }, ExtArgs["result"]["userPermission"]>
    composites: {}
  }

  type UserPermissionGetPayload<S extends boolean | null | undefined | UserPermissionDefaultArgs> = $Result.GetResult<Prisma.$UserPermissionPayload, S>

  type UserPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UserPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UserPermissionCountAggregateInputType | true
    }

  export interface UserPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UserPermission'], meta: { name: 'UserPermission' } }
    /**
     * Find zero or one UserPermission that matches the filter.
     * @param {UserPermissionFindUniqueArgs} args - Arguments to find a UserPermission
     * @example
     * // Get one UserPermission
     * const userPermission = await prisma.userPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UserPermissionFindUniqueArgs>(args: SelectSubset<T, UserPermissionFindUniqueArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UserPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UserPermissionFindUniqueOrThrowArgs} args - Arguments to find a UserPermission
     * @example
     * // Get one UserPermission
     * const userPermission = await prisma.userPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UserPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, UserPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionFindFirstArgs} args - Arguments to find a UserPermission
     * @example
     * // Get one UserPermission
     * const userPermission = await prisma.userPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UserPermissionFindFirstArgs>(args?: SelectSubset<T, UserPermissionFindFirstArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UserPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionFindFirstOrThrowArgs} args - Arguments to find a UserPermission
     * @example
     * // Get one UserPermission
     * const userPermission = await prisma.userPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UserPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, UserPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UserPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UserPermissions
     * const userPermissions = await prisma.userPermission.findMany()
     * 
     * // Get first 10 UserPermissions
     * const userPermissions = await prisma.userPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const userPermissionWithIdOnly = await prisma.userPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UserPermissionFindManyArgs>(args?: SelectSubset<T, UserPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UserPermission.
     * @param {UserPermissionCreateArgs} args - Arguments to create a UserPermission.
     * @example
     * // Create one UserPermission
     * const UserPermission = await prisma.userPermission.create({
     *   data: {
     *     // ... data to create a UserPermission
     *   }
     * })
     * 
     */
    create<T extends UserPermissionCreateArgs>(args: SelectSubset<T, UserPermissionCreateArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UserPermissions.
     * @param {UserPermissionCreateManyArgs} args - Arguments to create many UserPermissions.
     * @example
     * // Create many UserPermissions
     * const userPermission = await prisma.userPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UserPermissionCreateManyArgs>(args?: SelectSubset<T, UserPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UserPermission.
     * @param {UserPermissionDeleteArgs} args - Arguments to delete one UserPermission.
     * @example
     * // Delete one UserPermission
     * const UserPermission = await prisma.userPermission.delete({
     *   where: {
     *     // ... filter to delete one UserPermission
     *   }
     * })
     * 
     */
    delete<T extends UserPermissionDeleteArgs>(args: SelectSubset<T, UserPermissionDeleteArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UserPermission.
     * @param {UserPermissionUpdateArgs} args - Arguments to update one UserPermission.
     * @example
     * // Update one UserPermission
     * const userPermission = await prisma.userPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UserPermissionUpdateArgs>(args: SelectSubset<T, UserPermissionUpdateArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UserPermissions.
     * @param {UserPermissionDeleteManyArgs} args - Arguments to filter UserPermissions to delete.
     * @example
     * // Delete a few UserPermissions
     * const { count } = await prisma.userPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UserPermissionDeleteManyArgs>(args?: SelectSubset<T, UserPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UserPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UserPermissions
     * const userPermission = await prisma.userPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UserPermissionUpdateManyArgs>(args: SelectSubset<T, UserPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UserPermission.
     * @param {UserPermissionUpsertArgs} args - Arguments to update or create a UserPermission.
     * @example
     * // Update or create a UserPermission
     * const userPermission = await prisma.userPermission.upsert({
     *   create: {
     *     // ... data to create a UserPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UserPermission we want to update
     *   }
     * })
     */
    upsert<T extends UserPermissionUpsertArgs>(args: SelectSubset<T, UserPermissionUpsertArgs<ExtArgs>>): Prisma__UserPermissionClient<$Result.GetResult<Prisma.$UserPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UserPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionCountArgs} args - Arguments to filter UserPermissions to count.
     * @example
     * // Count the number of UserPermissions
     * const count = await prisma.userPermission.count({
     *   where: {
     *     // ... the filter for the UserPermissions we want to count
     *   }
     * })
    **/
    count<T extends UserPermissionCountArgs>(
      args?: Subset<T, UserPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UserPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UserPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UserPermissionAggregateArgs>(args: Subset<T, UserPermissionAggregateArgs>): Prisma.PrismaPromise<GetUserPermissionAggregateType<T>>

    /**
     * Group by UserPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UserPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UserPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UserPermissionGroupByArgs['orderBy'] }
        : { orderBy?: UserPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UserPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUserPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UserPermission model
   */
  readonly fields: UserPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UserPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UserPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    permission<T extends PermissionDefaultArgs<ExtArgs> = {}>(args?: Subset<T, PermissionDefaultArgs<ExtArgs>>): Prisma__PermissionClient<$Result.GetResult<Prisma.$PermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    User<T extends UserPermission$UserArgs<ExtArgs> = {}>(args?: Subset<T, UserPermission$UserArgs<ExtArgs>>): Prisma__UserClient<$Result.GetResult<Prisma.$UserPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UserPermission model
   */
  interface UserPermissionFieldRefs {
    readonly id: FieldRef<"UserPermission", 'Int'>
    readonly user_id: FieldRef<"UserPermission", 'Int'>
    readonly permission_id: FieldRef<"UserPermission", 'Int'>
    readonly user_type: FieldRef<"UserPermission", 'String'>
    readonly created_at: FieldRef<"UserPermission", 'DateTime'>
    readonly created_by: FieldRef<"UserPermission", 'Int'>
    readonly updated_at: FieldRef<"UserPermission", 'DateTime'>
    readonly updated_by: FieldRef<"UserPermission", 'Int'>
    readonly deleted_at: FieldRef<"UserPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"UserPermission", 'Int'>
    readonly userId: FieldRef<"UserPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * UserPermission findUnique
   */
  export type UserPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserPermission to fetch.
     */
    where: UserPermissionWhereUniqueInput
  }

  /**
   * UserPermission findUniqueOrThrow
   */
  export type UserPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserPermission to fetch.
     */
    where: UserPermissionWhereUniqueInput
  }

  /**
   * UserPermission findFirst
   */
  export type UserPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserPermission to fetch.
     */
    where?: UserPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserPermissions to fetch.
     */
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserPermissions.
     */
    cursor?: UserPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserPermissions.
     */
    distinct?: UserPermissionScalarFieldEnum | UserPermissionScalarFieldEnum[]
  }

  /**
   * UserPermission findFirstOrThrow
   */
  export type UserPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserPermission to fetch.
     */
    where?: UserPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserPermissions to fetch.
     */
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UserPermissions.
     */
    cursor?: UserPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UserPermissions.
     */
    distinct?: UserPermissionScalarFieldEnum | UserPermissionScalarFieldEnum[]
  }

  /**
   * UserPermission findMany
   */
  export type UserPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter, which UserPermissions to fetch.
     */
    where?: UserPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UserPermissions to fetch.
     */
    orderBy?: UserPermissionOrderByWithRelationInput | UserPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UserPermissions.
     */
    cursor?: UserPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UserPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UserPermissions.
     */
    skip?: number
    distinct?: UserPermissionScalarFieldEnum | UserPermissionScalarFieldEnum[]
  }

  /**
   * UserPermission create
   */
  export type UserPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * The data needed to create a UserPermission.
     */
    data: XOR<UserPermissionCreateInput, UserPermissionUncheckedCreateInput>
  }

  /**
   * UserPermission createMany
   */
  export type UserPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UserPermissions.
     */
    data: UserPermissionCreateManyInput | UserPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UserPermission update
   */
  export type UserPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * The data needed to update a UserPermission.
     */
    data: XOR<UserPermissionUpdateInput, UserPermissionUncheckedUpdateInput>
    /**
     * Choose, which UserPermission to update.
     */
    where: UserPermissionWhereUniqueInput
  }

  /**
   * UserPermission updateMany
   */
  export type UserPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UserPermissions.
     */
    data: XOR<UserPermissionUpdateManyMutationInput, UserPermissionUncheckedUpdateManyInput>
    /**
     * Filter which UserPermissions to update
     */
    where?: UserPermissionWhereInput
    /**
     * Limit how many UserPermissions to update.
     */
    limit?: number
  }

  /**
   * UserPermission upsert
   */
  export type UserPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * The filter to search for the UserPermission to update in case it exists.
     */
    where: UserPermissionWhereUniqueInput
    /**
     * In case the UserPermission found by the `where` argument doesn't exist, create a new UserPermission with this data.
     */
    create: XOR<UserPermissionCreateInput, UserPermissionUncheckedCreateInput>
    /**
     * In case the UserPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UserPermissionUpdateInput, UserPermissionUncheckedUpdateInput>
  }

  /**
   * UserPermission delete
   */
  export type UserPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
    /**
     * Filter which UserPermission to delete.
     */
    where: UserPermissionWhereUniqueInput
  }

  /**
   * UserPermission deleteMany
   */
  export type UserPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UserPermissions to delete
     */
    where?: UserPermissionWhereInput
    /**
     * Limit how many UserPermissions to delete.
     */
    limit?: number
  }

  /**
   * UserPermission.User
   */
  export type UserPermission$UserArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the User
     */
    select?: UserSelect<ExtArgs> | null
    /**
     * Omit specific fields from the User
     */
    omit?: UserOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserInclude<ExtArgs> | null
    where?: UserWhereInput
  }

  /**
   * UserPermission without action
   */
  export type UserPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UserPermission
     */
    select?: UserPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UserPermission
     */
    omit?: UserPermissionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: UserPermissionInclude<ExtArgs> | null
  }


  /**
   * Model UsertypeMaxCrudPermission
   */

  export type AggregateUsertypeMaxCrudPermission = {
    _count: UsertypeMaxCrudPermissionCountAggregateOutputType | null
    _avg: UsertypeMaxCrudPermissionAvgAggregateOutputType | null
    _sum: UsertypeMaxCrudPermissionSumAggregateOutputType | null
    _min: UsertypeMaxCrudPermissionMinAggregateOutputType | null
    _max: UsertypeMaxCrudPermissionMaxAggregateOutputType | null
  }

  export type UsertypeMaxCrudPermissionAvgAggregateOutputType = {
    id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UsertypeMaxCrudPermissionSumAggregateOutputType = {
    id: number | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UsertypeMaxCrudPermissionMinAggregateOutputType = {
    id: number | null
    user_type: string | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UsertypeMaxCrudPermissionMaxAggregateOutputType = {
    id: number | null
    user_type: string | null
    permission_id: number | null
    permission_menu: number | null
    permission_create: number | null
    permission_read: number | null
    permission_update: number | null
    permission_delete: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UsertypeMaxCrudPermissionCountAggregateOutputType = {
    id: number
    user_type: number
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type UsertypeMaxCrudPermissionAvgAggregateInputType = {
    id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UsertypeMaxCrudPermissionSumAggregateInputType = {
    id?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UsertypeMaxCrudPermissionMinAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UsertypeMaxCrudPermissionMaxAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UsertypeMaxCrudPermissionCountAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    permission_menu?: true
    permission_create?: true
    permission_read?: true
    permission_update?: true
    permission_delete?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type UsertypeMaxCrudPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UsertypeMaxCrudPermission to aggregate.
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxCrudPermissions to fetch.
     */
    orderBy?: UsertypeMaxCrudPermissionOrderByWithRelationInput | UsertypeMaxCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UsertypeMaxCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UsertypeMaxCrudPermissions
    **/
    _count?: true | UsertypeMaxCrudPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UsertypeMaxCrudPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UsertypeMaxCrudPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UsertypeMaxCrudPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UsertypeMaxCrudPermissionMaxAggregateInputType
  }

  export type GetUsertypeMaxCrudPermissionAggregateType<T extends UsertypeMaxCrudPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateUsertypeMaxCrudPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUsertypeMaxCrudPermission[P]>
      : GetScalarType<T[P], AggregateUsertypeMaxCrudPermission[P]>
  }




  export type UsertypeMaxCrudPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UsertypeMaxCrudPermissionWhereInput
    orderBy?: UsertypeMaxCrudPermissionOrderByWithAggregationInput | UsertypeMaxCrudPermissionOrderByWithAggregationInput[]
    by: UsertypeMaxCrudPermissionScalarFieldEnum[] | UsertypeMaxCrudPermissionScalarFieldEnum
    having?: UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UsertypeMaxCrudPermissionCountAggregateInputType | true
    _avg?: UsertypeMaxCrudPermissionAvgAggregateInputType
    _sum?: UsertypeMaxCrudPermissionSumAggregateInputType
    _min?: UsertypeMaxCrudPermissionMinAggregateInputType
    _max?: UsertypeMaxCrudPermissionMaxAggregateInputType
  }

  export type UsertypeMaxCrudPermissionGroupByOutputType = {
    id: number
    user_type: string
    permission_id: number
    permission_menu: number
    permission_create: number
    permission_read: number
    permission_update: number
    permission_delete: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: UsertypeMaxCrudPermissionCountAggregateOutputType | null
    _avg: UsertypeMaxCrudPermissionAvgAggregateOutputType | null
    _sum: UsertypeMaxCrudPermissionSumAggregateOutputType | null
    _min: UsertypeMaxCrudPermissionMinAggregateOutputType | null
    _max: UsertypeMaxCrudPermissionMaxAggregateOutputType | null
  }

  type GetUsertypeMaxCrudPermissionGroupByPayload<T extends UsertypeMaxCrudPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UsertypeMaxCrudPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UsertypeMaxCrudPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UsertypeMaxCrudPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], UsertypeMaxCrudPermissionGroupByOutputType[P]>
        }
      >
    >


  export type UsertypeMaxCrudPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    user_type?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["usertypeMaxCrudPermission"]>



  export type UsertypeMaxCrudPermissionSelectScalar = {
    id?: boolean
    user_type?: boolean
    permission_id?: boolean
    permission_menu?: boolean
    permission_create?: boolean
    permission_read?: boolean
    permission_update?: boolean
    permission_delete?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type UsertypeMaxCrudPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "user_type" | "permission_id" | "permission_menu" | "permission_create" | "permission_read" | "permission_update" | "permission_delete" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["usertypeMaxCrudPermission"]>

  export type $UsertypeMaxCrudPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UsertypeMaxCrudPermission"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      user_type: string
      permission_id: number
      permission_menu: number
      permission_create: number
      permission_read: number
      permission_update: number
      permission_delete: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["usertypeMaxCrudPermission"]>
    composites: {}
  }

  type UsertypeMaxCrudPermissionGetPayload<S extends boolean | null | undefined | UsertypeMaxCrudPermissionDefaultArgs> = $Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload, S>

  type UsertypeMaxCrudPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UsertypeMaxCrudPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UsertypeMaxCrudPermissionCountAggregateInputType | true
    }

  export interface UsertypeMaxCrudPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UsertypeMaxCrudPermission'], meta: { name: 'UsertypeMaxCrudPermission' } }
    /**
     * Find zero or one UsertypeMaxCrudPermission that matches the filter.
     * @param {UsertypeMaxCrudPermissionFindUniqueArgs} args - Arguments to find a UsertypeMaxCrudPermission
     * @example
     * // Get one UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UsertypeMaxCrudPermissionFindUniqueArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionFindUniqueArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UsertypeMaxCrudPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UsertypeMaxCrudPermissionFindUniqueOrThrowArgs} args - Arguments to find a UsertypeMaxCrudPermission
     * @example
     * // Get one UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UsertypeMaxCrudPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UsertypeMaxCrudPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionFindFirstArgs} args - Arguments to find a UsertypeMaxCrudPermission
     * @example
     * // Get one UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UsertypeMaxCrudPermissionFindFirstArgs>(args?: SelectSubset<T, UsertypeMaxCrudPermissionFindFirstArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UsertypeMaxCrudPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionFindFirstOrThrowArgs} args - Arguments to find a UsertypeMaxCrudPermission
     * @example
     * // Get one UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UsertypeMaxCrudPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, UsertypeMaxCrudPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UsertypeMaxCrudPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UsertypeMaxCrudPermissions
     * const usertypeMaxCrudPermissions = await prisma.usertypeMaxCrudPermission.findMany()
     * 
     * // Get first 10 UsertypeMaxCrudPermissions
     * const usertypeMaxCrudPermissions = await prisma.usertypeMaxCrudPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const usertypeMaxCrudPermissionWithIdOnly = await prisma.usertypeMaxCrudPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UsertypeMaxCrudPermissionFindManyArgs>(args?: SelectSubset<T, UsertypeMaxCrudPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UsertypeMaxCrudPermission.
     * @param {UsertypeMaxCrudPermissionCreateArgs} args - Arguments to create a UsertypeMaxCrudPermission.
     * @example
     * // Create one UsertypeMaxCrudPermission
     * const UsertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.create({
     *   data: {
     *     // ... data to create a UsertypeMaxCrudPermission
     *   }
     * })
     * 
     */
    create<T extends UsertypeMaxCrudPermissionCreateArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionCreateArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UsertypeMaxCrudPermissions.
     * @param {UsertypeMaxCrudPermissionCreateManyArgs} args - Arguments to create many UsertypeMaxCrudPermissions.
     * @example
     * // Create many UsertypeMaxCrudPermissions
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UsertypeMaxCrudPermissionCreateManyArgs>(args?: SelectSubset<T, UsertypeMaxCrudPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UsertypeMaxCrudPermission.
     * @param {UsertypeMaxCrudPermissionDeleteArgs} args - Arguments to delete one UsertypeMaxCrudPermission.
     * @example
     * // Delete one UsertypeMaxCrudPermission
     * const UsertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.delete({
     *   where: {
     *     // ... filter to delete one UsertypeMaxCrudPermission
     *   }
     * })
     * 
     */
    delete<T extends UsertypeMaxCrudPermissionDeleteArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionDeleteArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UsertypeMaxCrudPermission.
     * @param {UsertypeMaxCrudPermissionUpdateArgs} args - Arguments to update one UsertypeMaxCrudPermission.
     * @example
     * // Update one UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UsertypeMaxCrudPermissionUpdateArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionUpdateArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UsertypeMaxCrudPermissions.
     * @param {UsertypeMaxCrudPermissionDeleteManyArgs} args - Arguments to filter UsertypeMaxCrudPermissions to delete.
     * @example
     * // Delete a few UsertypeMaxCrudPermissions
     * const { count } = await prisma.usertypeMaxCrudPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UsertypeMaxCrudPermissionDeleteManyArgs>(args?: SelectSubset<T, UsertypeMaxCrudPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UsertypeMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UsertypeMaxCrudPermissions
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UsertypeMaxCrudPermissionUpdateManyArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UsertypeMaxCrudPermission.
     * @param {UsertypeMaxCrudPermissionUpsertArgs} args - Arguments to update or create a UsertypeMaxCrudPermission.
     * @example
     * // Update or create a UsertypeMaxCrudPermission
     * const usertypeMaxCrudPermission = await prisma.usertypeMaxCrudPermission.upsert({
     *   create: {
     *     // ... data to create a UsertypeMaxCrudPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UsertypeMaxCrudPermission we want to update
     *   }
     * })
     */
    upsert<T extends UsertypeMaxCrudPermissionUpsertArgs>(args: SelectSubset<T, UsertypeMaxCrudPermissionUpsertArgs<ExtArgs>>): Prisma__UsertypeMaxCrudPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxCrudPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UsertypeMaxCrudPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionCountArgs} args - Arguments to filter UsertypeMaxCrudPermissions to count.
     * @example
     * // Count the number of UsertypeMaxCrudPermissions
     * const count = await prisma.usertypeMaxCrudPermission.count({
     *   where: {
     *     // ... the filter for the UsertypeMaxCrudPermissions we want to count
     *   }
     * })
    **/
    count<T extends UsertypeMaxCrudPermissionCountArgs>(
      args?: Subset<T, UsertypeMaxCrudPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UsertypeMaxCrudPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UsertypeMaxCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UsertypeMaxCrudPermissionAggregateArgs>(args: Subset<T, UsertypeMaxCrudPermissionAggregateArgs>): Prisma.PrismaPromise<GetUsertypeMaxCrudPermissionAggregateType<T>>

    /**
     * Group by UsertypeMaxCrudPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxCrudPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UsertypeMaxCrudPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UsertypeMaxCrudPermissionGroupByArgs['orderBy'] }
        : { orderBy?: UsertypeMaxCrudPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UsertypeMaxCrudPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUsertypeMaxCrudPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UsertypeMaxCrudPermission model
   */
  readonly fields: UsertypeMaxCrudPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UsertypeMaxCrudPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UsertypeMaxCrudPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UsertypeMaxCrudPermission model
   */
  interface UsertypeMaxCrudPermissionFieldRefs {
    readonly id: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly user_type: FieldRef<"UsertypeMaxCrudPermission", 'String'>
    readonly permission_id: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly permission_menu: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly permission_create: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly permission_read: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly permission_update: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly permission_delete: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly created_at: FieldRef<"UsertypeMaxCrudPermission", 'DateTime'>
    readonly created_by: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly updated_at: FieldRef<"UsertypeMaxCrudPermission", 'DateTime'>
    readonly updated_by: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
    readonly deleted_at: FieldRef<"UsertypeMaxCrudPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"UsertypeMaxCrudPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * UsertypeMaxCrudPermission findUnique
   */
  export type UsertypeMaxCrudPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxCrudPermission to fetch.
     */
    where: UsertypeMaxCrudPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxCrudPermission findUniqueOrThrow
   */
  export type UsertypeMaxCrudPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxCrudPermission to fetch.
     */
    where: UsertypeMaxCrudPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxCrudPermission findFirst
   */
  export type UsertypeMaxCrudPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxCrudPermission to fetch.
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxCrudPermissions to fetch.
     */
    orderBy?: UsertypeMaxCrudPermissionOrderByWithRelationInput | UsertypeMaxCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UsertypeMaxCrudPermissions.
     */
    cursor?: UsertypeMaxCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UsertypeMaxCrudPermissions.
     */
    distinct?: UsertypeMaxCrudPermissionScalarFieldEnum | UsertypeMaxCrudPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxCrudPermission findFirstOrThrow
   */
  export type UsertypeMaxCrudPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxCrudPermission to fetch.
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxCrudPermissions to fetch.
     */
    orderBy?: UsertypeMaxCrudPermissionOrderByWithRelationInput | UsertypeMaxCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UsertypeMaxCrudPermissions.
     */
    cursor?: UsertypeMaxCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxCrudPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UsertypeMaxCrudPermissions.
     */
    distinct?: UsertypeMaxCrudPermissionScalarFieldEnum | UsertypeMaxCrudPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxCrudPermission findMany
   */
  export type UsertypeMaxCrudPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxCrudPermissions to fetch.
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxCrudPermissions to fetch.
     */
    orderBy?: UsertypeMaxCrudPermissionOrderByWithRelationInput | UsertypeMaxCrudPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UsertypeMaxCrudPermissions.
     */
    cursor?: UsertypeMaxCrudPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxCrudPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxCrudPermissions.
     */
    skip?: number
    distinct?: UsertypeMaxCrudPermissionScalarFieldEnum | UsertypeMaxCrudPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxCrudPermission create
   */
  export type UsertypeMaxCrudPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * The data needed to create a UsertypeMaxCrudPermission.
     */
    data: XOR<UsertypeMaxCrudPermissionCreateInput, UsertypeMaxCrudPermissionUncheckedCreateInput>
  }

  /**
   * UsertypeMaxCrudPermission createMany
   */
  export type UsertypeMaxCrudPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UsertypeMaxCrudPermissions.
     */
    data: UsertypeMaxCrudPermissionCreateManyInput | UsertypeMaxCrudPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UsertypeMaxCrudPermission update
   */
  export type UsertypeMaxCrudPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * The data needed to update a UsertypeMaxCrudPermission.
     */
    data: XOR<UsertypeMaxCrudPermissionUpdateInput, UsertypeMaxCrudPermissionUncheckedUpdateInput>
    /**
     * Choose, which UsertypeMaxCrudPermission to update.
     */
    where: UsertypeMaxCrudPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxCrudPermission updateMany
   */
  export type UsertypeMaxCrudPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UsertypeMaxCrudPermissions.
     */
    data: XOR<UsertypeMaxCrudPermissionUpdateManyMutationInput, UsertypeMaxCrudPermissionUncheckedUpdateManyInput>
    /**
     * Filter which UsertypeMaxCrudPermissions to update
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * Limit how many UsertypeMaxCrudPermissions to update.
     */
    limit?: number
  }

  /**
   * UsertypeMaxCrudPermission upsert
   */
  export type UsertypeMaxCrudPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * The filter to search for the UsertypeMaxCrudPermission to update in case it exists.
     */
    where: UsertypeMaxCrudPermissionWhereUniqueInput
    /**
     * In case the UsertypeMaxCrudPermission found by the `where` argument doesn't exist, create a new UsertypeMaxCrudPermission with this data.
     */
    create: XOR<UsertypeMaxCrudPermissionCreateInput, UsertypeMaxCrudPermissionUncheckedCreateInput>
    /**
     * In case the UsertypeMaxCrudPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UsertypeMaxCrudPermissionUpdateInput, UsertypeMaxCrudPermissionUncheckedUpdateInput>
  }

  /**
   * UsertypeMaxCrudPermission delete
   */
  export type UsertypeMaxCrudPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
    /**
     * Filter which UsertypeMaxCrudPermission to delete.
     */
    where: UsertypeMaxCrudPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxCrudPermission deleteMany
   */
  export type UsertypeMaxCrudPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UsertypeMaxCrudPermissions to delete
     */
    where?: UsertypeMaxCrudPermissionWhereInput
    /**
     * Limit how many UsertypeMaxCrudPermissions to delete.
     */
    limit?: number
  }

  /**
   * UsertypeMaxCrudPermission without action
   */
  export type UsertypeMaxCrudPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxCrudPermission
     */
    select?: UsertypeMaxCrudPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxCrudPermission
     */
    omit?: UsertypeMaxCrudPermissionOmit<ExtArgs> | null
  }


  /**
   * Model UsertypeMaxPermission
   */

  export type AggregateUsertypeMaxPermission = {
    _count: UsertypeMaxPermissionCountAggregateOutputType | null
    _avg: UsertypeMaxPermissionAvgAggregateOutputType | null
    _sum: UsertypeMaxPermissionSumAggregateOutputType | null
    _min: UsertypeMaxPermissionMinAggregateOutputType | null
    _max: UsertypeMaxPermissionMaxAggregateOutputType | null
  }

  export type UsertypeMaxPermissionAvgAggregateOutputType = {
    id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UsertypeMaxPermissionSumAggregateOutputType = {
    id: number | null
    permission_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type UsertypeMaxPermissionMinAggregateOutputType = {
    id: number | null
    user_type: string | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UsertypeMaxPermissionMaxAggregateOutputType = {
    id: number | null
    user_type: string | null
    permission_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type UsertypeMaxPermissionCountAggregateOutputType = {
    id: number
    user_type: number
    permission_id: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type UsertypeMaxPermissionAvgAggregateInputType = {
    id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UsertypeMaxPermissionSumAggregateInputType = {
    id?: true
    permission_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type UsertypeMaxPermissionMinAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UsertypeMaxPermissionMaxAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type UsertypeMaxPermissionCountAggregateInputType = {
    id?: true
    user_type?: true
    permission_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type UsertypeMaxPermissionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UsertypeMaxPermission to aggregate.
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxPermissions to fetch.
     */
    orderBy?: UsertypeMaxPermissionOrderByWithRelationInput | UsertypeMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: UsertypeMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned UsertypeMaxPermissions
    **/
    _count?: true | UsertypeMaxPermissionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: UsertypeMaxPermissionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: UsertypeMaxPermissionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: UsertypeMaxPermissionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: UsertypeMaxPermissionMaxAggregateInputType
  }

  export type GetUsertypeMaxPermissionAggregateType<T extends UsertypeMaxPermissionAggregateArgs> = {
        [P in keyof T & keyof AggregateUsertypeMaxPermission]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateUsertypeMaxPermission[P]>
      : GetScalarType<T[P], AggregateUsertypeMaxPermission[P]>
  }




  export type UsertypeMaxPermissionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: UsertypeMaxPermissionWhereInput
    orderBy?: UsertypeMaxPermissionOrderByWithAggregationInput | UsertypeMaxPermissionOrderByWithAggregationInput[]
    by: UsertypeMaxPermissionScalarFieldEnum[] | UsertypeMaxPermissionScalarFieldEnum
    having?: UsertypeMaxPermissionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: UsertypeMaxPermissionCountAggregateInputType | true
    _avg?: UsertypeMaxPermissionAvgAggregateInputType
    _sum?: UsertypeMaxPermissionSumAggregateInputType
    _min?: UsertypeMaxPermissionMinAggregateInputType
    _max?: UsertypeMaxPermissionMaxAggregateInputType
  }

  export type UsertypeMaxPermissionGroupByOutputType = {
    id: number
    user_type: string
    permission_id: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: UsertypeMaxPermissionCountAggregateOutputType | null
    _avg: UsertypeMaxPermissionAvgAggregateOutputType | null
    _sum: UsertypeMaxPermissionSumAggregateOutputType | null
    _min: UsertypeMaxPermissionMinAggregateOutputType | null
    _max: UsertypeMaxPermissionMaxAggregateOutputType | null
  }

  type GetUsertypeMaxPermissionGroupByPayload<T extends UsertypeMaxPermissionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<UsertypeMaxPermissionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof UsertypeMaxPermissionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], UsertypeMaxPermissionGroupByOutputType[P]>
            : GetScalarType<T[P], UsertypeMaxPermissionGroupByOutputType[P]>
        }
      >
    >


  export type UsertypeMaxPermissionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    user_type?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["usertypeMaxPermission"]>



  export type UsertypeMaxPermissionSelectScalar = {
    id?: boolean
    user_type?: boolean
    permission_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type UsertypeMaxPermissionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "user_type" | "permission_id" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["usertypeMaxPermission"]>

  export type $UsertypeMaxPermissionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "UsertypeMaxPermission"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      user_type: string
      permission_id: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["usertypeMaxPermission"]>
    composites: {}
  }

  type UsertypeMaxPermissionGetPayload<S extends boolean | null | undefined | UsertypeMaxPermissionDefaultArgs> = $Result.GetResult<Prisma.$UsertypeMaxPermissionPayload, S>

  type UsertypeMaxPermissionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<UsertypeMaxPermissionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: UsertypeMaxPermissionCountAggregateInputType | true
    }

  export interface UsertypeMaxPermissionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['UsertypeMaxPermission'], meta: { name: 'UsertypeMaxPermission' } }
    /**
     * Find zero or one UsertypeMaxPermission that matches the filter.
     * @param {UsertypeMaxPermissionFindUniqueArgs} args - Arguments to find a UsertypeMaxPermission
     * @example
     * // Get one UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends UsertypeMaxPermissionFindUniqueArgs>(args: SelectSubset<T, UsertypeMaxPermissionFindUniqueArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one UsertypeMaxPermission that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {UsertypeMaxPermissionFindUniqueOrThrowArgs} args - Arguments to find a UsertypeMaxPermission
     * @example
     * // Get one UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends UsertypeMaxPermissionFindUniqueOrThrowArgs>(args: SelectSubset<T, UsertypeMaxPermissionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UsertypeMaxPermission that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionFindFirstArgs} args - Arguments to find a UsertypeMaxPermission
     * @example
     * // Get one UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends UsertypeMaxPermissionFindFirstArgs>(args?: SelectSubset<T, UsertypeMaxPermissionFindFirstArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first UsertypeMaxPermission that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionFindFirstOrThrowArgs} args - Arguments to find a UsertypeMaxPermission
     * @example
     * // Get one UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends UsertypeMaxPermissionFindFirstOrThrowArgs>(args?: SelectSubset<T, UsertypeMaxPermissionFindFirstOrThrowArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more UsertypeMaxPermissions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all UsertypeMaxPermissions
     * const usertypeMaxPermissions = await prisma.usertypeMaxPermission.findMany()
     * 
     * // Get first 10 UsertypeMaxPermissions
     * const usertypeMaxPermissions = await prisma.usertypeMaxPermission.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const usertypeMaxPermissionWithIdOnly = await prisma.usertypeMaxPermission.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends UsertypeMaxPermissionFindManyArgs>(args?: SelectSubset<T, UsertypeMaxPermissionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a UsertypeMaxPermission.
     * @param {UsertypeMaxPermissionCreateArgs} args - Arguments to create a UsertypeMaxPermission.
     * @example
     * // Create one UsertypeMaxPermission
     * const UsertypeMaxPermission = await prisma.usertypeMaxPermission.create({
     *   data: {
     *     // ... data to create a UsertypeMaxPermission
     *   }
     * })
     * 
     */
    create<T extends UsertypeMaxPermissionCreateArgs>(args: SelectSubset<T, UsertypeMaxPermissionCreateArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many UsertypeMaxPermissions.
     * @param {UsertypeMaxPermissionCreateManyArgs} args - Arguments to create many UsertypeMaxPermissions.
     * @example
     * // Create many UsertypeMaxPermissions
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends UsertypeMaxPermissionCreateManyArgs>(args?: SelectSubset<T, UsertypeMaxPermissionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a UsertypeMaxPermission.
     * @param {UsertypeMaxPermissionDeleteArgs} args - Arguments to delete one UsertypeMaxPermission.
     * @example
     * // Delete one UsertypeMaxPermission
     * const UsertypeMaxPermission = await prisma.usertypeMaxPermission.delete({
     *   where: {
     *     // ... filter to delete one UsertypeMaxPermission
     *   }
     * })
     * 
     */
    delete<T extends UsertypeMaxPermissionDeleteArgs>(args: SelectSubset<T, UsertypeMaxPermissionDeleteArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one UsertypeMaxPermission.
     * @param {UsertypeMaxPermissionUpdateArgs} args - Arguments to update one UsertypeMaxPermission.
     * @example
     * // Update one UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends UsertypeMaxPermissionUpdateArgs>(args: SelectSubset<T, UsertypeMaxPermissionUpdateArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more UsertypeMaxPermissions.
     * @param {UsertypeMaxPermissionDeleteManyArgs} args - Arguments to filter UsertypeMaxPermissions to delete.
     * @example
     * // Delete a few UsertypeMaxPermissions
     * const { count } = await prisma.usertypeMaxPermission.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends UsertypeMaxPermissionDeleteManyArgs>(args?: SelectSubset<T, UsertypeMaxPermissionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more UsertypeMaxPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many UsertypeMaxPermissions
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends UsertypeMaxPermissionUpdateManyArgs>(args: SelectSubset<T, UsertypeMaxPermissionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one UsertypeMaxPermission.
     * @param {UsertypeMaxPermissionUpsertArgs} args - Arguments to update or create a UsertypeMaxPermission.
     * @example
     * // Update or create a UsertypeMaxPermission
     * const usertypeMaxPermission = await prisma.usertypeMaxPermission.upsert({
     *   create: {
     *     // ... data to create a UsertypeMaxPermission
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the UsertypeMaxPermission we want to update
     *   }
     * })
     */
    upsert<T extends UsertypeMaxPermissionUpsertArgs>(args: SelectSubset<T, UsertypeMaxPermissionUpsertArgs<ExtArgs>>): Prisma__UsertypeMaxPermissionClient<$Result.GetResult<Prisma.$UsertypeMaxPermissionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of UsertypeMaxPermissions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionCountArgs} args - Arguments to filter UsertypeMaxPermissions to count.
     * @example
     * // Count the number of UsertypeMaxPermissions
     * const count = await prisma.usertypeMaxPermission.count({
     *   where: {
     *     // ... the filter for the UsertypeMaxPermissions we want to count
     *   }
     * })
    **/
    count<T extends UsertypeMaxPermissionCountArgs>(
      args?: Subset<T, UsertypeMaxPermissionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], UsertypeMaxPermissionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a UsertypeMaxPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends UsertypeMaxPermissionAggregateArgs>(args: Subset<T, UsertypeMaxPermissionAggregateArgs>): Prisma.PrismaPromise<GetUsertypeMaxPermissionAggregateType<T>>

    /**
     * Group by UsertypeMaxPermission.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {UsertypeMaxPermissionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends UsertypeMaxPermissionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: UsertypeMaxPermissionGroupByArgs['orderBy'] }
        : { orderBy?: UsertypeMaxPermissionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, UsertypeMaxPermissionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetUsertypeMaxPermissionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the UsertypeMaxPermission model
   */
  readonly fields: UsertypeMaxPermissionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for UsertypeMaxPermission.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__UsertypeMaxPermissionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the UsertypeMaxPermission model
   */
  interface UsertypeMaxPermissionFieldRefs {
    readonly id: FieldRef<"UsertypeMaxPermission", 'Int'>
    readonly user_type: FieldRef<"UsertypeMaxPermission", 'String'>
    readonly permission_id: FieldRef<"UsertypeMaxPermission", 'Int'>
    readonly created_at: FieldRef<"UsertypeMaxPermission", 'DateTime'>
    readonly created_by: FieldRef<"UsertypeMaxPermission", 'Int'>
    readonly updated_at: FieldRef<"UsertypeMaxPermission", 'DateTime'>
    readonly updated_by: FieldRef<"UsertypeMaxPermission", 'Int'>
    readonly deleted_at: FieldRef<"UsertypeMaxPermission", 'DateTime'>
    readonly deleted_by: FieldRef<"UsertypeMaxPermission", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * UsertypeMaxPermission findUnique
   */
  export type UsertypeMaxPermissionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxPermission to fetch.
     */
    where: UsertypeMaxPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxPermission findUniqueOrThrow
   */
  export type UsertypeMaxPermissionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxPermission to fetch.
     */
    where: UsertypeMaxPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxPermission findFirst
   */
  export type UsertypeMaxPermissionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxPermission to fetch.
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxPermissions to fetch.
     */
    orderBy?: UsertypeMaxPermissionOrderByWithRelationInput | UsertypeMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UsertypeMaxPermissions.
     */
    cursor?: UsertypeMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UsertypeMaxPermissions.
     */
    distinct?: UsertypeMaxPermissionScalarFieldEnum | UsertypeMaxPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxPermission findFirstOrThrow
   */
  export type UsertypeMaxPermissionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxPermission to fetch.
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxPermissions to fetch.
     */
    orderBy?: UsertypeMaxPermissionOrderByWithRelationInput | UsertypeMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for UsertypeMaxPermissions.
     */
    cursor?: UsertypeMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxPermissions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of UsertypeMaxPermissions.
     */
    distinct?: UsertypeMaxPermissionScalarFieldEnum | UsertypeMaxPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxPermission findMany
   */
  export type UsertypeMaxPermissionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter, which UsertypeMaxPermissions to fetch.
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of UsertypeMaxPermissions to fetch.
     */
    orderBy?: UsertypeMaxPermissionOrderByWithRelationInput | UsertypeMaxPermissionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing UsertypeMaxPermissions.
     */
    cursor?: UsertypeMaxPermissionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` UsertypeMaxPermissions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` UsertypeMaxPermissions.
     */
    skip?: number
    distinct?: UsertypeMaxPermissionScalarFieldEnum | UsertypeMaxPermissionScalarFieldEnum[]
  }

  /**
   * UsertypeMaxPermission create
   */
  export type UsertypeMaxPermissionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * The data needed to create a UsertypeMaxPermission.
     */
    data: XOR<UsertypeMaxPermissionCreateInput, UsertypeMaxPermissionUncheckedCreateInput>
  }

  /**
   * UsertypeMaxPermission createMany
   */
  export type UsertypeMaxPermissionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many UsertypeMaxPermissions.
     */
    data: UsertypeMaxPermissionCreateManyInput | UsertypeMaxPermissionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * UsertypeMaxPermission update
   */
  export type UsertypeMaxPermissionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * The data needed to update a UsertypeMaxPermission.
     */
    data: XOR<UsertypeMaxPermissionUpdateInput, UsertypeMaxPermissionUncheckedUpdateInput>
    /**
     * Choose, which UsertypeMaxPermission to update.
     */
    where: UsertypeMaxPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxPermission updateMany
   */
  export type UsertypeMaxPermissionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update UsertypeMaxPermissions.
     */
    data: XOR<UsertypeMaxPermissionUpdateManyMutationInput, UsertypeMaxPermissionUncheckedUpdateManyInput>
    /**
     * Filter which UsertypeMaxPermissions to update
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * Limit how many UsertypeMaxPermissions to update.
     */
    limit?: number
  }

  /**
   * UsertypeMaxPermission upsert
   */
  export type UsertypeMaxPermissionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * The filter to search for the UsertypeMaxPermission to update in case it exists.
     */
    where: UsertypeMaxPermissionWhereUniqueInput
    /**
     * In case the UsertypeMaxPermission found by the `where` argument doesn't exist, create a new UsertypeMaxPermission with this data.
     */
    create: XOR<UsertypeMaxPermissionCreateInput, UsertypeMaxPermissionUncheckedCreateInput>
    /**
     * In case the UsertypeMaxPermission was found with the provided `where` argument, update it with this data.
     */
    update: XOR<UsertypeMaxPermissionUpdateInput, UsertypeMaxPermissionUncheckedUpdateInput>
  }

  /**
   * UsertypeMaxPermission delete
   */
  export type UsertypeMaxPermissionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
    /**
     * Filter which UsertypeMaxPermission to delete.
     */
    where: UsertypeMaxPermissionWhereUniqueInput
  }

  /**
   * UsertypeMaxPermission deleteMany
   */
  export type UsertypeMaxPermissionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which UsertypeMaxPermissions to delete
     */
    where?: UsertypeMaxPermissionWhereInput
    /**
     * Limit how many UsertypeMaxPermissions to delete.
     */
    limit?: number
  }

  /**
   * UsertypeMaxPermission without action
   */
  export type UsertypeMaxPermissionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the UsertypeMaxPermission
     */
    select?: UsertypeMaxPermissionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the UsertypeMaxPermission
     */
    omit?: UsertypeMaxPermissionOmit<ExtArgs> | null
  }


  /**
   * Model Qualification
   */

  export type AggregateQualification = {
    _count: QualificationCountAggregateOutputType | null
    _avg: QualificationAvgAggregateOutputType | null
    _sum: QualificationSumAggregateOutputType | null
    _min: QualificationMinAggregateOutputType | null
    _max: QualificationMaxAggregateOutputType | null
  }

  export type QualificationAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type QualificationSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type QualificationMinAggregateOutputType = {
    id: number | null
    qualification_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QualificationMaxAggregateOutputType = {
    id: number | null
    qualification_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QualificationCountAggregateOutputType = {
    id: number
    qualification_name: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type QualificationAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type QualificationSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type QualificationMinAggregateInputType = {
    id?: true
    qualification_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QualificationMaxAggregateInputType = {
    id?: true
    qualification_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QualificationCountAggregateInputType = {
    id?: true
    qualification_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type QualificationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Qualification to aggregate.
     */
    where?: QualificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Qualifications to fetch.
     */
    orderBy?: QualificationOrderByWithRelationInput | QualificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: QualificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Qualifications from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Qualifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Qualifications
    **/
    _count?: true | QualificationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: QualificationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: QualificationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: QualificationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: QualificationMaxAggregateInputType
  }

  export type GetQualificationAggregateType<T extends QualificationAggregateArgs> = {
        [P in keyof T & keyof AggregateQualification]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateQualification[P]>
      : GetScalarType<T[P], AggregateQualification[P]>
  }




  export type QualificationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: QualificationWhereInput
    orderBy?: QualificationOrderByWithAggregationInput | QualificationOrderByWithAggregationInput[]
    by: QualificationScalarFieldEnum[] | QualificationScalarFieldEnum
    having?: QualificationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: QualificationCountAggregateInputType | true
    _avg?: QualificationAvgAggregateInputType
    _sum?: QualificationSumAggregateInputType
    _min?: QualificationMinAggregateInputType
    _max?: QualificationMaxAggregateInputType
  }

  export type QualificationGroupByOutputType = {
    id: number
    qualification_name: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: QualificationCountAggregateOutputType | null
    _avg: QualificationAvgAggregateOutputType | null
    _sum: QualificationSumAggregateOutputType | null
    _min: QualificationMinAggregateOutputType | null
    _max: QualificationMaxAggregateOutputType | null
  }

  type GetQualificationGroupByPayload<T extends QualificationGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<QualificationGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof QualificationGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], QualificationGroupByOutputType[P]>
            : GetScalarType<T[P], QualificationGroupByOutputType[P]>
        }
      >
    >


  export type QualificationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    qualification_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["qualification"]>



  export type QualificationSelectScalar = {
    id?: boolean
    qualification_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type QualificationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "qualification_name" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["qualification"]>

  export type $QualificationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Qualification"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      qualification_name: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["qualification"]>
    composites: {}
  }

  type QualificationGetPayload<S extends boolean | null | undefined | QualificationDefaultArgs> = $Result.GetResult<Prisma.$QualificationPayload, S>

  type QualificationCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<QualificationFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: QualificationCountAggregateInputType | true
    }

  export interface QualificationDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Qualification'], meta: { name: 'Qualification' } }
    /**
     * Find zero or one Qualification that matches the filter.
     * @param {QualificationFindUniqueArgs} args - Arguments to find a Qualification
     * @example
     * // Get one Qualification
     * const qualification = await prisma.qualification.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends QualificationFindUniqueArgs>(args: SelectSubset<T, QualificationFindUniqueArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Qualification that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {QualificationFindUniqueOrThrowArgs} args - Arguments to find a Qualification
     * @example
     * // Get one Qualification
     * const qualification = await prisma.qualification.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends QualificationFindUniqueOrThrowArgs>(args: SelectSubset<T, QualificationFindUniqueOrThrowArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Qualification that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationFindFirstArgs} args - Arguments to find a Qualification
     * @example
     * // Get one Qualification
     * const qualification = await prisma.qualification.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends QualificationFindFirstArgs>(args?: SelectSubset<T, QualificationFindFirstArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Qualification that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationFindFirstOrThrowArgs} args - Arguments to find a Qualification
     * @example
     * // Get one Qualification
     * const qualification = await prisma.qualification.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends QualificationFindFirstOrThrowArgs>(args?: SelectSubset<T, QualificationFindFirstOrThrowArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Qualifications that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Qualifications
     * const qualifications = await prisma.qualification.findMany()
     * 
     * // Get first 10 Qualifications
     * const qualifications = await prisma.qualification.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const qualificationWithIdOnly = await prisma.qualification.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends QualificationFindManyArgs>(args?: SelectSubset<T, QualificationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Qualification.
     * @param {QualificationCreateArgs} args - Arguments to create a Qualification.
     * @example
     * // Create one Qualification
     * const Qualification = await prisma.qualification.create({
     *   data: {
     *     // ... data to create a Qualification
     *   }
     * })
     * 
     */
    create<T extends QualificationCreateArgs>(args: SelectSubset<T, QualificationCreateArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Qualifications.
     * @param {QualificationCreateManyArgs} args - Arguments to create many Qualifications.
     * @example
     * // Create many Qualifications
     * const qualification = await prisma.qualification.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends QualificationCreateManyArgs>(args?: SelectSubset<T, QualificationCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Qualification.
     * @param {QualificationDeleteArgs} args - Arguments to delete one Qualification.
     * @example
     * // Delete one Qualification
     * const Qualification = await prisma.qualification.delete({
     *   where: {
     *     // ... filter to delete one Qualification
     *   }
     * })
     * 
     */
    delete<T extends QualificationDeleteArgs>(args: SelectSubset<T, QualificationDeleteArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Qualification.
     * @param {QualificationUpdateArgs} args - Arguments to update one Qualification.
     * @example
     * // Update one Qualification
     * const qualification = await prisma.qualification.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends QualificationUpdateArgs>(args: SelectSubset<T, QualificationUpdateArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Qualifications.
     * @param {QualificationDeleteManyArgs} args - Arguments to filter Qualifications to delete.
     * @example
     * // Delete a few Qualifications
     * const { count } = await prisma.qualification.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends QualificationDeleteManyArgs>(args?: SelectSubset<T, QualificationDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Qualifications.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Qualifications
     * const qualification = await prisma.qualification.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends QualificationUpdateManyArgs>(args: SelectSubset<T, QualificationUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Qualification.
     * @param {QualificationUpsertArgs} args - Arguments to update or create a Qualification.
     * @example
     * // Update or create a Qualification
     * const qualification = await prisma.qualification.upsert({
     *   create: {
     *     // ... data to create a Qualification
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Qualification we want to update
     *   }
     * })
     */
    upsert<T extends QualificationUpsertArgs>(args: SelectSubset<T, QualificationUpsertArgs<ExtArgs>>): Prisma__QualificationClient<$Result.GetResult<Prisma.$QualificationPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Qualifications.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationCountArgs} args - Arguments to filter Qualifications to count.
     * @example
     * // Count the number of Qualifications
     * const count = await prisma.qualification.count({
     *   where: {
     *     // ... the filter for the Qualifications we want to count
     *   }
     * })
    **/
    count<T extends QualificationCountArgs>(
      args?: Subset<T, QualificationCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], QualificationCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Qualification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends QualificationAggregateArgs>(args: Subset<T, QualificationAggregateArgs>): Prisma.PrismaPromise<GetQualificationAggregateType<T>>

    /**
     * Group by Qualification.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QualificationGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends QualificationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: QualificationGroupByArgs['orderBy'] }
        : { orderBy?: QualificationGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, QualificationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetQualificationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Qualification model
   */
  readonly fields: QualificationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Qualification.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__QualificationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Qualification model
   */
  interface QualificationFieldRefs {
    readonly id: FieldRef<"Qualification", 'Int'>
    readonly qualification_name: FieldRef<"Qualification", 'String'>
    readonly created_by: FieldRef<"Qualification", 'Int'>
    readonly created_at: FieldRef<"Qualification", 'DateTime'>
    readonly updated_at: FieldRef<"Qualification", 'DateTime'>
    readonly deleted_at: FieldRef<"Qualification", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Qualification findUnique
   */
  export type QualificationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter, which Qualification to fetch.
     */
    where: QualificationWhereUniqueInput
  }

  /**
   * Qualification findUniqueOrThrow
   */
  export type QualificationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter, which Qualification to fetch.
     */
    where: QualificationWhereUniqueInput
  }

  /**
   * Qualification findFirst
   */
  export type QualificationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter, which Qualification to fetch.
     */
    where?: QualificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Qualifications to fetch.
     */
    orderBy?: QualificationOrderByWithRelationInput | QualificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Qualifications.
     */
    cursor?: QualificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Qualifications from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Qualifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Qualifications.
     */
    distinct?: QualificationScalarFieldEnum | QualificationScalarFieldEnum[]
  }

  /**
   * Qualification findFirstOrThrow
   */
  export type QualificationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter, which Qualification to fetch.
     */
    where?: QualificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Qualifications to fetch.
     */
    orderBy?: QualificationOrderByWithRelationInput | QualificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Qualifications.
     */
    cursor?: QualificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Qualifications from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Qualifications.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Qualifications.
     */
    distinct?: QualificationScalarFieldEnum | QualificationScalarFieldEnum[]
  }

  /**
   * Qualification findMany
   */
  export type QualificationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter, which Qualifications to fetch.
     */
    where?: QualificationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Qualifications to fetch.
     */
    orderBy?: QualificationOrderByWithRelationInput | QualificationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Qualifications.
     */
    cursor?: QualificationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Qualifications from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Qualifications.
     */
    skip?: number
    distinct?: QualificationScalarFieldEnum | QualificationScalarFieldEnum[]
  }

  /**
   * Qualification create
   */
  export type QualificationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * The data needed to create a Qualification.
     */
    data: XOR<QualificationCreateInput, QualificationUncheckedCreateInput>
  }

  /**
   * Qualification createMany
   */
  export type QualificationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Qualifications.
     */
    data: QualificationCreateManyInput | QualificationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Qualification update
   */
  export type QualificationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * The data needed to update a Qualification.
     */
    data: XOR<QualificationUpdateInput, QualificationUncheckedUpdateInput>
    /**
     * Choose, which Qualification to update.
     */
    where: QualificationWhereUniqueInput
  }

  /**
   * Qualification updateMany
   */
  export type QualificationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Qualifications.
     */
    data: XOR<QualificationUpdateManyMutationInput, QualificationUncheckedUpdateManyInput>
    /**
     * Filter which Qualifications to update
     */
    where?: QualificationWhereInput
    /**
     * Limit how many Qualifications to update.
     */
    limit?: number
  }

  /**
   * Qualification upsert
   */
  export type QualificationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * The filter to search for the Qualification to update in case it exists.
     */
    where: QualificationWhereUniqueInput
    /**
     * In case the Qualification found by the `where` argument doesn't exist, create a new Qualification with this data.
     */
    create: XOR<QualificationCreateInput, QualificationUncheckedCreateInput>
    /**
     * In case the Qualification was found with the provided `where` argument, update it with this data.
     */
    update: XOR<QualificationUpdateInput, QualificationUncheckedUpdateInput>
  }

  /**
   * Qualification delete
   */
  export type QualificationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
    /**
     * Filter which Qualification to delete.
     */
    where: QualificationWhereUniqueInput
  }

  /**
   * Qualification deleteMany
   */
  export type QualificationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Qualifications to delete
     */
    where?: QualificationWhereInput
    /**
     * Limit how many Qualifications to delete.
     */
    limit?: number
  }

  /**
   * Qualification without action
   */
  export type QualificationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Qualification
     */
    select?: QualificationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Qualification
     */
    omit?: QualificationOmit<ExtArgs> | null
  }


  /**
   * Model Gender
   */

  export type AggregateGender = {
    _count: GenderCountAggregateOutputType | null
    _avg: GenderAvgAggregateOutputType | null
    _sum: GenderSumAggregateOutputType | null
    _min: GenderMinAggregateOutputType | null
    _max: GenderMaxAggregateOutputType | null
  }

  export type GenderAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type GenderSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type GenderMinAggregateOutputType = {
    id: number | null
    gender_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type GenderMaxAggregateOutputType = {
    id: number | null
    gender_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type GenderCountAggregateOutputType = {
    id: number
    gender_name: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type GenderAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type GenderSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type GenderMinAggregateInputType = {
    id?: true
    gender_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type GenderMaxAggregateInputType = {
    id?: true
    gender_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type GenderCountAggregateInputType = {
    id?: true
    gender_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type GenderAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Gender to aggregate.
     */
    where?: GenderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Genders to fetch.
     */
    orderBy?: GenderOrderByWithRelationInput | GenderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: GenderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Genders from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Genders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Genders
    **/
    _count?: true | GenderCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: GenderAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: GenderSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: GenderMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: GenderMaxAggregateInputType
  }

  export type GetGenderAggregateType<T extends GenderAggregateArgs> = {
        [P in keyof T & keyof AggregateGender]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateGender[P]>
      : GetScalarType<T[P], AggregateGender[P]>
  }




  export type GenderGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: GenderWhereInput
    orderBy?: GenderOrderByWithAggregationInput | GenderOrderByWithAggregationInput[]
    by: GenderScalarFieldEnum[] | GenderScalarFieldEnum
    having?: GenderScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: GenderCountAggregateInputType | true
    _avg?: GenderAvgAggregateInputType
    _sum?: GenderSumAggregateInputType
    _min?: GenderMinAggregateInputType
    _max?: GenderMaxAggregateInputType
  }

  export type GenderGroupByOutputType = {
    id: number
    gender_name: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: GenderCountAggregateOutputType | null
    _avg: GenderAvgAggregateOutputType | null
    _sum: GenderSumAggregateOutputType | null
    _min: GenderMinAggregateOutputType | null
    _max: GenderMaxAggregateOutputType | null
  }

  type GetGenderGroupByPayload<T extends GenderGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<GenderGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof GenderGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], GenderGroupByOutputType[P]>
            : GetScalarType<T[P], GenderGroupByOutputType[P]>
        }
      >
    >


  export type GenderSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    gender_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["gender"]>



  export type GenderSelectScalar = {
    id?: boolean
    gender_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type GenderOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "gender_name" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["gender"]>

  export type $GenderPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Gender"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      gender_name: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["gender"]>
    composites: {}
  }

  type GenderGetPayload<S extends boolean | null | undefined | GenderDefaultArgs> = $Result.GetResult<Prisma.$GenderPayload, S>

  type GenderCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<GenderFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: GenderCountAggregateInputType | true
    }

  export interface GenderDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Gender'], meta: { name: 'Gender' } }
    /**
     * Find zero or one Gender that matches the filter.
     * @param {GenderFindUniqueArgs} args - Arguments to find a Gender
     * @example
     * // Get one Gender
     * const gender = await prisma.gender.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends GenderFindUniqueArgs>(args: SelectSubset<T, GenderFindUniqueArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Gender that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {GenderFindUniqueOrThrowArgs} args - Arguments to find a Gender
     * @example
     * // Get one Gender
     * const gender = await prisma.gender.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends GenderFindUniqueOrThrowArgs>(args: SelectSubset<T, GenderFindUniqueOrThrowArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Gender that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderFindFirstArgs} args - Arguments to find a Gender
     * @example
     * // Get one Gender
     * const gender = await prisma.gender.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends GenderFindFirstArgs>(args?: SelectSubset<T, GenderFindFirstArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Gender that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderFindFirstOrThrowArgs} args - Arguments to find a Gender
     * @example
     * // Get one Gender
     * const gender = await prisma.gender.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends GenderFindFirstOrThrowArgs>(args?: SelectSubset<T, GenderFindFirstOrThrowArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Genders that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Genders
     * const genders = await prisma.gender.findMany()
     * 
     * // Get first 10 Genders
     * const genders = await prisma.gender.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const genderWithIdOnly = await prisma.gender.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends GenderFindManyArgs>(args?: SelectSubset<T, GenderFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Gender.
     * @param {GenderCreateArgs} args - Arguments to create a Gender.
     * @example
     * // Create one Gender
     * const Gender = await prisma.gender.create({
     *   data: {
     *     // ... data to create a Gender
     *   }
     * })
     * 
     */
    create<T extends GenderCreateArgs>(args: SelectSubset<T, GenderCreateArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Genders.
     * @param {GenderCreateManyArgs} args - Arguments to create many Genders.
     * @example
     * // Create many Genders
     * const gender = await prisma.gender.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends GenderCreateManyArgs>(args?: SelectSubset<T, GenderCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Gender.
     * @param {GenderDeleteArgs} args - Arguments to delete one Gender.
     * @example
     * // Delete one Gender
     * const Gender = await prisma.gender.delete({
     *   where: {
     *     // ... filter to delete one Gender
     *   }
     * })
     * 
     */
    delete<T extends GenderDeleteArgs>(args: SelectSubset<T, GenderDeleteArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Gender.
     * @param {GenderUpdateArgs} args - Arguments to update one Gender.
     * @example
     * // Update one Gender
     * const gender = await prisma.gender.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends GenderUpdateArgs>(args: SelectSubset<T, GenderUpdateArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Genders.
     * @param {GenderDeleteManyArgs} args - Arguments to filter Genders to delete.
     * @example
     * // Delete a few Genders
     * const { count } = await prisma.gender.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends GenderDeleteManyArgs>(args?: SelectSubset<T, GenderDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Genders.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Genders
     * const gender = await prisma.gender.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends GenderUpdateManyArgs>(args: SelectSubset<T, GenderUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Gender.
     * @param {GenderUpsertArgs} args - Arguments to update or create a Gender.
     * @example
     * // Update or create a Gender
     * const gender = await prisma.gender.upsert({
     *   create: {
     *     // ... data to create a Gender
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Gender we want to update
     *   }
     * })
     */
    upsert<T extends GenderUpsertArgs>(args: SelectSubset<T, GenderUpsertArgs<ExtArgs>>): Prisma__GenderClient<$Result.GetResult<Prisma.$GenderPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Genders.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderCountArgs} args - Arguments to filter Genders to count.
     * @example
     * // Count the number of Genders
     * const count = await prisma.gender.count({
     *   where: {
     *     // ... the filter for the Genders we want to count
     *   }
     * })
    **/
    count<T extends GenderCountArgs>(
      args?: Subset<T, GenderCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], GenderCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Gender.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends GenderAggregateArgs>(args: Subset<T, GenderAggregateArgs>): Prisma.PrismaPromise<GetGenderAggregateType<T>>

    /**
     * Group by Gender.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {GenderGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends GenderGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: GenderGroupByArgs['orderBy'] }
        : { orderBy?: GenderGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, GenderGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetGenderGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Gender model
   */
  readonly fields: GenderFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Gender.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__GenderClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Gender model
   */
  interface GenderFieldRefs {
    readonly id: FieldRef<"Gender", 'Int'>
    readonly gender_name: FieldRef<"Gender", 'String'>
    readonly created_by: FieldRef<"Gender", 'Int'>
    readonly created_at: FieldRef<"Gender", 'DateTime'>
    readonly updated_at: FieldRef<"Gender", 'DateTime'>
    readonly deleted_at: FieldRef<"Gender", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Gender findUnique
   */
  export type GenderFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter, which Gender to fetch.
     */
    where: GenderWhereUniqueInput
  }

  /**
   * Gender findUniqueOrThrow
   */
  export type GenderFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter, which Gender to fetch.
     */
    where: GenderWhereUniqueInput
  }

  /**
   * Gender findFirst
   */
  export type GenderFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter, which Gender to fetch.
     */
    where?: GenderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Genders to fetch.
     */
    orderBy?: GenderOrderByWithRelationInput | GenderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Genders.
     */
    cursor?: GenderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Genders from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Genders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Genders.
     */
    distinct?: GenderScalarFieldEnum | GenderScalarFieldEnum[]
  }

  /**
   * Gender findFirstOrThrow
   */
  export type GenderFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter, which Gender to fetch.
     */
    where?: GenderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Genders to fetch.
     */
    orderBy?: GenderOrderByWithRelationInput | GenderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Genders.
     */
    cursor?: GenderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Genders from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Genders.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Genders.
     */
    distinct?: GenderScalarFieldEnum | GenderScalarFieldEnum[]
  }

  /**
   * Gender findMany
   */
  export type GenderFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter, which Genders to fetch.
     */
    where?: GenderWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Genders to fetch.
     */
    orderBy?: GenderOrderByWithRelationInput | GenderOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Genders.
     */
    cursor?: GenderWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Genders from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Genders.
     */
    skip?: number
    distinct?: GenderScalarFieldEnum | GenderScalarFieldEnum[]
  }

  /**
   * Gender create
   */
  export type GenderCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * The data needed to create a Gender.
     */
    data: XOR<GenderCreateInput, GenderUncheckedCreateInput>
  }

  /**
   * Gender createMany
   */
  export type GenderCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Genders.
     */
    data: GenderCreateManyInput | GenderCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Gender update
   */
  export type GenderUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * The data needed to update a Gender.
     */
    data: XOR<GenderUpdateInput, GenderUncheckedUpdateInput>
    /**
     * Choose, which Gender to update.
     */
    where: GenderWhereUniqueInput
  }

  /**
   * Gender updateMany
   */
  export type GenderUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Genders.
     */
    data: XOR<GenderUpdateManyMutationInput, GenderUncheckedUpdateManyInput>
    /**
     * Filter which Genders to update
     */
    where?: GenderWhereInput
    /**
     * Limit how many Genders to update.
     */
    limit?: number
  }

  /**
   * Gender upsert
   */
  export type GenderUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * The filter to search for the Gender to update in case it exists.
     */
    where: GenderWhereUniqueInput
    /**
     * In case the Gender found by the `where` argument doesn't exist, create a new Gender with this data.
     */
    create: XOR<GenderCreateInput, GenderUncheckedCreateInput>
    /**
     * In case the Gender was found with the provided `where` argument, update it with this data.
     */
    update: XOR<GenderUpdateInput, GenderUncheckedUpdateInput>
  }

  /**
   * Gender delete
   */
  export type GenderDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
    /**
     * Filter which Gender to delete.
     */
    where: GenderWhereUniqueInput
  }

  /**
   * Gender deleteMany
   */
  export type GenderDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Genders to delete
     */
    where?: GenderWhereInput
    /**
     * Limit how many Genders to delete.
     */
    limit?: number
  }

  /**
   * Gender without action
   */
  export type GenderDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Gender
     */
    select?: GenderSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Gender
     */
    omit?: GenderOmit<ExtArgs> | null
  }


  /**
   * Model Term
   */

  export type AggregateTerm = {
    _count: TermCountAggregateOutputType | null
    _avg: TermAvgAggregateOutputType | null
    _sum: TermSumAggregateOutputType | null
    _min: TermMinAggregateOutputType | null
    _max: TermMaxAggregateOutputType | null
  }

  export type TermAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type TermSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type TermMinAggregateOutputType = {
    id: number | null
    term_name: string | null
    term_alias: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type TermMaxAggregateOutputType = {
    id: number | null
    term_name: string | null
    term_alias: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type TermCountAggregateOutputType = {
    id: number
    term_name: number
    term_alias: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type TermAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type TermSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type TermMinAggregateInputType = {
    id?: true
    term_name?: true
    term_alias?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type TermMaxAggregateInputType = {
    id?: true
    term_name?: true
    term_alias?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type TermCountAggregateInputType = {
    id?: true
    term_name?: true
    term_alias?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type TermAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Term to aggregate.
     */
    where?: TermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Terms to fetch.
     */
    orderBy?: TermOrderByWithRelationInput | TermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: TermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Terms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Terms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Terms
    **/
    _count?: true | TermCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: TermAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: TermSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: TermMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: TermMaxAggregateInputType
  }

  export type GetTermAggregateType<T extends TermAggregateArgs> = {
        [P in keyof T & keyof AggregateTerm]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateTerm[P]>
      : GetScalarType<T[P], AggregateTerm[P]>
  }




  export type TermGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: TermWhereInput
    orderBy?: TermOrderByWithAggregationInput | TermOrderByWithAggregationInput[]
    by: TermScalarFieldEnum[] | TermScalarFieldEnum
    having?: TermScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: TermCountAggregateInputType | true
    _avg?: TermAvgAggregateInputType
    _sum?: TermSumAggregateInputType
    _min?: TermMinAggregateInputType
    _max?: TermMaxAggregateInputType
  }

  export type TermGroupByOutputType = {
    id: number
    term_name: string
    term_alias: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: TermCountAggregateOutputType | null
    _avg: TermAvgAggregateOutputType | null
    _sum: TermSumAggregateOutputType | null
    _min: TermMinAggregateOutputType | null
    _max: TermMaxAggregateOutputType | null
  }

  type GetTermGroupByPayload<T extends TermGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<TermGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof TermGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], TermGroupByOutputType[P]>
            : GetScalarType<T[P], TermGroupByOutputType[P]>
        }
      >
    >


  export type TermSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    term_name?: boolean
    term_alias?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    SessionTerm?: boolean | Term$SessionTermArgs<ExtArgs>
    exams?: boolean | Term$examsArgs<ExtArgs>
    _count?: boolean | TermCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["term"]>



  export type TermSelectScalar = {
    id?: boolean
    term_name?: boolean
    term_alias?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type TermOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "term_name" | "term_alias" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["term"]>
  export type TermInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    SessionTerm?: boolean | Term$SessionTermArgs<ExtArgs>
    exams?: boolean | Term$examsArgs<ExtArgs>
    _count?: boolean | TermCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $TermPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Term"
    objects: {
      SessionTerm: Prisma.$SessionTermPayload<ExtArgs>[]
      exams: Prisma.$ExamPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      term_name: string
      term_alias: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["term"]>
    composites: {}
  }

  type TermGetPayload<S extends boolean | null | undefined | TermDefaultArgs> = $Result.GetResult<Prisma.$TermPayload, S>

  type TermCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<TermFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: TermCountAggregateInputType | true
    }

  export interface TermDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Term'], meta: { name: 'Term' } }
    /**
     * Find zero or one Term that matches the filter.
     * @param {TermFindUniqueArgs} args - Arguments to find a Term
     * @example
     * // Get one Term
     * const term = await prisma.term.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends TermFindUniqueArgs>(args: SelectSubset<T, TermFindUniqueArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Term that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {TermFindUniqueOrThrowArgs} args - Arguments to find a Term
     * @example
     * // Get one Term
     * const term = await prisma.term.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends TermFindUniqueOrThrowArgs>(args: SelectSubset<T, TermFindUniqueOrThrowArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Term that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermFindFirstArgs} args - Arguments to find a Term
     * @example
     * // Get one Term
     * const term = await prisma.term.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends TermFindFirstArgs>(args?: SelectSubset<T, TermFindFirstArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Term that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermFindFirstOrThrowArgs} args - Arguments to find a Term
     * @example
     * // Get one Term
     * const term = await prisma.term.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends TermFindFirstOrThrowArgs>(args?: SelectSubset<T, TermFindFirstOrThrowArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Terms that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Terms
     * const terms = await prisma.term.findMany()
     * 
     * // Get first 10 Terms
     * const terms = await prisma.term.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const termWithIdOnly = await prisma.term.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends TermFindManyArgs>(args?: SelectSubset<T, TermFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Term.
     * @param {TermCreateArgs} args - Arguments to create a Term.
     * @example
     * // Create one Term
     * const Term = await prisma.term.create({
     *   data: {
     *     // ... data to create a Term
     *   }
     * })
     * 
     */
    create<T extends TermCreateArgs>(args: SelectSubset<T, TermCreateArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Terms.
     * @param {TermCreateManyArgs} args - Arguments to create many Terms.
     * @example
     * // Create many Terms
     * const term = await prisma.term.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends TermCreateManyArgs>(args?: SelectSubset<T, TermCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Term.
     * @param {TermDeleteArgs} args - Arguments to delete one Term.
     * @example
     * // Delete one Term
     * const Term = await prisma.term.delete({
     *   where: {
     *     // ... filter to delete one Term
     *   }
     * })
     * 
     */
    delete<T extends TermDeleteArgs>(args: SelectSubset<T, TermDeleteArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Term.
     * @param {TermUpdateArgs} args - Arguments to update one Term.
     * @example
     * // Update one Term
     * const term = await prisma.term.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends TermUpdateArgs>(args: SelectSubset<T, TermUpdateArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Terms.
     * @param {TermDeleteManyArgs} args - Arguments to filter Terms to delete.
     * @example
     * // Delete a few Terms
     * const { count } = await prisma.term.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends TermDeleteManyArgs>(args?: SelectSubset<T, TermDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Terms.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Terms
     * const term = await prisma.term.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends TermUpdateManyArgs>(args: SelectSubset<T, TermUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Term.
     * @param {TermUpsertArgs} args - Arguments to update or create a Term.
     * @example
     * // Update or create a Term
     * const term = await prisma.term.upsert({
     *   create: {
     *     // ... data to create a Term
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Term we want to update
     *   }
     * })
     */
    upsert<T extends TermUpsertArgs>(args: SelectSubset<T, TermUpsertArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Terms.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermCountArgs} args - Arguments to filter Terms to count.
     * @example
     * // Count the number of Terms
     * const count = await prisma.term.count({
     *   where: {
     *     // ... the filter for the Terms we want to count
     *   }
     * })
    **/
    count<T extends TermCountArgs>(
      args?: Subset<T, TermCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], TermCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Term.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends TermAggregateArgs>(args: Subset<T, TermAggregateArgs>): Prisma.PrismaPromise<GetTermAggregateType<T>>

    /**
     * Group by Term.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TermGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends TermGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: TermGroupByArgs['orderBy'] }
        : { orderBy?: TermGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, TermGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetTermGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Term model
   */
  readonly fields: TermFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Term.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__TermClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    SessionTerm<T extends Term$SessionTermArgs<ExtArgs> = {}>(args?: Subset<T, Term$SessionTermArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    exams<T extends Term$examsArgs<ExtArgs> = {}>(args?: Subset<T, Term$examsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Term model
   */
  interface TermFieldRefs {
    readonly id: FieldRef<"Term", 'Int'>
    readonly term_name: FieldRef<"Term", 'String'>
    readonly term_alias: FieldRef<"Term", 'String'>
    readonly created_by: FieldRef<"Term", 'Int'>
    readonly created_at: FieldRef<"Term", 'DateTime'>
    readonly updated_at: FieldRef<"Term", 'DateTime'>
    readonly deleted_at: FieldRef<"Term", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Term findUnique
   */
  export type TermFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter, which Term to fetch.
     */
    where: TermWhereUniqueInput
  }

  /**
   * Term findUniqueOrThrow
   */
  export type TermFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter, which Term to fetch.
     */
    where: TermWhereUniqueInput
  }

  /**
   * Term findFirst
   */
  export type TermFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter, which Term to fetch.
     */
    where?: TermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Terms to fetch.
     */
    orderBy?: TermOrderByWithRelationInput | TermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Terms.
     */
    cursor?: TermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Terms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Terms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Terms.
     */
    distinct?: TermScalarFieldEnum | TermScalarFieldEnum[]
  }

  /**
   * Term findFirstOrThrow
   */
  export type TermFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter, which Term to fetch.
     */
    where?: TermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Terms to fetch.
     */
    orderBy?: TermOrderByWithRelationInput | TermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Terms.
     */
    cursor?: TermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Terms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Terms.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Terms.
     */
    distinct?: TermScalarFieldEnum | TermScalarFieldEnum[]
  }

  /**
   * Term findMany
   */
  export type TermFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter, which Terms to fetch.
     */
    where?: TermWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Terms to fetch.
     */
    orderBy?: TermOrderByWithRelationInput | TermOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Terms.
     */
    cursor?: TermWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Terms from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Terms.
     */
    skip?: number
    distinct?: TermScalarFieldEnum | TermScalarFieldEnum[]
  }

  /**
   * Term create
   */
  export type TermCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * The data needed to create a Term.
     */
    data: XOR<TermCreateInput, TermUncheckedCreateInput>
  }

  /**
   * Term createMany
   */
  export type TermCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Terms.
     */
    data: TermCreateManyInput | TermCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Term update
   */
  export type TermUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * The data needed to update a Term.
     */
    data: XOR<TermUpdateInput, TermUncheckedUpdateInput>
    /**
     * Choose, which Term to update.
     */
    where: TermWhereUniqueInput
  }

  /**
   * Term updateMany
   */
  export type TermUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Terms.
     */
    data: XOR<TermUpdateManyMutationInput, TermUncheckedUpdateManyInput>
    /**
     * Filter which Terms to update
     */
    where?: TermWhereInput
    /**
     * Limit how many Terms to update.
     */
    limit?: number
  }

  /**
   * Term upsert
   */
  export type TermUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * The filter to search for the Term to update in case it exists.
     */
    where: TermWhereUniqueInput
    /**
     * In case the Term found by the `where` argument doesn't exist, create a new Term with this data.
     */
    create: XOR<TermCreateInput, TermUncheckedCreateInput>
    /**
     * In case the Term was found with the provided `where` argument, update it with this data.
     */
    update: XOR<TermUpdateInput, TermUncheckedUpdateInput>
  }

  /**
   * Term delete
   */
  export type TermDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    /**
     * Filter which Term to delete.
     */
    where: TermWhereUniqueInput
  }

  /**
   * Term deleteMany
   */
  export type TermDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Terms to delete
     */
    where?: TermWhereInput
    /**
     * Limit how many Terms to delete.
     */
    limit?: number
  }

  /**
   * Term.SessionTerm
   */
  export type Term$SessionTermArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    where?: SessionTermWhereInput
    orderBy?: SessionTermOrderByWithRelationInput | SessionTermOrderByWithRelationInput[]
    cursor?: SessionTermWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SessionTermScalarFieldEnum | SessionTermScalarFieldEnum[]
  }

  /**
   * Term.exams
   */
  export type Term$examsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    cursor?: ExamWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * Term without action
   */
  export type TermDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
  }


  /**
   * Model Religion
   */

  export type AggregateReligion = {
    _count: ReligionCountAggregateOutputType | null
    _avg: ReligionAvgAggregateOutputType | null
    _sum: ReligionSumAggregateOutputType | null
    _min: ReligionMinAggregateOutputType | null
    _max: ReligionMaxAggregateOutputType | null
  }

  export type ReligionAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ReligionSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ReligionMinAggregateOutputType = {
    id: number | null
    religion_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ReligionMaxAggregateOutputType = {
    id: number | null
    religion_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ReligionCountAggregateOutputType = {
    id: number
    religion_name: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ReligionAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ReligionSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ReligionMinAggregateInputType = {
    id?: true
    religion_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ReligionMaxAggregateInputType = {
    id?: true
    religion_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ReligionCountAggregateInputType = {
    id?: true
    religion_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ReligionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Religion to aggregate.
     */
    where?: ReligionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Religions to fetch.
     */
    orderBy?: ReligionOrderByWithRelationInput | ReligionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ReligionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Religions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Religions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Religions
    **/
    _count?: true | ReligionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ReligionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ReligionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ReligionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ReligionMaxAggregateInputType
  }

  export type GetReligionAggregateType<T extends ReligionAggregateArgs> = {
        [P in keyof T & keyof AggregateReligion]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateReligion[P]>
      : GetScalarType<T[P], AggregateReligion[P]>
  }




  export type ReligionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ReligionWhereInput
    orderBy?: ReligionOrderByWithAggregationInput | ReligionOrderByWithAggregationInput[]
    by: ReligionScalarFieldEnum[] | ReligionScalarFieldEnum
    having?: ReligionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ReligionCountAggregateInputType | true
    _avg?: ReligionAvgAggregateInputType
    _sum?: ReligionSumAggregateInputType
    _min?: ReligionMinAggregateInputType
    _max?: ReligionMaxAggregateInputType
  }

  export type ReligionGroupByOutputType = {
    id: number
    religion_name: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ReligionCountAggregateOutputType | null
    _avg: ReligionAvgAggregateOutputType | null
    _sum: ReligionSumAggregateOutputType | null
    _min: ReligionMinAggregateOutputType | null
    _max: ReligionMaxAggregateOutputType | null
  }

  type GetReligionGroupByPayload<T extends ReligionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ReligionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ReligionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ReligionGroupByOutputType[P]>
            : GetScalarType<T[P], ReligionGroupByOutputType[P]>
        }
      >
    >


  export type ReligionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    religion_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["religion"]>



  export type ReligionSelectScalar = {
    id?: boolean
    religion_name?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ReligionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "religion_name" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["religion"]>

  export type $ReligionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Religion"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      religion_name: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["religion"]>
    composites: {}
  }

  type ReligionGetPayload<S extends boolean | null | undefined | ReligionDefaultArgs> = $Result.GetResult<Prisma.$ReligionPayload, S>

  type ReligionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ReligionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ReligionCountAggregateInputType | true
    }

  export interface ReligionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Religion'], meta: { name: 'Religion' } }
    /**
     * Find zero or one Religion that matches the filter.
     * @param {ReligionFindUniqueArgs} args - Arguments to find a Religion
     * @example
     * // Get one Religion
     * const religion = await prisma.religion.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ReligionFindUniqueArgs>(args: SelectSubset<T, ReligionFindUniqueArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Religion that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ReligionFindUniqueOrThrowArgs} args - Arguments to find a Religion
     * @example
     * // Get one Religion
     * const religion = await prisma.religion.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ReligionFindUniqueOrThrowArgs>(args: SelectSubset<T, ReligionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Religion that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionFindFirstArgs} args - Arguments to find a Religion
     * @example
     * // Get one Religion
     * const religion = await prisma.religion.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ReligionFindFirstArgs>(args?: SelectSubset<T, ReligionFindFirstArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Religion that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionFindFirstOrThrowArgs} args - Arguments to find a Religion
     * @example
     * // Get one Religion
     * const religion = await prisma.religion.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ReligionFindFirstOrThrowArgs>(args?: SelectSubset<T, ReligionFindFirstOrThrowArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Religions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Religions
     * const religions = await prisma.religion.findMany()
     * 
     * // Get first 10 Religions
     * const religions = await prisma.religion.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const religionWithIdOnly = await prisma.religion.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ReligionFindManyArgs>(args?: SelectSubset<T, ReligionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Religion.
     * @param {ReligionCreateArgs} args - Arguments to create a Religion.
     * @example
     * // Create one Religion
     * const Religion = await prisma.religion.create({
     *   data: {
     *     // ... data to create a Religion
     *   }
     * })
     * 
     */
    create<T extends ReligionCreateArgs>(args: SelectSubset<T, ReligionCreateArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Religions.
     * @param {ReligionCreateManyArgs} args - Arguments to create many Religions.
     * @example
     * // Create many Religions
     * const religion = await prisma.religion.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ReligionCreateManyArgs>(args?: SelectSubset<T, ReligionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Religion.
     * @param {ReligionDeleteArgs} args - Arguments to delete one Religion.
     * @example
     * // Delete one Religion
     * const Religion = await prisma.religion.delete({
     *   where: {
     *     // ... filter to delete one Religion
     *   }
     * })
     * 
     */
    delete<T extends ReligionDeleteArgs>(args: SelectSubset<T, ReligionDeleteArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Religion.
     * @param {ReligionUpdateArgs} args - Arguments to update one Religion.
     * @example
     * // Update one Religion
     * const religion = await prisma.religion.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ReligionUpdateArgs>(args: SelectSubset<T, ReligionUpdateArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Religions.
     * @param {ReligionDeleteManyArgs} args - Arguments to filter Religions to delete.
     * @example
     * // Delete a few Religions
     * const { count } = await prisma.religion.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ReligionDeleteManyArgs>(args?: SelectSubset<T, ReligionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Religions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Religions
     * const religion = await prisma.religion.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ReligionUpdateManyArgs>(args: SelectSubset<T, ReligionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Religion.
     * @param {ReligionUpsertArgs} args - Arguments to update or create a Religion.
     * @example
     * // Update or create a Religion
     * const religion = await prisma.religion.upsert({
     *   create: {
     *     // ... data to create a Religion
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Religion we want to update
     *   }
     * })
     */
    upsert<T extends ReligionUpsertArgs>(args: SelectSubset<T, ReligionUpsertArgs<ExtArgs>>): Prisma__ReligionClient<$Result.GetResult<Prisma.$ReligionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Religions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionCountArgs} args - Arguments to filter Religions to count.
     * @example
     * // Count the number of Religions
     * const count = await prisma.religion.count({
     *   where: {
     *     // ... the filter for the Religions we want to count
     *   }
     * })
    **/
    count<T extends ReligionCountArgs>(
      args?: Subset<T, ReligionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ReligionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Religion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ReligionAggregateArgs>(args: Subset<T, ReligionAggregateArgs>): Prisma.PrismaPromise<GetReligionAggregateType<T>>

    /**
     * Group by Religion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReligionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ReligionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ReligionGroupByArgs['orderBy'] }
        : { orderBy?: ReligionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ReligionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetReligionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Religion model
   */
  readonly fields: ReligionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Religion.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ReligionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Religion model
   */
  interface ReligionFieldRefs {
    readonly id: FieldRef<"Religion", 'Int'>
    readonly religion_name: FieldRef<"Religion", 'String'>
    readonly created_by: FieldRef<"Religion", 'Int'>
    readonly created_at: FieldRef<"Religion", 'DateTime'>
    readonly updated_at: FieldRef<"Religion", 'DateTime'>
    readonly deleted_at: FieldRef<"Religion", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Religion findUnique
   */
  export type ReligionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter, which Religion to fetch.
     */
    where: ReligionWhereUniqueInput
  }

  /**
   * Religion findUniqueOrThrow
   */
  export type ReligionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter, which Religion to fetch.
     */
    where: ReligionWhereUniqueInput
  }

  /**
   * Religion findFirst
   */
  export type ReligionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter, which Religion to fetch.
     */
    where?: ReligionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Religions to fetch.
     */
    orderBy?: ReligionOrderByWithRelationInput | ReligionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Religions.
     */
    cursor?: ReligionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Religions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Religions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Religions.
     */
    distinct?: ReligionScalarFieldEnum | ReligionScalarFieldEnum[]
  }

  /**
   * Religion findFirstOrThrow
   */
  export type ReligionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter, which Religion to fetch.
     */
    where?: ReligionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Religions to fetch.
     */
    orderBy?: ReligionOrderByWithRelationInput | ReligionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Religions.
     */
    cursor?: ReligionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Religions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Religions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Religions.
     */
    distinct?: ReligionScalarFieldEnum | ReligionScalarFieldEnum[]
  }

  /**
   * Religion findMany
   */
  export type ReligionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter, which Religions to fetch.
     */
    where?: ReligionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Religions to fetch.
     */
    orderBy?: ReligionOrderByWithRelationInput | ReligionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Religions.
     */
    cursor?: ReligionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Religions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Religions.
     */
    skip?: number
    distinct?: ReligionScalarFieldEnum | ReligionScalarFieldEnum[]
  }

  /**
   * Religion create
   */
  export type ReligionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * The data needed to create a Religion.
     */
    data: XOR<ReligionCreateInput, ReligionUncheckedCreateInput>
  }

  /**
   * Religion createMany
   */
  export type ReligionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Religions.
     */
    data: ReligionCreateManyInput | ReligionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Religion update
   */
  export type ReligionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * The data needed to update a Religion.
     */
    data: XOR<ReligionUpdateInput, ReligionUncheckedUpdateInput>
    /**
     * Choose, which Religion to update.
     */
    where: ReligionWhereUniqueInput
  }

  /**
   * Religion updateMany
   */
  export type ReligionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Religions.
     */
    data: XOR<ReligionUpdateManyMutationInput, ReligionUncheckedUpdateManyInput>
    /**
     * Filter which Religions to update
     */
    where?: ReligionWhereInput
    /**
     * Limit how many Religions to update.
     */
    limit?: number
  }

  /**
   * Religion upsert
   */
  export type ReligionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * The filter to search for the Religion to update in case it exists.
     */
    where: ReligionWhereUniqueInput
    /**
     * In case the Religion found by the `where` argument doesn't exist, create a new Religion with this data.
     */
    create: XOR<ReligionCreateInput, ReligionUncheckedCreateInput>
    /**
     * In case the Religion was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ReligionUpdateInput, ReligionUncheckedUpdateInput>
  }

  /**
   * Religion delete
   */
  export type ReligionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
    /**
     * Filter which Religion to delete.
     */
    where: ReligionWhereUniqueInput
  }

  /**
   * Religion deleteMany
   */
  export type ReligionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Religions to delete
     */
    where?: ReligionWhereInput
    /**
     * Limit how many Religions to delete.
     */
    limit?: number
  }

  /**
   * Religion without action
   */
  export type ReligionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Religion
     */
    select?: ReligionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Religion
     */
    omit?: ReligionOmit<ExtArgs> | null
  }


  /**
   * Model ComplainFromTeacher
   */

  export type AggregateComplainFromTeacher = {
    _count: ComplainFromTeacherCountAggregateOutputType | null
    _avg: ComplainFromTeacherAvgAggregateOutputType | null
    _sum: ComplainFromTeacherSumAggregateOutputType | null
    _min: ComplainFromTeacherMinAggregateOutputType | null
    _max: ComplainFromTeacherMaxAggregateOutputType | null
  }

  export type ComplainFromTeacherAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    is_urgent: number | null
    created_by: number | null
  }

  export type ComplainFromTeacherSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    is_urgent: number | null
    created_by: number | null
  }

  export type ComplainFromTeacherMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    complain: string | null
    is_urgent: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ComplainFromTeacherMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    complain: string | null
    is_urgent: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ComplainFromTeacherCountAggregateOutputType = {
    id: number
    branch_id: number
    session_class_id: number
    student_id: number
    complain: number
    is_urgent: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ComplainFromTeacherAvgAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    is_urgent?: true
    created_by?: true
  }

  export type ComplainFromTeacherSumAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    is_urgent?: true
    created_by?: true
  }

  export type ComplainFromTeacherMinAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    complain?: true
    is_urgent?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ComplainFromTeacherMaxAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    complain?: true
    is_urgent?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ComplainFromTeacherCountAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    complain?: true
    is_urgent?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ComplainFromTeacherAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ComplainFromTeacher to aggregate.
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComplainFromTeachers to fetch.
     */
    orderBy?: ComplainFromTeacherOrderByWithRelationInput | ComplainFromTeacherOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ComplainFromTeacherWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComplainFromTeachers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComplainFromTeachers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ComplainFromTeachers
    **/
    _count?: true | ComplainFromTeacherCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ComplainFromTeacherAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ComplainFromTeacherSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ComplainFromTeacherMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ComplainFromTeacherMaxAggregateInputType
  }

  export type GetComplainFromTeacherAggregateType<T extends ComplainFromTeacherAggregateArgs> = {
        [P in keyof T & keyof AggregateComplainFromTeacher]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateComplainFromTeacher[P]>
      : GetScalarType<T[P], AggregateComplainFromTeacher[P]>
  }




  export type ComplainFromTeacherGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ComplainFromTeacherWhereInput
    orderBy?: ComplainFromTeacherOrderByWithAggregationInput | ComplainFromTeacherOrderByWithAggregationInput[]
    by: ComplainFromTeacherScalarFieldEnum[] | ComplainFromTeacherScalarFieldEnum
    having?: ComplainFromTeacherScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ComplainFromTeacherCountAggregateInputType | true
    _avg?: ComplainFromTeacherAvgAggregateInputType
    _sum?: ComplainFromTeacherSumAggregateInputType
    _min?: ComplainFromTeacherMinAggregateInputType
    _max?: ComplainFromTeacherMaxAggregateInputType
  }

  export type ComplainFromTeacherGroupByOutputType = {
    id: number
    branch_id: number
    session_class_id: number | null
    student_id: number
    complain: string
    is_urgent: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ComplainFromTeacherCountAggregateOutputType | null
    _avg: ComplainFromTeacherAvgAggregateOutputType | null
    _sum: ComplainFromTeacherSumAggregateOutputType | null
    _min: ComplainFromTeacherMinAggregateOutputType | null
    _max: ComplainFromTeacherMaxAggregateOutputType | null
  }

  type GetComplainFromTeacherGroupByPayload<T extends ComplainFromTeacherGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ComplainFromTeacherGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ComplainFromTeacherGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ComplainFromTeacherGroupByOutputType[P]>
            : GetScalarType<T[P], ComplainFromTeacherGroupByOutputType[P]>
        }
      >
    >


  export type ComplainFromTeacherSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    student_id?: boolean
    complain?: boolean
    is_urgent?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["complainFromTeacher"]>



  export type ComplainFromTeacherSelectScalar = {
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    student_id?: boolean
    complain?: boolean
    is_urgent?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ComplainFromTeacherOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "session_class_id" | "student_id" | "complain" | "is_urgent" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["complainFromTeacher"]>

  export type $ComplainFromTeacherPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ComplainFromTeacher"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      session_class_id: number | null
      student_id: number
      complain: string
      is_urgent: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["complainFromTeacher"]>
    composites: {}
  }

  type ComplainFromTeacherGetPayload<S extends boolean | null | undefined | ComplainFromTeacherDefaultArgs> = $Result.GetResult<Prisma.$ComplainFromTeacherPayload, S>

  type ComplainFromTeacherCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ComplainFromTeacherFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ComplainFromTeacherCountAggregateInputType | true
    }

  export interface ComplainFromTeacherDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ComplainFromTeacher'], meta: { name: 'ComplainFromTeacher' } }
    /**
     * Find zero or one ComplainFromTeacher that matches the filter.
     * @param {ComplainFromTeacherFindUniqueArgs} args - Arguments to find a ComplainFromTeacher
     * @example
     * // Get one ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ComplainFromTeacherFindUniqueArgs>(args: SelectSubset<T, ComplainFromTeacherFindUniqueArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ComplainFromTeacher that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ComplainFromTeacherFindUniqueOrThrowArgs} args - Arguments to find a ComplainFromTeacher
     * @example
     * // Get one ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ComplainFromTeacherFindUniqueOrThrowArgs>(args: SelectSubset<T, ComplainFromTeacherFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ComplainFromTeacher that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherFindFirstArgs} args - Arguments to find a ComplainFromTeacher
     * @example
     * // Get one ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ComplainFromTeacherFindFirstArgs>(args?: SelectSubset<T, ComplainFromTeacherFindFirstArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ComplainFromTeacher that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherFindFirstOrThrowArgs} args - Arguments to find a ComplainFromTeacher
     * @example
     * // Get one ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ComplainFromTeacherFindFirstOrThrowArgs>(args?: SelectSubset<T, ComplainFromTeacherFindFirstOrThrowArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ComplainFromTeachers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ComplainFromTeachers
     * const complainFromTeachers = await prisma.complainFromTeacher.findMany()
     * 
     * // Get first 10 ComplainFromTeachers
     * const complainFromTeachers = await prisma.complainFromTeacher.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const complainFromTeacherWithIdOnly = await prisma.complainFromTeacher.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ComplainFromTeacherFindManyArgs>(args?: SelectSubset<T, ComplainFromTeacherFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ComplainFromTeacher.
     * @param {ComplainFromTeacherCreateArgs} args - Arguments to create a ComplainFromTeacher.
     * @example
     * // Create one ComplainFromTeacher
     * const ComplainFromTeacher = await prisma.complainFromTeacher.create({
     *   data: {
     *     // ... data to create a ComplainFromTeacher
     *   }
     * })
     * 
     */
    create<T extends ComplainFromTeacherCreateArgs>(args: SelectSubset<T, ComplainFromTeacherCreateArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ComplainFromTeachers.
     * @param {ComplainFromTeacherCreateManyArgs} args - Arguments to create many ComplainFromTeachers.
     * @example
     * // Create many ComplainFromTeachers
     * const complainFromTeacher = await prisma.complainFromTeacher.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ComplainFromTeacherCreateManyArgs>(args?: SelectSubset<T, ComplainFromTeacherCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ComplainFromTeacher.
     * @param {ComplainFromTeacherDeleteArgs} args - Arguments to delete one ComplainFromTeacher.
     * @example
     * // Delete one ComplainFromTeacher
     * const ComplainFromTeacher = await prisma.complainFromTeacher.delete({
     *   where: {
     *     // ... filter to delete one ComplainFromTeacher
     *   }
     * })
     * 
     */
    delete<T extends ComplainFromTeacherDeleteArgs>(args: SelectSubset<T, ComplainFromTeacherDeleteArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ComplainFromTeacher.
     * @param {ComplainFromTeacherUpdateArgs} args - Arguments to update one ComplainFromTeacher.
     * @example
     * // Update one ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ComplainFromTeacherUpdateArgs>(args: SelectSubset<T, ComplainFromTeacherUpdateArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ComplainFromTeachers.
     * @param {ComplainFromTeacherDeleteManyArgs} args - Arguments to filter ComplainFromTeachers to delete.
     * @example
     * // Delete a few ComplainFromTeachers
     * const { count } = await prisma.complainFromTeacher.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ComplainFromTeacherDeleteManyArgs>(args?: SelectSubset<T, ComplainFromTeacherDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ComplainFromTeachers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ComplainFromTeachers
     * const complainFromTeacher = await prisma.complainFromTeacher.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ComplainFromTeacherUpdateManyArgs>(args: SelectSubset<T, ComplainFromTeacherUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ComplainFromTeacher.
     * @param {ComplainFromTeacherUpsertArgs} args - Arguments to update or create a ComplainFromTeacher.
     * @example
     * // Update or create a ComplainFromTeacher
     * const complainFromTeacher = await prisma.complainFromTeacher.upsert({
     *   create: {
     *     // ... data to create a ComplainFromTeacher
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ComplainFromTeacher we want to update
     *   }
     * })
     */
    upsert<T extends ComplainFromTeacherUpsertArgs>(args: SelectSubset<T, ComplainFromTeacherUpsertArgs<ExtArgs>>): Prisma__ComplainFromTeacherClient<$Result.GetResult<Prisma.$ComplainFromTeacherPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ComplainFromTeachers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherCountArgs} args - Arguments to filter ComplainFromTeachers to count.
     * @example
     * // Count the number of ComplainFromTeachers
     * const count = await prisma.complainFromTeacher.count({
     *   where: {
     *     // ... the filter for the ComplainFromTeachers we want to count
     *   }
     * })
    **/
    count<T extends ComplainFromTeacherCountArgs>(
      args?: Subset<T, ComplainFromTeacherCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ComplainFromTeacherCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ComplainFromTeacher.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ComplainFromTeacherAggregateArgs>(args: Subset<T, ComplainFromTeacherAggregateArgs>): Prisma.PrismaPromise<GetComplainFromTeacherAggregateType<T>>

    /**
     * Group by ComplainFromTeacher.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComplainFromTeacherGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ComplainFromTeacherGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ComplainFromTeacherGroupByArgs['orderBy'] }
        : { orderBy?: ComplainFromTeacherGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ComplainFromTeacherGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetComplainFromTeacherGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ComplainFromTeacher model
   */
  readonly fields: ComplainFromTeacherFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ComplainFromTeacher.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ComplainFromTeacherClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ComplainFromTeacher model
   */
  interface ComplainFromTeacherFieldRefs {
    readonly id: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly branch_id: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly session_class_id: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly student_id: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly complain: FieldRef<"ComplainFromTeacher", 'String'>
    readonly is_urgent: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly created_by: FieldRef<"ComplainFromTeacher", 'Int'>
    readonly created_at: FieldRef<"ComplainFromTeacher", 'DateTime'>
    readonly updated_at: FieldRef<"ComplainFromTeacher", 'DateTime'>
    readonly deleted_at: FieldRef<"ComplainFromTeacher", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ComplainFromTeacher findUnique
   */
  export type ComplainFromTeacherFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter, which ComplainFromTeacher to fetch.
     */
    where: ComplainFromTeacherWhereUniqueInput
  }

  /**
   * ComplainFromTeacher findUniqueOrThrow
   */
  export type ComplainFromTeacherFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter, which ComplainFromTeacher to fetch.
     */
    where: ComplainFromTeacherWhereUniqueInput
  }

  /**
   * ComplainFromTeacher findFirst
   */
  export type ComplainFromTeacherFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter, which ComplainFromTeacher to fetch.
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComplainFromTeachers to fetch.
     */
    orderBy?: ComplainFromTeacherOrderByWithRelationInput | ComplainFromTeacherOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ComplainFromTeachers.
     */
    cursor?: ComplainFromTeacherWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComplainFromTeachers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComplainFromTeachers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ComplainFromTeachers.
     */
    distinct?: ComplainFromTeacherScalarFieldEnum | ComplainFromTeacherScalarFieldEnum[]
  }

  /**
   * ComplainFromTeacher findFirstOrThrow
   */
  export type ComplainFromTeacherFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter, which ComplainFromTeacher to fetch.
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComplainFromTeachers to fetch.
     */
    orderBy?: ComplainFromTeacherOrderByWithRelationInput | ComplainFromTeacherOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ComplainFromTeachers.
     */
    cursor?: ComplainFromTeacherWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComplainFromTeachers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComplainFromTeachers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ComplainFromTeachers.
     */
    distinct?: ComplainFromTeacherScalarFieldEnum | ComplainFromTeacherScalarFieldEnum[]
  }

  /**
   * ComplainFromTeacher findMany
   */
  export type ComplainFromTeacherFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter, which ComplainFromTeachers to fetch.
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComplainFromTeachers to fetch.
     */
    orderBy?: ComplainFromTeacherOrderByWithRelationInput | ComplainFromTeacherOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ComplainFromTeachers.
     */
    cursor?: ComplainFromTeacherWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComplainFromTeachers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComplainFromTeachers.
     */
    skip?: number
    distinct?: ComplainFromTeacherScalarFieldEnum | ComplainFromTeacherScalarFieldEnum[]
  }

  /**
   * ComplainFromTeacher create
   */
  export type ComplainFromTeacherCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * The data needed to create a ComplainFromTeacher.
     */
    data: XOR<ComplainFromTeacherCreateInput, ComplainFromTeacherUncheckedCreateInput>
  }

  /**
   * ComplainFromTeacher createMany
   */
  export type ComplainFromTeacherCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ComplainFromTeachers.
     */
    data: ComplainFromTeacherCreateManyInput | ComplainFromTeacherCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ComplainFromTeacher update
   */
  export type ComplainFromTeacherUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * The data needed to update a ComplainFromTeacher.
     */
    data: XOR<ComplainFromTeacherUpdateInput, ComplainFromTeacherUncheckedUpdateInput>
    /**
     * Choose, which ComplainFromTeacher to update.
     */
    where: ComplainFromTeacherWhereUniqueInput
  }

  /**
   * ComplainFromTeacher updateMany
   */
  export type ComplainFromTeacherUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ComplainFromTeachers.
     */
    data: XOR<ComplainFromTeacherUpdateManyMutationInput, ComplainFromTeacherUncheckedUpdateManyInput>
    /**
     * Filter which ComplainFromTeachers to update
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * Limit how many ComplainFromTeachers to update.
     */
    limit?: number
  }

  /**
   * ComplainFromTeacher upsert
   */
  export type ComplainFromTeacherUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * The filter to search for the ComplainFromTeacher to update in case it exists.
     */
    where: ComplainFromTeacherWhereUniqueInput
    /**
     * In case the ComplainFromTeacher found by the `where` argument doesn't exist, create a new ComplainFromTeacher with this data.
     */
    create: XOR<ComplainFromTeacherCreateInput, ComplainFromTeacherUncheckedCreateInput>
    /**
     * In case the ComplainFromTeacher was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ComplainFromTeacherUpdateInput, ComplainFromTeacherUncheckedUpdateInput>
  }

  /**
   * ComplainFromTeacher delete
   */
  export type ComplainFromTeacherDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
    /**
     * Filter which ComplainFromTeacher to delete.
     */
    where: ComplainFromTeacherWhereUniqueInput
  }

  /**
   * ComplainFromTeacher deleteMany
   */
  export type ComplainFromTeacherDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ComplainFromTeachers to delete
     */
    where?: ComplainFromTeacherWhereInput
    /**
     * Limit how many ComplainFromTeachers to delete.
     */
    limit?: number
  }

  /**
   * ComplainFromTeacher without action
   */
  export type ComplainFromTeacherDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComplainFromTeacher
     */
    select?: ComplainFromTeacherSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComplainFromTeacher
     */
    omit?: ComplainFromTeacherOmit<ExtArgs> | null
  }


  /**
   * Model Attendance
   */

  export type AggregateAttendance = {
    _count: AttendanceCountAggregateOutputType | null
    _avg: AttendanceAvgAggregateOutputType | null
    _sum: AttendanceSumAggregateOutputType | null
    _min: AttendanceMinAggregateOutputType | null
    _max: AttendanceMaxAggregateOutputType | null
  }

  export type AttendanceAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    staff_id: number | null
    status: number | null
    created_by: number | null
  }

  export type AttendanceSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    staff_id: number | null
    status: number | null
    created_by: number | null
  }

  export type AttendanceMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    staff_id: number | null
    attendance_date: Date | null
    status: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type AttendanceMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    student_id: number | null
    staff_id: number | null
    attendance_date: Date | null
    status: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type AttendanceCountAggregateOutputType = {
    id: number
    branch_id: number
    session_class_id: number
    student_id: number
    staff_id: number
    attendance_date: number
    status: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type AttendanceAvgAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    staff_id?: true
    status?: true
    created_by?: true
  }

  export type AttendanceSumAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    staff_id?: true
    status?: true
    created_by?: true
  }

  export type AttendanceMinAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    staff_id?: true
    attendance_date?: true
    status?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type AttendanceMaxAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    staff_id?: true
    attendance_date?: true
    status?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type AttendanceCountAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    student_id?: true
    staff_id?: true
    attendance_date?: true
    status?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type AttendanceAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Attendance to aggregate.
     */
    where?: AttendanceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Attendances to fetch.
     */
    orderBy?: AttendanceOrderByWithRelationInput | AttendanceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: AttendanceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Attendances from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Attendances.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Attendances
    **/
    _count?: true | AttendanceCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: AttendanceAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: AttendanceSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: AttendanceMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: AttendanceMaxAggregateInputType
  }

  export type GetAttendanceAggregateType<T extends AttendanceAggregateArgs> = {
        [P in keyof T & keyof AggregateAttendance]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateAttendance[P]>
      : GetScalarType<T[P], AggregateAttendance[P]>
  }




  export type AttendanceGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: AttendanceWhereInput
    orderBy?: AttendanceOrderByWithAggregationInput | AttendanceOrderByWithAggregationInput[]
    by: AttendanceScalarFieldEnum[] | AttendanceScalarFieldEnum
    having?: AttendanceScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: AttendanceCountAggregateInputType | true
    _avg?: AttendanceAvgAggregateInputType
    _sum?: AttendanceSumAggregateInputType
    _min?: AttendanceMinAggregateInputType
    _max?: AttendanceMaxAggregateInputType
  }

  export type AttendanceGroupByOutputType = {
    id: number
    branch_id: number
    session_class_id: number | null
    student_id: number | null
    staff_id: number | null
    attendance_date: Date
    status: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: AttendanceCountAggregateOutputType | null
    _avg: AttendanceAvgAggregateOutputType | null
    _sum: AttendanceSumAggregateOutputType | null
    _min: AttendanceMinAggregateOutputType | null
    _max: AttendanceMaxAggregateOutputType | null
  }

  type GetAttendanceGroupByPayload<T extends AttendanceGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<AttendanceGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof AttendanceGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], AttendanceGroupByOutputType[P]>
            : GetScalarType<T[P], AttendanceGroupByOutputType[P]>
        }
      >
    >


  export type AttendanceSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    student_id?: boolean
    staff_id?: boolean
    attendance_date?: boolean
    status?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["attendance"]>



  export type AttendanceSelectScalar = {
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    student_id?: boolean
    staff_id?: boolean
    attendance_date?: boolean
    status?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type AttendanceOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "session_class_id" | "student_id" | "staff_id" | "attendance_date" | "status" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["attendance"]>

  export type $AttendancePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Attendance"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      session_class_id: number | null
      student_id: number | null
      staff_id: number | null
      attendance_date: Date
      status: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["attendance"]>
    composites: {}
  }

  type AttendanceGetPayload<S extends boolean | null | undefined | AttendanceDefaultArgs> = $Result.GetResult<Prisma.$AttendancePayload, S>

  type AttendanceCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<AttendanceFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: AttendanceCountAggregateInputType | true
    }

  export interface AttendanceDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Attendance'], meta: { name: 'Attendance' } }
    /**
     * Find zero or one Attendance that matches the filter.
     * @param {AttendanceFindUniqueArgs} args - Arguments to find a Attendance
     * @example
     * // Get one Attendance
     * const attendance = await prisma.attendance.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends AttendanceFindUniqueArgs>(args: SelectSubset<T, AttendanceFindUniqueArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Attendance that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {AttendanceFindUniqueOrThrowArgs} args - Arguments to find a Attendance
     * @example
     * // Get one Attendance
     * const attendance = await prisma.attendance.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends AttendanceFindUniqueOrThrowArgs>(args: SelectSubset<T, AttendanceFindUniqueOrThrowArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Attendance that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceFindFirstArgs} args - Arguments to find a Attendance
     * @example
     * // Get one Attendance
     * const attendance = await prisma.attendance.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends AttendanceFindFirstArgs>(args?: SelectSubset<T, AttendanceFindFirstArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Attendance that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceFindFirstOrThrowArgs} args - Arguments to find a Attendance
     * @example
     * // Get one Attendance
     * const attendance = await prisma.attendance.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends AttendanceFindFirstOrThrowArgs>(args?: SelectSubset<T, AttendanceFindFirstOrThrowArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Attendances that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Attendances
     * const attendances = await prisma.attendance.findMany()
     * 
     * // Get first 10 Attendances
     * const attendances = await prisma.attendance.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const attendanceWithIdOnly = await prisma.attendance.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends AttendanceFindManyArgs>(args?: SelectSubset<T, AttendanceFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Attendance.
     * @param {AttendanceCreateArgs} args - Arguments to create a Attendance.
     * @example
     * // Create one Attendance
     * const Attendance = await prisma.attendance.create({
     *   data: {
     *     // ... data to create a Attendance
     *   }
     * })
     * 
     */
    create<T extends AttendanceCreateArgs>(args: SelectSubset<T, AttendanceCreateArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Attendances.
     * @param {AttendanceCreateManyArgs} args - Arguments to create many Attendances.
     * @example
     * // Create many Attendances
     * const attendance = await prisma.attendance.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends AttendanceCreateManyArgs>(args?: SelectSubset<T, AttendanceCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Attendance.
     * @param {AttendanceDeleteArgs} args - Arguments to delete one Attendance.
     * @example
     * // Delete one Attendance
     * const Attendance = await prisma.attendance.delete({
     *   where: {
     *     // ... filter to delete one Attendance
     *   }
     * })
     * 
     */
    delete<T extends AttendanceDeleteArgs>(args: SelectSubset<T, AttendanceDeleteArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Attendance.
     * @param {AttendanceUpdateArgs} args - Arguments to update one Attendance.
     * @example
     * // Update one Attendance
     * const attendance = await prisma.attendance.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends AttendanceUpdateArgs>(args: SelectSubset<T, AttendanceUpdateArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Attendances.
     * @param {AttendanceDeleteManyArgs} args - Arguments to filter Attendances to delete.
     * @example
     * // Delete a few Attendances
     * const { count } = await prisma.attendance.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends AttendanceDeleteManyArgs>(args?: SelectSubset<T, AttendanceDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Attendances.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Attendances
     * const attendance = await prisma.attendance.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends AttendanceUpdateManyArgs>(args: SelectSubset<T, AttendanceUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Attendance.
     * @param {AttendanceUpsertArgs} args - Arguments to update or create a Attendance.
     * @example
     * // Update or create a Attendance
     * const attendance = await prisma.attendance.upsert({
     *   create: {
     *     // ... data to create a Attendance
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Attendance we want to update
     *   }
     * })
     */
    upsert<T extends AttendanceUpsertArgs>(args: SelectSubset<T, AttendanceUpsertArgs<ExtArgs>>): Prisma__AttendanceClient<$Result.GetResult<Prisma.$AttendancePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Attendances.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceCountArgs} args - Arguments to filter Attendances to count.
     * @example
     * // Count the number of Attendances
     * const count = await prisma.attendance.count({
     *   where: {
     *     // ... the filter for the Attendances we want to count
     *   }
     * })
    **/
    count<T extends AttendanceCountArgs>(
      args?: Subset<T, AttendanceCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], AttendanceCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Attendance.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends AttendanceAggregateArgs>(args: Subset<T, AttendanceAggregateArgs>): Prisma.PrismaPromise<GetAttendanceAggregateType<T>>

    /**
     * Group by Attendance.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AttendanceGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends AttendanceGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: AttendanceGroupByArgs['orderBy'] }
        : { orderBy?: AttendanceGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, AttendanceGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetAttendanceGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Attendance model
   */
  readonly fields: AttendanceFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Attendance.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__AttendanceClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Attendance model
   */
  interface AttendanceFieldRefs {
    readonly id: FieldRef<"Attendance", 'Int'>
    readonly branch_id: FieldRef<"Attendance", 'Int'>
    readonly session_class_id: FieldRef<"Attendance", 'Int'>
    readonly student_id: FieldRef<"Attendance", 'Int'>
    readonly staff_id: FieldRef<"Attendance", 'Int'>
    readonly attendance_date: FieldRef<"Attendance", 'DateTime'>
    readonly status: FieldRef<"Attendance", 'Int'>
    readonly created_by: FieldRef<"Attendance", 'Int'>
    readonly created_at: FieldRef<"Attendance", 'DateTime'>
    readonly updated_at: FieldRef<"Attendance", 'DateTime'>
    readonly deleted_at: FieldRef<"Attendance", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Attendance findUnique
   */
  export type AttendanceFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter, which Attendance to fetch.
     */
    where: AttendanceWhereUniqueInput
  }

  /**
   * Attendance findUniqueOrThrow
   */
  export type AttendanceFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter, which Attendance to fetch.
     */
    where: AttendanceWhereUniqueInput
  }

  /**
   * Attendance findFirst
   */
  export type AttendanceFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter, which Attendance to fetch.
     */
    where?: AttendanceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Attendances to fetch.
     */
    orderBy?: AttendanceOrderByWithRelationInput | AttendanceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Attendances.
     */
    cursor?: AttendanceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Attendances from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Attendances.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Attendances.
     */
    distinct?: AttendanceScalarFieldEnum | AttendanceScalarFieldEnum[]
  }

  /**
   * Attendance findFirstOrThrow
   */
  export type AttendanceFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter, which Attendance to fetch.
     */
    where?: AttendanceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Attendances to fetch.
     */
    orderBy?: AttendanceOrderByWithRelationInput | AttendanceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Attendances.
     */
    cursor?: AttendanceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Attendances from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Attendances.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Attendances.
     */
    distinct?: AttendanceScalarFieldEnum | AttendanceScalarFieldEnum[]
  }

  /**
   * Attendance findMany
   */
  export type AttendanceFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter, which Attendances to fetch.
     */
    where?: AttendanceWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Attendances to fetch.
     */
    orderBy?: AttendanceOrderByWithRelationInput | AttendanceOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Attendances.
     */
    cursor?: AttendanceWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Attendances from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Attendances.
     */
    skip?: number
    distinct?: AttendanceScalarFieldEnum | AttendanceScalarFieldEnum[]
  }

  /**
   * Attendance create
   */
  export type AttendanceCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * The data needed to create a Attendance.
     */
    data: XOR<AttendanceCreateInput, AttendanceUncheckedCreateInput>
  }

  /**
   * Attendance createMany
   */
  export type AttendanceCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Attendances.
     */
    data: AttendanceCreateManyInput | AttendanceCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Attendance update
   */
  export type AttendanceUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * The data needed to update a Attendance.
     */
    data: XOR<AttendanceUpdateInput, AttendanceUncheckedUpdateInput>
    /**
     * Choose, which Attendance to update.
     */
    where: AttendanceWhereUniqueInput
  }

  /**
   * Attendance updateMany
   */
  export type AttendanceUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Attendances.
     */
    data: XOR<AttendanceUpdateManyMutationInput, AttendanceUncheckedUpdateManyInput>
    /**
     * Filter which Attendances to update
     */
    where?: AttendanceWhereInput
    /**
     * Limit how many Attendances to update.
     */
    limit?: number
  }

  /**
   * Attendance upsert
   */
  export type AttendanceUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * The filter to search for the Attendance to update in case it exists.
     */
    where: AttendanceWhereUniqueInput
    /**
     * In case the Attendance found by the `where` argument doesn't exist, create a new Attendance with this data.
     */
    create: XOR<AttendanceCreateInput, AttendanceUncheckedCreateInput>
    /**
     * In case the Attendance was found with the provided `where` argument, update it with this data.
     */
    update: XOR<AttendanceUpdateInput, AttendanceUncheckedUpdateInput>
  }

  /**
   * Attendance delete
   */
  export type AttendanceDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
    /**
     * Filter which Attendance to delete.
     */
    where: AttendanceWhereUniqueInput
  }

  /**
   * Attendance deleteMany
   */
  export type AttendanceDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Attendances to delete
     */
    where?: AttendanceWhereInput
    /**
     * Limit how many Attendances to delete.
     */
    limit?: number
  }

  /**
   * Attendance without action
   */
  export type AttendanceDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Attendance
     */
    select?: AttendanceSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Attendance
     */
    omit?: AttendanceOmit<ExtArgs> | null
  }


  /**
   * Model SchoolNote
   */

  export type AggregateSchoolNote = {
    _count: SchoolNoteCountAggregateOutputType | null
    _avg: SchoolNoteAvgAggregateOutputType | null
    _sum: SchoolNoteSumAggregateOutputType | null
    _min: SchoolNoteMinAggregateOutputType | null
    _max: SchoolNoteMaxAggregateOutputType | null
  }

  export type SchoolNoteAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    class_template_id: number | null
    school_subject_id: number | null
    term_id: number | null
    week: number | null
    order: number | null
    created_by: number | null
  }

  export type SchoolNoteSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    class_template_id: number | null
    school_subject_id: number | null
    term_id: number | null
    week: number | null
    order: number | null
    created_by: number | null
  }

  export type SchoolNoteMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    class_template_id: number | null
    school_subject_id: number | null
    term_id: number | null
    week: number | null
    order: number | null
    topic: string | null
    topic_desc: string | null
    note: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolNoteMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    branch_id: number | null
    class_template_id: number | null
    school_subject_id: number | null
    term_id: number | null
    week: number | null
    order: number | null
    topic: string | null
    topic_desc: string | null
    note: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SchoolNoteCountAggregateOutputType = {
    id: number
    school_id: number
    branch_id: number
    class_template_id: number
    school_subject_id: number
    term_id: number
    week: number
    order: number
    topic: number
    topic_desc: number
    students_question_to_answer: number
    note: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SchoolNoteAvgAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    class_template_id?: true
    school_subject_id?: true
    term_id?: true
    week?: true
    order?: true
    created_by?: true
  }

  export type SchoolNoteSumAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    class_template_id?: true
    school_subject_id?: true
    term_id?: true
    week?: true
    order?: true
    created_by?: true
  }

  export type SchoolNoteMinAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    class_template_id?: true
    school_subject_id?: true
    term_id?: true
    week?: true
    order?: true
    topic?: true
    topic_desc?: true
    note?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolNoteMaxAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    class_template_id?: true
    school_subject_id?: true
    term_id?: true
    week?: true
    order?: true
    topic?: true
    topic_desc?: true
    note?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SchoolNoteCountAggregateInputType = {
    id?: true
    school_id?: true
    branch_id?: true
    class_template_id?: true
    school_subject_id?: true
    term_id?: true
    week?: true
    order?: true
    topic?: true
    topic_desc?: true
    students_question_to_answer?: true
    note?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SchoolNoteAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolNote to aggregate.
     */
    where?: SchoolNoteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolNotes to fetch.
     */
    orderBy?: SchoolNoteOrderByWithRelationInput | SchoolNoteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SchoolNoteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolNotes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolNotes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SchoolNotes
    **/
    _count?: true | SchoolNoteCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SchoolNoteAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SchoolNoteSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SchoolNoteMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SchoolNoteMaxAggregateInputType
  }

  export type GetSchoolNoteAggregateType<T extends SchoolNoteAggregateArgs> = {
        [P in keyof T & keyof AggregateSchoolNote]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSchoolNote[P]>
      : GetScalarType<T[P], AggregateSchoolNote[P]>
  }




  export type SchoolNoteGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SchoolNoteWhereInput
    orderBy?: SchoolNoteOrderByWithAggregationInput | SchoolNoteOrderByWithAggregationInput[]
    by: SchoolNoteScalarFieldEnum[] | SchoolNoteScalarFieldEnum
    having?: SchoolNoteScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SchoolNoteCountAggregateInputType | true
    _avg?: SchoolNoteAvgAggregateInputType
    _sum?: SchoolNoteSumAggregateInputType
    _min?: SchoolNoteMinAggregateInputType
    _max?: SchoolNoteMaxAggregateInputType
  }

  export type SchoolNoteGroupByOutputType = {
    id: number
    school_id: number
    branch_id: number | null
    class_template_id: number
    school_subject_id: number
    term_id: number
    week: number
    order: number
    topic: string
    topic_desc: string | null
    students_question_to_answer: JsonValue | null
    note: string
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SchoolNoteCountAggregateOutputType | null
    _avg: SchoolNoteAvgAggregateOutputType | null
    _sum: SchoolNoteSumAggregateOutputType | null
    _min: SchoolNoteMinAggregateOutputType | null
    _max: SchoolNoteMaxAggregateOutputType | null
  }

  type GetSchoolNoteGroupByPayload<T extends SchoolNoteGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SchoolNoteGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SchoolNoteGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SchoolNoteGroupByOutputType[P]>
            : GetScalarType<T[P], SchoolNoteGroupByOutputType[P]>
        }
      >
    >


  export type SchoolNoteSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    class_template_id?: boolean
    school_subject_id?: boolean
    term_id?: boolean
    week?: boolean
    order?: boolean
    topic?: boolean
    topic_desc?: boolean
    students_question_to_answer?: boolean
    note?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["schoolNote"]>



  export type SchoolNoteSelectScalar = {
    id?: boolean
    school_id?: boolean
    branch_id?: boolean
    class_template_id?: boolean
    school_subject_id?: boolean
    term_id?: boolean
    week?: boolean
    order?: boolean
    topic?: boolean
    topic_desc?: boolean
    students_question_to_answer?: boolean
    note?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SchoolNoteOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "branch_id" | "class_template_id" | "school_subject_id" | "term_id" | "week" | "order" | "topic" | "topic_desc" | "students_question_to_answer" | "note" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["schoolNote"]>

  export type $SchoolNotePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SchoolNote"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      branch_id: number | null
      class_template_id: number
      school_subject_id: number
      term_id: number
      week: number
      order: number
      topic: string
      topic_desc: string | null
      students_question_to_answer: Prisma.JsonValue | null
      note: string
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["schoolNote"]>
    composites: {}
  }

  type SchoolNoteGetPayload<S extends boolean | null | undefined | SchoolNoteDefaultArgs> = $Result.GetResult<Prisma.$SchoolNotePayload, S>

  type SchoolNoteCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SchoolNoteFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SchoolNoteCountAggregateInputType | true
    }

  export interface SchoolNoteDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SchoolNote'], meta: { name: 'SchoolNote' } }
    /**
     * Find zero or one SchoolNote that matches the filter.
     * @param {SchoolNoteFindUniqueArgs} args - Arguments to find a SchoolNote
     * @example
     * // Get one SchoolNote
     * const schoolNote = await prisma.schoolNote.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SchoolNoteFindUniqueArgs>(args: SelectSubset<T, SchoolNoteFindUniqueArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SchoolNote that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SchoolNoteFindUniqueOrThrowArgs} args - Arguments to find a SchoolNote
     * @example
     * // Get one SchoolNote
     * const schoolNote = await prisma.schoolNote.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SchoolNoteFindUniqueOrThrowArgs>(args: SelectSubset<T, SchoolNoteFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolNote that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteFindFirstArgs} args - Arguments to find a SchoolNote
     * @example
     * // Get one SchoolNote
     * const schoolNote = await prisma.schoolNote.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SchoolNoteFindFirstArgs>(args?: SelectSubset<T, SchoolNoteFindFirstArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolNote that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteFindFirstOrThrowArgs} args - Arguments to find a SchoolNote
     * @example
     * // Get one SchoolNote
     * const schoolNote = await prisma.schoolNote.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SchoolNoteFindFirstOrThrowArgs>(args?: SelectSubset<T, SchoolNoteFindFirstOrThrowArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SchoolNotes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SchoolNotes
     * const schoolNotes = await prisma.schoolNote.findMany()
     * 
     * // Get first 10 SchoolNotes
     * const schoolNotes = await prisma.schoolNote.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const schoolNoteWithIdOnly = await prisma.schoolNote.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SchoolNoteFindManyArgs>(args?: SelectSubset<T, SchoolNoteFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SchoolNote.
     * @param {SchoolNoteCreateArgs} args - Arguments to create a SchoolNote.
     * @example
     * // Create one SchoolNote
     * const SchoolNote = await prisma.schoolNote.create({
     *   data: {
     *     // ... data to create a SchoolNote
     *   }
     * })
     * 
     */
    create<T extends SchoolNoteCreateArgs>(args: SelectSubset<T, SchoolNoteCreateArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SchoolNotes.
     * @param {SchoolNoteCreateManyArgs} args - Arguments to create many SchoolNotes.
     * @example
     * // Create many SchoolNotes
     * const schoolNote = await prisma.schoolNote.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SchoolNoteCreateManyArgs>(args?: SelectSubset<T, SchoolNoteCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SchoolNote.
     * @param {SchoolNoteDeleteArgs} args - Arguments to delete one SchoolNote.
     * @example
     * // Delete one SchoolNote
     * const SchoolNote = await prisma.schoolNote.delete({
     *   where: {
     *     // ... filter to delete one SchoolNote
     *   }
     * })
     * 
     */
    delete<T extends SchoolNoteDeleteArgs>(args: SelectSubset<T, SchoolNoteDeleteArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SchoolNote.
     * @param {SchoolNoteUpdateArgs} args - Arguments to update one SchoolNote.
     * @example
     * // Update one SchoolNote
     * const schoolNote = await prisma.schoolNote.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SchoolNoteUpdateArgs>(args: SelectSubset<T, SchoolNoteUpdateArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SchoolNotes.
     * @param {SchoolNoteDeleteManyArgs} args - Arguments to filter SchoolNotes to delete.
     * @example
     * // Delete a few SchoolNotes
     * const { count } = await prisma.schoolNote.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SchoolNoteDeleteManyArgs>(args?: SelectSubset<T, SchoolNoteDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SchoolNotes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SchoolNotes
     * const schoolNote = await prisma.schoolNote.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SchoolNoteUpdateManyArgs>(args: SelectSubset<T, SchoolNoteUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SchoolNote.
     * @param {SchoolNoteUpsertArgs} args - Arguments to update or create a SchoolNote.
     * @example
     * // Update or create a SchoolNote
     * const schoolNote = await prisma.schoolNote.upsert({
     *   create: {
     *     // ... data to create a SchoolNote
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SchoolNote we want to update
     *   }
     * })
     */
    upsert<T extends SchoolNoteUpsertArgs>(args: SelectSubset<T, SchoolNoteUpsertArgs<ExtArgs>>): Prisma__SchoolNoteClient<$Result.GetResult<Prisma.$SchoolNotePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SchoolNotes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteCountArgs} args - Arguments to filter SchoolNotes to count.
     * @example
     * // Count the number of SchoolNotes
     * const count = await prisma.schoolNote.count({
     *   where: {
     *     // ... the filter for the SchoolNotes we want to count
     *   }
     * })
    **/
    count<T extends SchoolNoteCountArgs>(
      args?: Subset<T, SchoolNoteCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SchoolNoteCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SchoolNote.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SchoolNoteAggregateArgs>(args: Subset<T, SchoolNoteAggregateArgs>): Prisma.PrismaPromise<GetSchoolNoteAggregateType<T>>

    /**
     * Group by SchoolNote.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolNoteGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SchoolNoteGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SchoolNoteGroupByArgs['orderBy'] }
        : { orderBy?: SchoolNoteGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SchoolNoteGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSchoolNoteGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SchoolNote model
   */
  readonly fields: SchoolNoteFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SchoolNote.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SchoolNoteClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SchoolNote model
   */
  interface SchoolNoteFieldRefs {
    readonly id: FieldRef<"SchoolNote", 'Int'>
    readonly school_id: FieldRef<"SchoolNote", 'Int'>
    readonly branch_id: FieldRef<"SchoolNote", 'Int'>
    readonly class_template_id: FieldRef<"SchoolNote", 'Int'>
    readonly school_subject_id: FieldRef<"SchoolNote", 'Int'>
    readonly term_id: FieldRef<"SchoolNote", 'Int'>
    readonly week: FieldRef<"SchoolNote", 'Int'>
    readonly order: FieldRef<"SchoolNote", 'Int'>
    readonly topic: FieldRef<"SchoolNote", 'String'>
    readonly topic_desc: FieldRef<"SchoolNote", 'String'>
    readonly students_question_to_answer: FieldRef<"SchoolNote", 'Json'>
    readonly note: FieldRef<"SchoolNote", 'String'>
    readonly created_by: FieldRef<"SchoolNote", 'Int'>
    readonly created_at: FieldRef<"SchoolNote", 'DateTime'>
    readonly updated_at: FieldRef<"SchoolNote", 'DateTime'>
    readonly deleted_at: FieldRef<"SchoolNote", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SchoolNote findUnique
   */
  export type SchoolNoteFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter, which SchoolNote to fetch.
     */
    where: SchoolNoteWhereUniqueInput
  }

  /**
   * SchoolNote findUniqueOrThrow
   */
  export type SchoolNoteFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter, which SchoolNote to fetch.
     */
    where: SchoolNoteWhereUniqueInput
  }

  /**
   * SchoolNote findFirst
   */
  export type SchoolNoteFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter, which SchoolNote to fetch.
     */
    where?: SchoolNoteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolNotes to fetch.
     */
    orderBy?: SchoolNoteOrderByWithRelationInput | SchoolNoteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolNotes.
     */
    cursor?: SchoolNoteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolNotes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolNotes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolNotes.
     */
    distinct?: SchoolNoteScalarFieldEnum | SchoolNoteScalarFieldEnum[]
  }

  /**
   * SchoolNote findFirstOrThrow
   */
  export type SchoolNoteFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter, which SchoolNote to fetch.
     */
    where?: SchoolNoteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolNotes to fetch.
     */
    orderBy?: SchoolNoteOrderByWithRelationInput | SchoolNoteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolNotes.
     */
    cursor?: SchoolNoteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolNotes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolNotes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolNotes.
     */
    distinct?: SchoolNoteScalarFieldEnum | SchoolNoteScalarFieldEnum[]
  }

  /**
   * SchoolNote findMany
   */
  export type SchoolNoteFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter, which SchoolNotes to fetch.
     */
    where?: SchoolNoteWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolNotes to fetch.
     */
    orderBy?: SchoolNoteOrderByWithRelationInput | SchoolNoteOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SchoolNotes.
     */
    cursor?: SchoolNoteWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolNotes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolNotes.
     */
    skip?: number
    distinct?: SchoolNoteScalarFieldEnum | SchoolNoteScalarFieldEnum[]
  }

  /**
   * SchoolNote create
   */
  export type SchoolNoteCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * The data needed to create a SchoolNote.
     */
    data: XOR<SchoolNoteCreateInput, SchoolNoteUncheckedCreateInput>
  }

  /**
   * SchoolNote createMany
   */
  export type SchoolNoteCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SchoolNotes.
     */
    data: SchoolNoteCreateManyInput | SchoolNoteCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SchoolNote update
   */
  export type SchoolNoteUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * The data needed to update a SchoolNote.
     */
    data: XOR<SchoolNoteUpdateInput, SchoolNoteUncheckedUpdateInput>
    /**
     * Choose, which SchoolNote to update.
     */
    where: SchoolNoteWhereUniqueInput
  }

  /**
   * SchoolNote updateMany
   */
  export type SchoolNoteUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SchoolNotes.
     */
    data: XOR<SchoolNoteUpdateManyMutationInput, SchoolNoteUncheckedUpdateManyInput>
    /**
     * Filter which SchoolNotes to update
     */
    where?: SchoolNoteWhereInput
    /**
     * Limit how many SchoolNotes to update.
     */
    limit?: number
  }

  /**
   * SchoolNote upsert
   */
  export type SchoolNoteUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * The filter to search for the SchoolNote to update in case it exists.
     */
    where: SchoolNoteWhereUniqueInput
    /**
     * In case the SchoolNote found by the `where` argument doesn't exist, create a new SchoolNote with this data.
     */
    create: XOR<SchoolNoteCreateInput, SchoolNoteUncheckedCreateInput>
    /**
     * In case the SchoolNote was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SchoolNoteUpdateInput, SchoolNoteUncheckedUpdateInput>
  }

  /**
   * SchoolNote delete
   */
  export type SchoolNoteDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
    /**
     * Filter which SchoolNote to delete.
     */
    where: SchoolNoteWhereUniqueInput
  }

  /**
   * SchoolNote deleteMany
   */
  export type SchoolNoteDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolNotes to delete
     */
    where?: SchoolNoteWhereInput
    /**
     * Limit how many SchoolNotes to delete.
     */
    limit?: number
  }

  /**
   * SchoolNote without action
   */
  export type SchoolNoteDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolNote
     */
    select?: SchoolNoteSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolNote
     */
    omit?: SchoolNoteOmit<ExtArgs> | null
  }


  /**
   * Model Fee
   */

  export type AggregateFee = {
    _count: FeeCountAggregateOutputType | null
    _avg: FeeAvgAggregateOutputType | null
    _sum: FeeSumAggregateOutputType | null
    _min: FeeMinAggregateOutputType | null
    _max: FeeMaxAggregateOutputType | null
  }

  export type FeeAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    price_template: Decimal | null
    created_by: number | null
  }

  export type FeeSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    price_template: Decimal | null
    created_by: number | null
  }

  export type FeeMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    fee_name: string | null
    price_template: Decimal | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type FeeMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    fee_name: string | null
    price_template: Decimal | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type FeeCountAggregateOutputType = {
    id: number
    branch_id: number
    fee_name: number
    price_template: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type FeeAvgAggregateInputType = {
    id?: true
    branch_id?: true
    price_template?: true
    created_by?: true
  }

  export type FeeSumAggregateInputType = {
    id?: true
    branch_id?: true
    price_template?: true
    created_by?: true
  }

  export type FeeMinAggregateInputType = {
    id?: true
    branch_id?: true
    fee_name?: true
    price_template?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type FeeMaxAggregateInputType = {
    id?: true
    branch_id?: true
    fee_name?: true
    price_template?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type FeeCountAggregateInputType = {
    id?: true
    branch_id?: true
    fee_name?: true
    price_template?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type FeeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Fee to aggregate.
     */
    where?: FeeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Fees to fetch.
     */
    orderBy?: FeeOrderByWithRelationInput | FeeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: FeeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Fees from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Fees.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Fees
    **/
    _count?: true | FeeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: FeeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: FeeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: FeeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: FeeMaxAggregateInputType
  }

  export type GetFeeAggregateType<T extends FeeAggregateArgs> = {
        [P in keyof T & keyof AggregateFee]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateFee[P]>
      : GetScalarType<T[P], AggregateFee[P]>
  }




  export type FeeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: FeeWhereInput
    orderBy?: FeeOrderByWithAggregationInput | FeeOrderByWithAggregationInput[]
    by: FeeScalarFieldEnum[] | FeeScalarFieldEnum
    having?: FeeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: FeeCountAggregateInputType | true
    _avg?: FeeAvgAggregateInputType
    _sum?: FeeSumAggregateInputType
    _min?: FeeMinAggregateInputType
    _max?: FeeMaxAggregateInputType
  }

  export type FeeGroupByOutputType = {
    id: number
    branch_id: number | null
    fee_name: string
    price_template: Decimal | null
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: FeeCountAggregateOutputType | null
    _avg: FeeAvgAggregateOutputType | null
    _sum: FeeSumAggregateOutputType | null
    _min: FeeMinAggregateOutputType | null
    _max: FeeMaxAggregateOutputType | null
  }

  type GetFeeGroupByPayload<T extends FeeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<FeeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof FeeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], FeeGroupByOutputType[P]>
            : GetScalarType<T[P], FeeGroupByOutputType[P]>
        }
      >
    >


  export type FeeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    fee_name?: boolean
    price_template?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["fee"]>



  export type FeeSelectScalar = {
    id?: boolean
    branch_id?: boolean
    fee_name?: boolean
    price_template?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type FeeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "fee_name" | "price_template" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["fee"]>

  export type $FeePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Fee"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number | null
      fee_name: string
      price_template: Prisma.Decimal | null
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["fee"]>
    composites: {}
  }

  type FeeGetPayload<S extends boolean | null | undefined | FeeDefaultArgs> = $Result.GetResult<Prisma.$FeePayload, S>

  type FeeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<FeeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: FeeCountAggregateInputType | true
    }

  export interface FeeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Fee'], meta: { name: 'Fee' } }
    /**
     * Find zero or one Fee that matches the filter.
     * @param {FeeFindUniqueArgs} args - Arguments to find a Fee
     * @example
     * // Get one Fee
     * const fee = await prisma.fee.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends FeeFindUniqueArgs>(args: SelectSubset<T, FeeFindUniqueArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Fee that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {FeeFindUniqueOrThrowArgs} args - Arguments to find a Fee
     * @example
     * // Get one Fee
     * const fee = await prisma.fee.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends FeeFindUniqueOrThrowArgs>(args: SelectSubset<T, FeeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Fee that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeFindFirstArgs} args - Arguments to find a Fee
     * @example
     * // Get one Fee
     * const fee = await prisma.fee.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends FeeFindFirstArgs>(args?: SelectSubset<T, FeeFindFirstArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Fee that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeFindFirstOrThrowArgs} args - Arguments to find a Fee
     * @example
     * // Get one Fee
     * const fee = await prisma.fee.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends FeeFindFirstOrThrowArgs>(args?: SelectSubset<T, FeeFindFirstOrThrowArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Fees that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Fees
     * const fees = await prisma.fee.findMany()
     * 
     * // Get first 10 Fees
     * const fees = await prisma.fee.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const feeWithIdOnly = await prisma.fee.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends FeeFindManyArgs>(args?: SelectSubset<T, FeeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Fee.
     * @param {FeeCreateArgs} args - Arguments to create a Fee.
     * @example
     * // Create one Fee
     * const Fee = await prisma.fee.create({
     *   data: {
     *     // ... data to create a Fee
     *   }
     * })
     * 
     */
    create<T extends FeeCreateArgs>(args: SelectSubset<T, FeeCreateArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Fees.
     * @param {FeeCreateManyArgs} args - Arguments to create many Fees.
     * @example
     * // Create many Fees
     * const fee = await prisma.fee.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends FeeCreateManyArgs>(args?: SelectSubset<T, FeeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Fee.
     * @param {FeeDeleteArgs} args - Arguments to delete one Fee.
     * @example
     * // Delete one Fee
     * const Fee = await prisma.fee.delete({
     *   where: {
     *     // ... filter to delete one Fee
     *   }
     * })
     * 
     */
    delete<T extends FeeDeleteArgs>(args: SelectSubset<T, FeeDeleteArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Fee.
     * @param {FeeUpdateArgs} args - Arguments to update one Fee.
     * @example
     * // Update one Fee
     * const fee = await prisma.fee.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends FeeUpdateArgs>(args: SelectSubset<T, FeeUpdateArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Fees.
     * @param {FeeDeleteManyArgs} args - Arguments to filter Fees to delete.
     * @example
     * // Delete a few Fees
     * const { count } = await prisma.fee.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends FeeDeleteManyArgs>(args?: SelectSubset<T, FeeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Fees.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Fees
     * const fee = await prisma.fee.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends FeeUpdateManyArgs>(args: SelectSubset<T, FeeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Fee.
     * @param {FeeUpsertArgs} args - Arguments to update or create a Fee.
     * @example
     * // Update or create a Fee
     * const fee = await prisma.fee.upsert({
     *   create: {
     *     // ... data to create a Fee
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Fee we want to update
     *   }
     * })
     */
    upsert<T extends FeeUpsertArgs>(args: SelectSubset<T, FeeUpsertArgs<ExtArgs>>): Prisma__FeeClient<$Result.GetResult<Prisma.$FeePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Fees.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeCountArgs} args - Arguments to filter Fees to count.
     * @example
     * // Count the number of Fees
     * const count = await prisma.fee.count({
     *   where: {
     *     // ... the filter for the Fees we want to count
     *   }
     * })
    **/
    count<T extends FeeCountArgs>(
      args?: Subset<T, FeeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], FeeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Fee.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends FeeAggregateArgs>(args: Subset<T, FeeAggregateArgs>): Prisma.PrismaPromise<GetFeeAggregateType<T>>

    /**
     * Group by Fee.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {FeeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends FeeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: FeeGroupByArgs['orderBy'] }
        : { orderBy?: FeeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, FeeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetFeeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Fee model
   */
  readonly fields: FeeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Fee.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__FeeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Fee model
   */
  interface FeeFieldRefs {
    readonly id: FieldRef<"Fee", 'Int'>
    readonly branch_id: FieldRef<"Fee", 'Int'>
    readonly fee_name: FieldRef<"Fee", 'String'>
    readonly price_template: FieldRef<"Fee", 'Decimal'>
    readonly desc: FieldRef<"Fee", 'String'>
    readonly created_by: FieldRef<"Fee", 'Int'>
    readonly created_at: FieldRef<"Fee", 'DateTime'>
    readonly updated_at: FieldRef<"Fee", 'DateTime'>
    readonly deleted_at: FieldRef<"Fee", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Fee findUnique
   */
  export type FeeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter, which Fee to fetch.
     */
    where: FeeWhereUniqueInput
  }

  /**
   * Fee findUniqueOrThrow
   */
  export type FeeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter, which Fee to fetch.
     */
    where: FeeWhereUniqueInput
  }

  /**
   * Fee findFirst
   */
  export type FeeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter, which Fee to fetch.
     */
    where?: FeeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Fees to fetch.
     */
    orderBy?: FeeOrderByWithRelationInput | FeeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Fees.
     */
    cursor?: FeeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Fees from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Fees.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Fees.
     */
    distinct?: FeeScalarFieldEnum | FeeScalarFieldEnum[]
  }

  /**
   * Fee findFirstOrThrow
   */
  export type FeeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter, which Fee to fetch.
     */
    where?: FeeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Fees to fetch.
     */
    orderBy?: FeeOrderByWithRelationInput | FeeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Fees.
     */
    cursor?: FeeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Fees from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Fees.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Fees.
     */
    distinct?: FeeScalarFieldEnum | FeeScalarFieldEnum[]
  }

  /**
   * Fee findMany
   */
  export type FeeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter, which Fees to fetch.
     */
    where?: FeeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Fees to fetch.
     */
    orderBy?: FeeOrderByWithRelationInput | FeeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Fees.
     */
    cursor?: FeeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Fees from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Fees.
     */
    skip?: number
    distinct?: FeeScalarFieldEnum | FeeScalarFieldEnum[]
  }

  /**
   * Fee create
   */
  export type FeeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * The data needed to create a Fee.
     */
    data: XOR<FeeCreateInput, FeeUncheckedCreateInput>
  }

  /**
   * Fee createMany
   */
  export type FeeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Fees.
     */
    data: FeeCreateManyInput | FeeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Fee update
   */
  export type FeeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * The data needed to update a Fee.
     */
    data: XOR<FeeUpdateInput, FeeUncheckedUpdateInput>
    /**
     * Choose, which Fee to update.
     */
    where: FeeWhereUniqueInput
  }

  /**
   * Fee updateMany
   */
  export type FeeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Fees.
     */
    data: XOR<FeeUpdateManyMutationInput, FeeUncheckedUpdateManyInput>
    /**
     * Filter which Fees to update
     */
    where?: FeeWhereInput
    /**
     * Limit how many Fees to update.
     */
    limit?: number
  }

  /**
   * Fee upsert
   */
  export type FeeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * The filter to search for the Fee to update in case it exists.
     */
    where: FeeWhereUniqueInput
    /**
     * In case the Fee found by the `where` argument doesn't exist, create a new Fee with this data.
     */
    create: XOR<FeeCreateInput, FeeUncheckedCreateInput>
    /**
     * In case the Fee was found with the provided `where` argument, update it with this data.
     */
    update: XOR<FeeUpdateInput, FeeUncheckedUpdateInput>
  }

  /**
   * Fee delete
   */
  export type FeeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
    /**
     * Filter which Fee to delete.
     */
    where: FeeWhereUniqueInput
  }

  /**
   * Fee deleteMany
   */
  export type FeeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Fees to delete
     */
    where?: FeeWhereInput
    /**
     * Limit how many Fees to delete.
     */
    limit?: number
  }

  /**
   * Fee without action
   */
  export type FeeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Fee
     */
    select?: FeeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Fee
     */
    omit?: FeeOmit<ExtArgs> | null
  }


  /**
   * Model PaymentType
   */

  export type AggregatePaymentType = {
    _count: PaymentTypeCountAggregateOutputType | null
    _avg: PaymentTypeAvgAggregateOutputType | null
    _sum: PaymentTypeSumAggregateOutputType | null
    _min: PaymentTypeMinAggregateOutputType | null
    _max: PaymentTypeMaxAggregateOutputType | null
  }

  export type PaymentTypeAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type PaymentTypeSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type PaymentTypeMinAggregateOutputType = {
    id: number | null
    payment_type_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentTypeMaxAggregateOutputType = {
    id: number | null
    payment_type_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentTypeCountAggregateOutputType = {
    id: number
    payment_type_name: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentTypeAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type PaymentTypeSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type PaymentTypeMinAggregateInputType = {
    id?: true
    payment_type_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentTypeMaxAggregateInputType = {
    id?: true
    payment_type_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentTypeCountAggregateInputType = {
    id?: true
    payment_type_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentType to aggregate.
     */
    where?: PaymentTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentTypes to fetch.
     */
    orderBy?: PaymentTypeOrderByWithRelationInput | PaymentTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned PaymentTypes
    **/
    _count?: true | PaymentTypeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentTypeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentTypeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentTypeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentTypeMaxAggregateInputType
  }

  export type GetPaymentTypeAggregateType<T extends PaymentTypeAggregateArgs> = {
        [P in keyof T & keyof AggregatePaymentType]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePaymentType[P]>
      : GetScalarType<T[P], AggregatePaymentType[P]>
  }




  export type PaymentTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentTypeWhereInput
    orderBy?: PaymentTypeOrderByWithAggregationInput | PaymentTypeOrderByWithAggregationInput[]
    by: PaymentTypeScalarFieldEnum[] | PaymentTypeScalarFieldEnum
    having?: PaymentTypeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentTypeCountAggregateInputType | true
    _avg?: PaymentTypeAvgAggregateInputType
    _sum?: PaymentTypeSumAggregateInputType
    _min?: PaymentTypeMinAggregateInputType
    _max?: PaymentTypeMaxAggregateInputType
  }

  export type PaymentTypeGroupByOutputType = {
    id: number
    payment_type_name: string
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentTypeCountAggregateOutputType | null
    _avg: PaymentTypeAvgAggregateOutputType | null
    _sum: PaymentTypeSumAggregateOutputType | null
    _min: PaymentTypeMinAggregateOutputType | null
    _max: PaymentTypeMaxAggregateOutputType | null
  }

  type GetPaymentTypeGroupByPayload<T extends PaymentTypeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentTypeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentTypeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentTypeGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentTypeGroupByOutputType[P]>
        }
      >
    >


  export type PaymentTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    payment_type_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["paymentType"]>



  export type PaymentTypeSelectScalar = {
    id?: boolean
    payment_type_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "payment_type_name" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["paymentType"]>

  export type $PaymentTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "PaymentType"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      payment_type_name: string
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["paymentType"]>
    composites: {}
  }

  type PaymentTypeGetPayload<S extends boolean | null | undefined | PaymentTypeDefaultArgs> = $Result.GetResult<Prisma.$PaymentTypePayload, S>

  type PaymentTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentTypeCountAggregateInputType | true
    }

  export interface PaymentTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['PaymentType'], meta: { name: 'PaymentType' } }
    /**
     * Find zero or one PaymentType that matches the filter.
     * @param {PaymentTypeFindUniqueArgs} args - Arguments to find a PaymentType
     * @example
     * // Get one PaymentType
     * const paymentType = await prisma.paymentType.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentTypeFindUniqueArgs>(args: SelectSubset<T, PaymentTypeFindUniqueArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one PaymentType that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentTypeFindUniqueOrThrowArgs} args - Arguments to find a PaymentType
     * @example
     * // Get one PaymentType
     * const paymentType = await prisma.paymentType.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentTypeFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentTypeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentType that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeFindFirstArgs} args - Arguments to find a PaymentType
     * @example
     * // Get one PaymentType
     * const paymentType = await prisma.paymentType.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentTypeFindFirstArgs>(args?: SelectSubset<T, PaymentTypeFindFirstArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentType that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeFindFirstOrThrowArgs} args - Arguments to find a PaymentType
     * @example
     * // Get one PaymentType
     * const paymentType = await prisma.paymentType.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentTypeFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentTypeFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more PaymentTypes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all PaymentTypes
     * const paymentTypes = await prisma.paymentType.findMany()
     * 
     * // Get first 10 PaymentTypes
     * const paymentTypes = await prisma.paymentType.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentTypeWithIdOnly = await prisma.paymentType.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentTypeFindManyArgs>(args?: SelectSubset<T, PaymentTypeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a PaymentType.
     * @param {PaymentTypeCreateArgs} args - Arguments to create a PaymentType.
     * @example
     * // Create one PaymentType
     * const PaymentType = await prisma.paymentType.create({
     *   data: {
     *     // ... data to create a PaymentType
     *   }
     * })
     * 
     */
    create<T extends PaymentTypeCreateArgs>(args: SelectSubset<T, PaymentTypeCreateArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many PaymentTypes.
     * @param {PaymentTypeCreateManyArgs} args - Arguments to create many PaymentTypes.
     * @example
     * // Create many PaymentTypes
     * const paymentType = await prisma.paymentType.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentTypeCreateManyArgs>(args?: SelectSubset<T, PaymentTypeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a PaymentType.
     * @param {PaymentTypeDeleteArgs} args - Arguments to delete one PaymentType.
     * @example
     * // Delete one PaymentType
     * const PaymentType = await prisma.paymentType.delete({
     *   where: {
     *     // ... filter to delete one PaymentType
     *   }
     * })
     * 
     */
    delete<T extends PaymentTypeDeleteArgs>(args: SelectSubset<T, PaymentTypeDeleteArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one PaymentType.
     * @param {PaymentTypeUpdateArgs} args - Arguments to update one PaymentType.
     * @example
     * // Update one PaymentType
     * const paymentType = await prisma.paymentType.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentTypeUpdateArgs>(args: SelectSubset<T, PaymentTypeUpdateArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more PaymentTypes.
     * @param {PaymentTypeDeleteManyArgs} args - Arguments to filter PaymentTypes to delete.
     * @example
     * // Delete a few PaymentTypes
     * const { count } = await prisma.paymentType.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentTypeDeleteManyArgs>(args?: SelectSubset<T, PaymentTypeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more PaymentTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many PaymentTypes
     * const paymentType = await prisma.paymentType.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentTypeUpdateManyArgs>(args: SelectSubset<T, PaymentTypeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one PaymentType.
     * @param {PaymentTypeUpsertArgs} args - Arguments to update or create a PaymentType.
     * @example
     * // Update or create a PaymentType
     * const paymentType = await prisma.paymentType.upsert({
     *   create: {
     *     // ... data to create a PaymentType
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the PaymentType we want to update
     *   }
     * })
     */
    upsert<T extends PaymentTypeUpsertArgs>(args: SelectSubset<T, PaymentTypeUpsertArgs<ExtArgs>>): Prisma__PaymentTypeClient<$Result.GetResult<Prisma.$PaymentTypePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of PaymentTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeCountArgs} args - Arguments to filter PaymentTypes to count.
     * @example
     * // Count the number of PaymentTypes
     * const count = await prisma.paymentType.count({
     *   where: {
     *     // ... the filter for the PaymentTypes we want to count
     *   }
     * })
    **/
    count<T extends PaymentTypeCountArgs>(
      args?: Subset<T, PaymentTypeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentTypeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a PaymentType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentTypeAggregateArgs>(args: Subset<T, PaymentTypeAggregateArgs>): Prisma.PrismaPromise<GetPaymentTypeAggregateType<T>>

    /**
     * Group by PaymentType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentTypeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentTypeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentTypeGroupByArgs['orderBy'] }
        : { orderBy?: PaymentTypeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the PaymentType model
   */
  readonly fields: PaymentTypeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for PaymentType.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the PaymentType model
   */
  interface PaymentTypeFieldRefs {
    readonly id: FieldRef<"PaymentType", 'Int'>
    readonly payment_type_name: FieldRef<"PaymentType", 'String'>
    readonly desc: FieldRef<"PaymentType", 'String'>
    readonly created_by: FieldRef<"PaymentType", 'Int'>
    readonly created_at: FieldRef<"PaymentType", 'DateTime'>
    readonly updated_at: FieldRef<"PaymentType", 'DateTime'>
    readonly deleted_at: FieldRef<"PaymentType", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * PaymentType findUnique
   */
  export type PaymentTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentType to fetch.
     */
    where: PaymentTypeWhereUniqueInput
  }

  /**
   * PaymentType findUniqueOrThrow
   */
  export type PaymentTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentType to fetch.
     */
    where: PaymentTypeWhereUniqueInput
  }

  /**
   * PaymentType findFirst
   */
  export type PaymentTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentType to fetch.
     */
    where?: PaymentTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentTypes to fetch.
     */
    orderBy?: PaymentTypeOrderByWithRelationInput | PaymentTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentTypes.
     */
    cursor?: PaymentTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentTypes.
     */
    distinct?: PaymentTypeScalarFieldEnum | PaymentTypeScalarFieldEnum[]
  }

  /**
   * PaymentType findFirstOrThrow
   */
  export type PaymentTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentType to fetch.
     */
    where?: PaymentTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentTypes to fetch.
     */
    orderBy?: PaymentTypeOrderByWithRelationInput | PaymentTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentTypes.
     */
    cursor?: PaymentTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentTypes.
     */
    distinct?: PaymentTypeScalarFieldEnum | PaymentTypeScalarFieldEnum[]
  }

  /**
   * PaymentType findMany
   */
  export type PaymentTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentTypes to fetch.
     */
    where?: PaymentTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentTypes to fetch.
     */
    orderBy?: PaymentTypeOrderByWithRelationInput | PaymentTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing PaymentTypes.
     */
    cursor?: PaymentTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentTypes.
     */
    skip?: number
    distinct?: PaymentTypeScalarFieldEnum | PaymentTypeScalarFieldEnum[]
  }

  /**
   * PaymentType create
   */
  export type PaymentTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * The data needed to create a PaymentType.
     */
    data: XOR<PaymentTypeCreateInput, PaymentTypeUncheckedCreateInput>
  }

  /**
   * PaymentType createMany
   */
  export type PaymentTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many PaymentTypes.
     */
    data: PaymentTypeCreateManyInput | PaymentTypeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * PaymentType update
   */
  export type PaymentTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * The data needed to update a PaymentType.
     */
    data: XOR<PaymentTypeUpdateInput, PaymentTypeUncheckedUpdateInput>
    /**
     * Choose, which PaymentType to update.
     */
    where: PaymentTypeWhereUniqueInput
  }

  /**
   * PaymentType updateMany
   */
  export type PaymentTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update PaymentTypes.
     */
    data: XOR<PaymentTypeUpdateManyMutationInput, PaymentTypeUncheckedUpdateManyInput>
    /**
     * Filter which PaymentTypes to update
     */
    where?: PaymentTypeWhereInput
    /**
     * Limit how many PaymentTypes to update.
     */
    limit?: number
  }

  /**
   * PaymentType upsert
   */
  export type PaymentTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * The filter to search for the PaymentType to update in case it exists.
     */
    where: PaymentTypeWhereUniqueInput
    /**
     * In case the PaymentType found by the `where` argument doesn't exist, create a new PaymentType with this data.
     */
    create: XOR<PaymentTypeCreateInput, PaymentTypeUncheckedCreateInput>
    /**
     * In case the PaymentType was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentTypeUpdateInput, PaymentTypeUncheckedUpdateInput>
  }

  /**
   * PaymentType delete
   */
  export type PaymentTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
    /**
     * Filter which PaymentType to delete.
     */
    where: PaymentTypeWhereUniqueInput
  }

  /**
   * PaymentType deleteMany
   */
  export type PaymentTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentTypes to delete
     */
    where?: PaymentTypeWhereInput
    /**
     * Limit how many PaymentTypes to delete.
     */
    limit?: number
  }

  /**
   * PaymentType without action
   */
  export type PaymentTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentType
     */
    select?: PaymentTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentType
     */
    omit?: PaymentTypeOmit<ExtArgs> | null
  }


  /**
   * Model PaymentDuration
   */

  export type AggregatePaymentDuration = {
    _count: PaymentDurationCountAggregateOutputType | null
    _avg: PaymentDurationAvgAggregateOutputType | null
    _sum: PaymentDurationSumAggregateOutputType | null
    _min: PaymentDurationMinAggregateOutputType | null
    _max: PaymentDurationMaxAggregateOutputType | null
  }

  export type PaymentDurationAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type PaymentDurationSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type PaymentDurationMinAggregateOutputType = {
    id: number | null
    duration: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentDurationMaxAggregateOutputType = {
    id: number | null
    duration: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentDurationCountAggregateOutputType = {
    id: number
    duration: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentDurationAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type PaymentDurationSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type PaymentDurationMinAggregateInputType = {
    id?: true
    duration?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentDurationMaxAggregateInputType = {
    id?: true
    duration?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentDurationCountAggregateInputType = {
    id?: true
    duration?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentDurationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentDuration to aggregate.
     */
    where?: PaymentDurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentDurations to fetch.
     */
    orderBy?: PaymentDurationOrderByWithRelationInput | PaymentDurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentDurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentDurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentDurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned PaymentDurations
    **/
    _count?: true | PaymentDurationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentDurationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentDurationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentDurationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentDurationMaxAggregateInputType
  }

  export type GetPaymentDurationAggregateType<T extends PaymentDurationAggregateArgs> = {
        [P in keyof T & keyof AggregatePaymentDuration]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePaymentDuration[P]>
      : GetScalarType<T[P], AggregatePaymentDuration[P]>
  }




  export type PaymentDurationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentDurationWhereInput
    orderBy?: PaymentDurationOrderByWithAggregationInput | PaymentDurationOrderByWithAggregationInput[]
    by: PaymentDurationScalarFieldEnum[] | PaymentDurationScalarFieldEnum
    having?: PaymentDurationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentDurationCountAggregateInputType | true
    _avg?: PaymentDurationAvgAggregateInputType
    _sum?: PaymentDurationSumAggregateInputType
    _min?: PaymentDurationMinAggregateInputType
    _max?: PaymentDurationMaxAggregateInputType
  }

  export type PaymentDurationGroupByOutputType = {
    id: number
    duration: string
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentDurationCountAggregateOutputType | null
    _avg: PaymentDurationAvgAggregateOutputType | null
    _sum: PaymentDurationSumAggregateOutputType | null
    _min: PaymentDurationMinAggregateOutputType | null
    _max: PaymentDurationMaxAggregateOutputType | null
  }

  type GetPaymentDurationGroupByPayload<T extends PaymentDurationGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentDurationGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentDurationGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentDurationGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentDurationGroupByOutputType[P]>
        }
      >
    >


  export type PaymentDurationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    duration?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["paymentDuration"]>



  export type PaymentDurationSelectScalar = {
    id?: boolean
    duration?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentDurationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "duration" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["paymentDuration"]>

  export type $PaymentDurationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "PaymentDuration"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      duration: string
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["paymentDuration"]>
    composites: {}
  }

  type PaymentDurationGetPayload<S extends boolean | null | undefined | PaymentDurationDefaultArgs> = $Result.GetResult<Prisma.$PaymentDurationPayload, S>

  type PaymentDurationCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentDurationFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentDurationCountAggregateInputType | true
    }

  export interface PaymentDurationDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['PaymentDuration'], meta: { name: 'PaymentDuration' } }
    /**
     * Find zero or one PaymentDuration that matches the filter.
     * @param {PaymentDurationFindUniqueArgs} args - Arguments to find a PaymentDuration
     * @example
     * // Get one PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentDurationFindUniqueArgs>(args: SelectSubset<T, PaymentDurationFindUniqueArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one PaymentDuration that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentDurationFindUniqueOrThrowArgs} args - Arguments to find a PaymentDuration
     * @example
     * // Get one PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentDurationFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentDurationFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentDuration that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationFindFirstArgs} args - Arguments to find a PaymentDuration
     * @example
     * // Get one PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentDurationFindFirstArgs>(args?: SelectSubset<T, PaymentDurationFindFirstArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentDuration that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationFindFirstOrThrowArgs} args - Arguments to find a PaymentDuration
     * @example
     * // Get one PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentDurationFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentDurationFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more PaymentDurations that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all PaymentDurations
     * const paymentDurations = await prisma.paymentDuration.findMany()
     * 
     * // Get first 10 PaymentDurations
     * const paymentDurations = await prisma.paymentDuration.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentDurationWithIdOnly = await prisma.paymentDuration.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentDurationFindManyArgs>(args?: SelectSubset<T, PaymentDurationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a PaymentDuration.
     * @param {PaymentDurationCreateArgs} args - Arguments to create a PaymentDuration.
     * @example
     * // Create one PaymentDuration
     * const PaymentDuration = await prisma.paymentDuration.create({
     *   data: {
     *     // ... data to create a PaymentDuration
     *   }
     * })
     * 
     */
    create<T extends PaymentDurationCreateArgs>(args: SelectSubset<T, PaymentDurationCreateArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many PaymentDurations.
     * @param {PaymentDurationCreateManyArgs} args - Arguments to create many PaymentDurations.
     * @example
     * // Create many PaymentDurations
     * const paymentDuration = await prisma.paymentDuration.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentDurationCreateManyArgs>(args?: SelectSubset<T, PaymentDurationCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a PaymentDuration.
     * @param {PaymentDurationDeleteArgs} args - Arguments to delete one PaymentDuration.
     * @example
     * // Delete one PaymentDuration
     * const PaymentDuration = await prisma.paymentDuration.delete({
     *   where: {
     *     // ... filter to delete one PaymentDuration
     *   }
     * })
     * 
     */
    delete<T extends PaymentDurationDeleteArgs>(args: SelectSubset<T, PaymentDurationDeleteArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one PaymentDuration.
     * @param {PaymentDurationUpdateArgs} args - Arguments to update one PaymentDuration.
     * @example
     * // Update one PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentDurationUpdateArgs>(args: SelectSubset<T, PaymentDurationUpdateArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more PaymentDurations.
     * @param {PaymentDurationDeleteManyArgs} args - Arguments to filter PaymentDurations to delete.
     * @example
     * // Delete a few PaymentDurations
     * const { count } = await prisma.paymentDuration.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentDurationDeleteManyArgs>(args?: SelectSubset<T, PaymentDurationDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more PaymentDurations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many PaymentDurations
     * const paymentDuration = await prisma.paymentDuration.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentDurationUpdateManyArgs>(args: SelectSubset<T, PaymentDurationUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one PaymentDuration.
     * @param {PaymentDurationUpsertArgs} args - Arguments to update or create a PaymentDuration.
     * @example
     * // Update or create a PaymentDuration
     * const paymentDuration = await prisma.paymentDuration.upsert({
     *   create: {
     *     // ... data to create a PaymentDuration
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the PaymentDuration we want to update
     *   }
     * })
     */
    upsert<T extends PaymentDurationUpsertArgs>(args: SelectSubset<T, PaymentDurationUpsertArgs<ExtArgs>>): Prisma__PaymentDurationClient<$Result.GetResult<Prisma.$PaymentDurationPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of PaymentDurations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationCountArgs} args - Arguments to filter PaymentDurations to count.
     * @example
     * // Count the number of PaymentDurations
     * const count = await prisma.paymentDuration.count({
     *   where: {
     *     // ... the filter for the PaymentDurations we want to count
     *   }
     * })
    **/
    count<T extends PaymentDurationCountArgs>(
      args?: Subset<T, PaymentDurationCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentDurationCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a PaymentDuration.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentDurationAggregateArgs>(args: Subset<T, PaymentDurationAggregateArgs>): Prisma.PrismaPromise<GetPaymentDurationAggregateType<T>>

    /**
     * Group by PaymentDuration.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentDurationGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentDurationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentDurationGroupByArgs['orderBy'] }
        : { orderBy?: PaymentDurationGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentDurationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentDurationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the PaymentDuration model
   */
  readonly fields: PaymentDurationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for PaymentDuration.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentDurationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the PaymentDuration model
   */
  interface PaymentDurationFieldRefs {
    readonly id: FieldRef<"PaymentDuration", 'Int'>
    readonly duration: FieldRef<"PaymentDuration", 'String'>
    readonly desc: FieldRef<"PaymentDuration", 'String'>
    readonly created_by: FieldRef<"PaymentDuration", 'Int'>
    readonly created_at: FieldRef<"PaymentDuration", 'DateTime'>
    readonly updated_at: FieldRef<"PaymentDuration", 'DateTime'>
    readonly deleted_at: FieldRef<"PaymentDuration", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * PaymentDuration findUnique
   */
  export type PaymentDurationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter, which PaymentDuration to fetch.
     */
    where: PaymentDurationWhereUniqueInput
  }

  /**
   * PaymentDuration findUniqueOrThrow
   */
  export type PaymentDurationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter, which PaymentDuration to fetch.
     */
    where: PaymentDurationWhereUniqueInput
  }

  /**
   * PaymentDuration findFirst
   */
  export type PaymentDurationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter, which PaymentDuration to fetch.
     */
    where?: PaymentDurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentDurations to fetch.
     */
    orderBy?: PaymentDurationOrderByWithRelationInput | PaymentDurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentDurations.
     */
    cursor?: PaymentDurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentDurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentDurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentDurations.
     */
    distinct?: PaymentDurationScalarFieldEnum | PaymentDurationScalarFieldEnum[]
  }

  /**
   * PaymentDuration findFirstOrThrow
   */
  export type PaymentDurationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter, which PaymentDuration to fetch.
     */
    where?: PaymentDurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentDurations to fetch.
     */
    orderBy?: PaymentDurationOrderByWithRelationInput | PaymentDurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentDurations.
     */
    cursor?: PaymentDurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentDurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentDurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentDurations.
     */
    distinct?: PaymentDurationScalarFieldEnum | PaymentDurationScalarFieldEnum[]
  }

  /**
   * PaymentDuration findMany
   */
  export type PaymentDurationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter, which PaymentDurations to fetch.
     */
    where?: PaymentDurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentDurations to fetch.
     */
    orderBy?: PaymentDurationOrderByWithRelationInput | PaymentDurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing PaymentDurations.
     */
    cursor?: PaymentDurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentDurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentDurations.
     */
    skip?: number
    distinct?: PaymentDurationScalarFieldEnum | PaymentDurationScalarFieldEnum[]
  }

  /**
   * PaymentDuration create
   */
  export type PaymentDurationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * The data needed to create a PaymentDuration.
     */
    data: XOR<PaymentDurationCreateInput, PaymentDurationUncheckedCreateInput>
  }

  /**
   * PaymentDuration createMany
   */
  export type PaymentDurationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many PaymentDurations.
     */
    data: PaymentDurationCreateManyInput | PaymentDurationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * PaymentDuration update
   */
  export type PaymentDurationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * The data needed to update a PaymentDuration.
     */
    data: XOR<PaymentDurationUpdateInput, PaymentDurationUncheckedUpdateInput>
    /**
     * Choose, which PaymentDuration to update.
     */
    where: PaymentDurationWhereUniqueInput
  }

  /**
   * PaymentDuration updateMany
   */
  export type PaymentDurationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update PaymentDurations.
     */
    data: XOR<PaymentDurationUpdateManyMutationInput, PaymentDurationUncheckedUpdateManyInput>
    /**
     * Filter which PaymentDurations to update
     */
    where?: PaymentDurationWhereInput
    /**
     * Limit how many PaymentDurations to update.
     */
    limit?: number
  }

  /**
   * PaymentDuration upsert
   */
  export type PaymentDurationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * The filter to search for the PaymentDuration to update in case it exists.
     */
    where: PaymentDurationWhereUniqueInput
    /**
     * In case the PaymentDuration found by the `where` argument doesn't exist, create a new PaymentDuration with this data.
     */
    create: XOR<PaymentDurationCreateInput, PaymentDurationUncheckedCreateInput>
    /**
     * In case the PaymentDuration was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentDurationUpdateInput, PaymentDurationUncheckedUpdateInput>
  }

  /**
   * PaymentDuration delete
   */
  export type PaymentDurationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
    /**
     * Filter which PaymentDuration to delete.
     */
    where: PaymentDurationWhereUniqueInput
  }

  /**
   * PaymentDuration deleteMany
   */
  export type PaymentDurationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentDurations to delete
     */
    where?: PaymentDurationWhereInput
    /**
     * Limit how many PaymentDurations to delete.
     */
    limit?: number
  }

  /**
   * PaymentDuration without action
   */
  export type PaymentDurationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentDuration
     */
    select?: PaymentDurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentDuration
     */
    omit?: PaymentDurationOmit<ExtArgs> | null
  }


  /**
   * Model Payment
   */

  export type AggregatePayment = {
    _count: PaymentCountAggregateOutputType | null
    _avg: PaymentAvgAggregateOutputType | null
    _sum: PaymentSumAggregateOutputType | null
    _min: PaymentMinAggregateOutputType | null
    _max: PaymentMaxAggregateOutputType | null
  }

  export type PaymentAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    specialization_id: number | null
    fee_id: number | null
    payment_duration_id: number | null
    payment_amount: Decimal | null
    is_compulsory: number | null
    created_by: number | null
  }

  export type PaymentSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    specialization_id: number | null
    fee_id: number | null
    payment_duration_id: number | null
    payment_amount: Decimal | null
    is_compulsory: number | null
    created_by: number | null
  }

  export type PaymentMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    specialization_id: number | null
    who_would_pay: string | null
    fee_id: number | null
    payment_duration_id: number | null
    payment_amount: Decimal | null
    start_date: Date | null
    end_date: Date | null
    due_date: Date | null
    is_compulsory: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    session_class_id: number | null
    specialization_id: number | null
    who_would_pay: string | null
    fee_id: number | null
    payment_duration_id: number | null
    payment_amount: Decimal | null
    start_date: Date | null
    end_date: Date | null
    due_date: Date | null
    is_compulsory: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentCountAggregateOutputType = {
    id: number
    branch_id: number
    session_class_id: number
    specialization_id: number
    who_would_pay: number
    fee_id: number
    payment_duration_id: number
    payment_amount: number
    start_date: number
    end_date: number
    due_date: number
    is_compulsory: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentAvgAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    specialization_id?: true
    fee_id?: true
    payment_duration_id?: true
    payment_amount?: true
    is_compulsory?: true
    created_by?: true
  }

  export type PaymentSumAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    specialization_id?: true
    fee_id?: true
    payment_duration_id?: true
    payment_amount?: true
    is_compulsory?: true
    created_by?: true
  }

  export type PaymentMinAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    specialization_id?: true
    who_would_pay?: true
    fee_id?: true
    payment_duration_id?: true
    payment_amount?: true
    start_date?: true
    end_date?: true
    due_date?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentMaxAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    specialization_id?: true
    who_would_pay?: true
    fee_id?: true
    payment_duration_id?: true
    payment_amount?: true
    start_date?: true
    end_date?: true
    due_date?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentCountAggregateInputType = {
    id?: true
    branch_id?: true
    session_class_id?: true
    specialization_id?: true
    who_would_pay?: true
    fee_id?: true
    payment_duration_id?: true
    payment_amount?: true
    start_date?: true
    end_date?: true
    due_date?: true
    is_compulsory?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Payment to aggregate.
     */
    where?: PaymentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Payments to fetch.
     */
    orderBy?: PaymentOrderByWithRelationInput | PaymentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Payments from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Payments.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Payments
    **/
    _count?: true | PaymentCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentMaxAggregateInputType
  }

  export type GetPaymentAggregateType<T extends PaymentAggregateArgs> = {
        [P in keyof T & keyof AggregatePayment]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePayment[P]>
      : GetScalarType<T[P], AggregatePayment[P]>
  }




  export type PaymentGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentWhereInput
    orderBy?: PaymentOrderByWithAggregationInput | PaymentOrderByWithAggregationInput[]
    by: PaymentScalarFieldEnum[] | PaymentScalarFieldEnum
    having?: PaymentScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentCountAggregateInputType | true
    _avg?: PaymentAvgAggregateInputType
    _sum?: PaymentSumAggregateInputType
    _min?: PaymentMinAggregateInputType
    _max?: PaymentMaxAggregateInputType
  }

  export type PaymentGroupByOutputType = {
    id: number
    branch_id: number
    session_class_id: number | null
    specialization_id: number | null
    who_would_pay: string | null
    fee_id: number
    payment_duration_id: number
    payment_amount: Decimal | null
    start_date: Date | null
    end_date: Date | null
    due_date: Date | null
    is_compulsory: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentCountAggregateOutputType | null
    _avg: PaymentAvgAggregateOutputType | null
    _sum: PaymentSumAggregateOutputType | null
    _min: PaymentMinAggregateOutputType | null
    _max: PaymentMaxAggregateOutputType | null
  }

  type GetPaymentGroupByPayload<T extends PaymentGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentGroupByOutputType[P]>
        }
      >
    >


  export type PaymentSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    who_would_pay?: boolean
    fee_id?: boolean
    payment_duration_id?: boolean
    payment_amount?: boolean
    start_date?: boolean
    end_date?: boolean
    due_date?: boolean
    is_compulsory?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["payment"]>



  export type PaymentSelectScalar = {
    id?: boolean
    branch_id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    who_would_pay?: boolean
    fee_id?: boolean
    payment_duration_id?: boolean
    payment_amount?: boolean
    start_date?: boolean
    end_date?: boolean
    due_date?: boolean
    is_compulsory?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "session_class_id" | "specialization_id" | "who_would_pay" | "fee_id" | "payment_duration_id" | "payment_amount" | "start_date" | "end_date" | "due_date" | "is_compulsory" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["payment"]>

  export type $PaymentPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Payment"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      session_class_id: number | null
      specialization_id: number | null
      who_would_pay: string | null
      fee_id: number
      payment_duration_id: number
      payment_amount: Prisma.Decimal | null
      start_date: Date | null
      end_date: Date | null
      due_date: Date | null
      is_compulsory: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["payment"]>
    composites: {}
  }

  type PaymentGetPayload<S extends boolean | null | undefined | PaymentDefaultArgs> = $Result.GetResult<Prisma.$PaymentPayload, S>

  type PaymentCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentCountAggregateInputType | true
    }

  export interface PaymentDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Payment'], meta: { name: 'Payment' } }
    /**
     * Find zero or one Payment that matches the filter.
     * @param {PaymentFindUniqueArgs} args - Arguments to find a Payment
     * @example
     * // Get one Payment
     * const payment = await prisma.payment.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentFindUniqueArgs>(args: SelectSubset<T, PaymentFindUniqueArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Payment that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentFindUniqueOrThrowArgs} args - Arguments to find a Payment
     * @example
     * // Get one Payment
     * const payment = await prisma.payment.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Payment that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentFindFirstArgs} args - Arguments to find a Payment
     * @example
     * // Get one Payment
     * const payment = await prisma.payment.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentFindFirstArgs>(args?: SelectSubset<T, PaymentFindFirstArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Payment that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentFindFirstOrThrowArgs} args - Arguments to find a Payment
     * @example
     * // Get one Payment
     * const payment = await prisma.payment.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Payments that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Payments
     * const payments = await prisma.payment.findMany()
     * 
     * // Get first 10 Payments
     * const payments = await prisma.payment.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentWithIdOnly = await prisma.payment.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentFindManyArgs>(args?: SelectSubset<T, PaymentFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Payment.
     * @param {PaymentCreateArgs} args - Arguments to create a Payment.
     * @example
     * // Create one Payment
     * const Payment = await prisma.payment.create({
     *   data: {
     *     // ... data to create a Payment
     *   }
     * })
     * 
     */
    create<T extends PaymentCreateArgs>(args: SelectSubset<T, PaymentCreateArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Payments.
     * @param {PaymentCreateManyArgs} args - Arguments to create many Payments.
     * @example
     * // Create many Payments
     * const payment = await prisma.payment.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentCreateManyArgs>(args?: SelectSubset<T, PaymentCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Payment.
     * @param {PaymentDeleteArgs} args - Arguments to delete one Payment.
     * @example
     * // Delete one Payment
     * const Payment = await prisma.payment.delete({
     *   where: {
     *     // ... filter to delete one Payment
     *   }
     * })
     * 
     */
    delete<T extends PaymentDeleteArgs>(args: SelectSubset<T, PaymentDeleteArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Payment.
     * @param {PaymentUpdateArgs} args - Arguments to update one Payment.
     * @example
     * // Update one Payment
     * const payment = await prisma.payment.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentUpdateArgs>(args: SelectSubset<T, PaymentUpdateArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Payments.
     * @param {PaymentDeleteManyArgs} args - Arguments to filter Payments to delete.
     * @example
     * // Delete a few Payments
     * const { count } = await prisma.payment.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentDeleteManyArgs>(args?: SelectSubset<T, PaymentDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Payments.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Payments
     * const payment = await prisma.payment.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentUpdateManyArgs>(args: SelectSubset<T, PaymentUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Payment.
     * @param {PaymentUpsertArgs} args - Arguments to update or create a Payment.
     * @example
     * // Update or create a Payment
     * const payment = await prisma.payment.upsert({
     *   create: {
     *     // ... data to create a Payment
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Payment we want to update
     *   }
     * })
     */
    upsert<T extends PaymentUpsertArgs>(args: SelectSubset<T, PaymentUpsertArgs<ExtArgs>>): Prisma__PaymentClient<$Result.GetResult<Prisma.$PaymentPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Payments.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentCountArgs} args - Arguments to filter Payments to count.
     * @example
     * // Count the number of Payments
     * const count = await prisma.payment.count({
     *   where: {
     *     // ... the filter for the Payments we want to count
     *   }
     * })
    **/
    count<T extends PaymentCountArgs>(
      args?: Subset<T, PaymentCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Payment.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentAggregateArgs>(args: Subset<T, PaymentAggregateArgs>): Prisma.PrismaPromise<GetPaymentAggregateType<T>>

    /**
     * Group by Payment.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentGroupByArgs['orderBy'] }
        : { orderBy?: PaymentGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Payment model
   */
  readonly fields: PaymentFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Payment.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Payment model
   */
  interface PaymentFieldRefs {
    readonly id: FieldRef<"Payment", 'Int'>
    readonly branch_id: FieldRef<"Payment", 'Int'>
    readonly session_class_id: FieldRef<"Payment", 'Int'>
    readonly specialization_id: FieldRef<"Payment", 'Int'>
    readonly who_would_pay: FieldRef<"Payment", 'String'>
    readonly fee_id: FieldRef<"Payment", 'Int'>
    readonly payment_duration_id: FieldRef<"Payment", 'Int'>
    readonly payment_amount: FieldRef<"Payment", 'Decimal'>
    readonly start_date: FieldRef<"Payment", 'DateTime'>
    readonly end_date: FieldRef<"Payment", 'DateTime'>
    readonly due_date: FieldRef<"Payment", 'DateTime'>
    readonly is_compulsory: FieldRef<"Payment", 'Int'>
    readonly created_by: FieldRef<"Payment", 'Int'>
    readonly created_at: FieldRef<"Payment", 'DateTime'>
    readonly updated_at: FieldRef<"Payment", 'DateTime'>
    readonly deleted_at: FieldRef<"Payment", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Payment findUnique
   */
  export type PaymentFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter, which Payment to fetch.
     */
    where: PaymentWhereUniqueInput
  }

  /**
   * Payment findUniqueOrThrow
   */
  export type PaymentFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter, which Payment to fetch.
     */
    where: PaymentWhereUniqueInput
  }

  /**
   * Payment findFirst
   */
  export type PaymentFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter, which Payment to fetch.
     */
    where?: PaymentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Payments to fetch.
     */
    orderBy?: PaymentOrderByWithRelationInput | PaymentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Payments.
     */
    cursor?: PaymentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Payments from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Payments.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Payments.
     */
    distinct?: PaymentScalarFieldEnum | PaymentScalarFieldEnum[]
  }

  /**
   * Payment findFirstOrThrow
   */
  export type PaymentFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter, which Payment to fetch.
     */
    where?: PaymentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Payments to fetch.
     */
    orderBy?: PaymentOrderByWithRelationInput | PaymentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Payments.
     */
    cursor?: PaymentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Payments from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Payments.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Payments.
     */
    distinct?: PaymentScalarFieldEnum | PaymentScalarFieldEnum[]
  }

  /**
   * Payment findMany
   */
  export type PaymentFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter, which Payments to fetch.
     */
    where?: PaymentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Payments to fetch.
     */
    orderBy?: PaymentOrderByWithRelationInput | PaymentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Payments.
     */
    cursor?: PaymentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Payments from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Payments.
     */
    skip?: number
    distinct?: PaymentScalarFieldEnum | PaymentScalarFieldEnum[]
  }

  /**
   * Payment create
   */
  export type PaymentCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * The data needed to create a Payment.
     */
    data: XOR<PaymentCreateInput, PaymentUncheckedCreateInput>
  }

  /**
   * Payment createMany
   */
  export type PaymentCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Payments.
     */
    data: PaymentCreateManyInput | PaymentCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Payment update
   */
  export type PaymentUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * The data needed to update a Payment.
     */
    data: XOR<PaymentUpdateInput, PaymentUncheckedUpdateInput>
    /**
     * Choose, which Payment to update.
     */
    where: PaymentWhereUniqueInput
  }

  /**
   * Payment updateMany
   */
  export type PaymentUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Payments.
     */
    data: XOR<PaymentUpdateManyMutationInput, PaymentUncheckedUpdateManyInput>
    /**
     * Filter which Payments to update
     */
    where?: PaymentWhereInput
    /**
     * Limit how many Payments to update.
     */
    limit?: number
  }

  /**
   * Payment upsert
   */
  export type PaymentUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * The filter to search for the Payment to update in case it exists.
     */
    where: PaymentWhereUniqueInput
    /**
     * In case the Payment found by the `where` argument doesn't exist, create a new Payment with this data.
     */
    create: XOR<PaymentCreateInput, PaymentUncheckedCreateInput>
    /**
     * In case the Payment was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentUpdateInput, PaymentUncheckedUpdateInput>
  }

  /**
   * Payment delete
   */
  export type PaymentDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
    /**
     * Filter which Payment to delete.
     */
    where: PaymentWhereUniqueInput
  }

  /**
   * Payment deleteMany
   */
  export type PaymentDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Payments to delete
     */
    where?: PaymentWhereInput
    /**
     * Limit how many Payments to delete.
     */
    limit?: number
  }

  /**
   * Payment without action
   */
  export type PaymentDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Payment
     */
    select?: PaymentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Payment
     */
    omit?: PaymentOmit<ExtArgs> | null
  }


  /**
   * Model PaymentMade
   */

  export type AggregatePaymentMade = {
    _count: PaymentMadeCountAggregateOutputType | null
    _avg: PaymentMadeAvgAggregateOutputType | null
    _sum: PaymentMadeSumAggregateOutputType | null
    _min: PaymentMadeMinAggregateOutputType | null
    _max: PaymentMadeMaxAggregateOutputType | null
  }

  export type PaymentMadeAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_paid: Decimal | null
    created_by: number | null
  }

  export type PaymentMadeSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_paid: Decimal | null
    created_by: number | null
  }

  export type PaymentMadeMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    payer_model: string | null
    payer_phonenumber: string | null
    payer_name: string | null
    amount_paid: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentMadeMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    payer_model: string | null
    payer_phonenumber: string | null
    payer_name: string | null
    amount_paid: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentMadeCountAggregateOutputType = {
    id: number
    branch_id: number
    payment_id: number
    student_id: number
    payer_id: number
    payer_model: number
    payer_phonenumber: number
    payer_name: number
    amount_paid: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentMadeAvgAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_paid?: true
    created_by?: true
  }

  export type PaymentMadeSumAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_paid?: true
    created_by?: true
  }

  export type PaymentMadeMinAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentMadeMaxAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentMadeCountAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentMadeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentMade to aggregate.
     */
    where?: PaymentMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentMades to fetch.
     */
    orderBy?: PaymentMadeOrderByWithRelationInput | PaymentMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned PaymentMades
    **/
    _count?: true | PaymentMadeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentMadeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentMadeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentMadeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentMadeMaxAggregateInputType
  }

  export type GetPaymentMadeAggregateType<T extends PaymentMadeAggregateArgs> = {
        [P in keyof T & keyof AggregatePaymentMade]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePaymentMade[P]>
      : GetScalarType<T[P], AggregatePaymentMade[P]>
  }




  export type PaymentMadeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentMadeWhereInput
    orderBy?: PaymentMadeOrderByWithAggregationInput | PaymentMadeOrderByWithAggregationInput[]
    by: PaymentMadeScalarFieldEnum[] | PaymentMadeScalarFieldEnum
    having?: PaymentMadeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentMadeCountAggregateInputType | true
    _avg?: PaymentMadeAvgAggregateInputType
    _sum?: PaymentMadeSumAggregateInputType
    _min?: PaymentMadeMinAggregateInputType
    _max?: PaymentMadeMaxAggregateInputType
  }

  export type PaymentMadeGroupByOutputType = {
    id: number
    branch_id: number
    payment_id: number
    student_id: number | null
    payer_id: number | null
    payer_model: string | null
    payer_phonenumber: string | null
    payer_name: string | null
    amount_paid: Decimal | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentMadeCountAggregateOutputType | null
    _avg: PaymentMadeAvgAggregateOutputType | null
    _sum: PaymentMadeSumAggregateOutputType | null
    _min: PaymentMadeMinAggregateOutputType | null
    _max: PaymentMadeMaxAggregateOutputType | null
  }

  type GetPaymentMadeGroupByPayload<T extends PaymentMadeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentMadeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentMadeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentMadeGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentMadeGroupByOutputType[P]>
        }
      >
    >


  export type PaymentMadeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    payment_id?: boolean
    student_id?: boolean
    payer_id?: boolean
    payer_model?: boolean
    payer_phonenumber?: boolean
    payer_name?: boolean
    amount_paid?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["paymentMade"]>



  export type PaymentMadeSelectScalar = {
    id?: boolean
    branch_id?: boolean
    payment_id?: boolean
    student_id?: boolean
    payer_id?: boolean
    payer_model?: boolean
    payer_phonenumber?: boolean
    payer_name?: boolean
    amount_paid?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentMadeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "payment_id" | "student_id" | "payer_id" | "payer_model" | "payer_phonenumber" | "payer_name" | "amount_paid" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["paymentMade"]>

  export type $PaymentMadePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "PaymentMade"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      payment_id: number
      student_id: number | null
      payer_id: number | null
      payer_model: string | null
      payer_phonenumber: string | null
      payer_name: string | null
      amount_paid: Prisma.Decimal | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["paymentMade"]>
    composites: {}
  }

  type PaymentMadeGetPayload<S extends boolean | null | undefined | PaymentMadeDefaultArgs> = $Result.GetResult<Prisma.$PaymentMadePayload, S>

  type PaymentMadeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentMadeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentMadeCountAggregateInputType | true
    }

  export interface PaymentMadeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['PaymentMade'], meta: { name: 'PaymentMade' } }
    /**
     * Find zero or one PaymentMade that matches the filter.
     * @param {PaymentMadeFindUniqueArgs} args - Arguments to find a PaymentMade
     * @example
     * // Get one PaymentMade
     * const paymentMade = await prisma.paymentMade.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentMadeFindUniqueArgs>(args: SelectSubset<T, PaymentMadeFindUniqueArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one PaymentMade that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentMadeFindUniqueOrThrowArgs} args - Arguments to find a PaymentMade
     * @example
     * // Get one PaymentMade
     * const paymentMade = await prisma.paymentMade.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentMadeFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentMadeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentMade that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeFindFirstArgs} args - Arguments to find a PaymentMade
     * @example
     * // Get one PaymentMade
     * const paymentMade = await prisma.paymentMade.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentMadeFindFirstArgs>(args?: SelectSubset<T, PaymentMadeFindFirstArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentMade that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeFindFirstOrThrowArgs} args - Arguments to find a PaymentMade
     * @example
     * // Get one PaymentMade
     * const paymentMade = await prisma.paymentMade.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentMadeFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentMadeFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more PaymentMades that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all PaymentMades
     * const paymentMades = await prisma.paymentMade.findMany()
     * 
     * // Get first 10 PaymentMades
     * const paymentMades = await prisma.paymentMade.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentMadeWithIdOnly = await prisma.paymentMade.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentMadeFindManyArgs>(args?: SelectSubset<T, PaymentMadeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a PaymentMade.
     * @param {PaymentMadeCreateArgs} args - Arguments to create a PaymentMade.
     * @example
     * // Create one PaymentMade
     * const PaymentMade = await prisma.paymentMade.create({
     *   data: {
     *     // ... data to create a PaymentMade
     *   }
     * })
     * 
     */
    create<T extends PaymentMadeCreateArgs>(args: SelectSubset<T, PaymentMadeCreateArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many PaymentMades.
     * @param {PaymentMadeCreateManyArgs} args - Arguments to create many PaymentMades.
     * @example
     * // Create many PaymentMades
     * const paymentMade = await prisma.paymentMade.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentMadeCreateManyArgs>(args?: SelectSubset<T, PaymentMadeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a PaymentMade.
     * @param {PaymentMadeDeleteArgs} args - Arguments to delete one PaymentMade.
     * @example
     * // Delete one PaymentMade
     * const PaymentMade = await prisma.paymentMade.delete({
     *   where: {
     *     // ... filter to delete one PaymentMade
     *   }
     * })
     * 
     */
    delete<T extends PaymentMadeDeleteArgs>(args: SelectSubset<T, PaymentMadeDeleteArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one PaymentMade.
     * @param {PaymentMadeUpdateArgs} args - Arguments to update one PaymentMade.
     * @example
     * // Update one PaymentMade
     * const paymentMade = await prisma.paymentMade.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentMadeUpdateArgs>(args: SelectSubset<T, PaymentMadeUpdateArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more PaymentMades.
     * @param {PaymentMadeDeleteManyArgs} args - Arguments to filter PaymentMades to delete.
     * @example
     * // Delete a few PaymentMades
     * const { count } = await prisma.paymentMade.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentMadeDeleteManyArgs>(args?: SelectSubset<T, PaymentMadeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more PaymentMades.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many PaymentMades
     * const paymentMade = await prisma.paymentMade.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentMadeUpdateManyArgs>(args: SelectSubset<T, PaymentMadeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one PaymentMade.
     * @param {PaymentMadeUpsertArgs} args - Arguments to update or create a PaymentMade.
     * @example
     * // Update or create a PaymentMade
     * const paymentMade = await prisma.paymentMade.upsert({
     *   create: {
     *     // ... data to create a PaymentMade
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the PaymentMade we want to update
     *   }
     * })
     */
    upsert<T extends PaymentMadeUpsertArgs>(args: SelectSubset<T, PaymentMadeUpsertArgs<ExtArgs>>): Prisma__PaymentMadeClient<$Result.GetResult<Prisma.$PaymentMadePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of PaymentMades.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeCountArgs} args - Arguments to filter PaymentMades to count.
     * @example
     * // Count the number of PaymentMades
     * const count = await prisma.paymentMade.count({
     *   where: {
     *     // ... the filter for the PaymentMades we want to count
     *   }
     * })
    **/
    count<T extends PaymentMadeCountArgs>(
      args?: Subset<T, PaymentMadeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentMadeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a PaymentMade.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentMadeAggregateArgs>(args: Subset<T, PaymentMadeAggregateArgs>): Prisma.PrismaPromise<GetPaymentMadeAggregateType<T>>

    /**
     * Group by PaymentMade.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentMadeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentMadeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentMadeGroupByArgs['orderBy'] }
        : { orderBy?: PaymentMadeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentMadeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentMadeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the PaymentMade model
   */
  readonly fields: PaymentMadeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for PaymentMade.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentMadeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the PaymentMade model
   */
  interface PaymentMadeFieldRefs {
    readonly id: FieldRef<"PaymentMade", 'Int'>
    readonly branch_id: FieldRef<"PaymentMade", 'Int'>
    readonly payment_id: FieldRef<"PaymentMade", 'Int'>
    readonly student_id: FieldRef<"PaymentMade", 'Int'>
    readonly payer_id: FieldRef<"PaymentMade", 'Int'>
    readonly payer_model: FieldRef<"PaymentMade", 'String'>
    readonly payer_phonenumber: FieldRef<"PaymentMade", 'String'>
    readonly payer_name: FieldRef<"PaymentMade", 'String'>
    readonly amount_paid: FieldRef<"PaymentMade", 'Decimal'>
    readonly created_by: FieldRef<"PaymentMade", 'Int'>
    readonly created_at: FieldRef<"PaymentMade", 'DateTime'>
    readonly updated_at: FieldRef<"PaymentMade", 'DateTime'>
    readonly deleted_at: FieldRef<"PaymentMade", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * PaymentMade findUnique
   */
  export type PaymentMadeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentMade to fetch.
     */
    where: PaymentMadeWhereUniqueInput
  }

  /**
   * PaymentMade findUniqueOrThrow
   */
  export type PaymentMadeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentMade to fetch.
     */
    where: PaymentMadeWhereUniqueInput
  }

  /**
   * PaymentMade findFirst
   */
  export type PaymentMadeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentMade to fetch.
     */
    where?: PaymentMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentMades to fetch.
     */
    orderBy?: PaymentMadeOrderByWithRelationInput | PaymentMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentMades.
     */
    cursor?: PaymentMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentMades.
     */
    distinct?: PaymentMadeScalarFieldEnum | PaymentMadeScalarFieldEnum[]
  }

  /**
   * PaymentMade findFirstOrThrow
   */
  export type PaymentMadeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentMade to fetch.
     */
    where?: PaymentMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentMades to fetch.
     */
    orderBy?: PaymentMadeOrderByWithRelationInput | PaymentMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentMades.
     */
    cursor?: PaymentMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentMades.
     */
    distinct?: PaymentMadeScalarFieldEnum | PaymentMadeScalarFieldEnum[]
  }

  /**
   * PaymentMade findMany
   */
  export type PaymentMadeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentMades to fetch.
     */
    where?: PaymentMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentMades to fetch.
     */
    orderBy?: PaymentMadeOrderByWithRelationInput | PaymentMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing PaymentMades.
     */
    cursor?: PaymentMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentMades.
     */
    skip?: number
    distinct?: PaymentMadeScalarFieldEnum | PaymentMadeScalarFieldEnum[]
  }

  /**
   * PaymentMade create
   */
  export type PaymentMadeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * The data needed to create a PaymentMade.
     */
    data: XOR<PaymentMadeCreateInput, PaymentMadeUncheckedCreateInput>
  }

  /**
   * PaymentMade createMany
   */
  export type PaymentMadeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many PaymentMades.
     */
    data: PaymentMadeCreateManyInput | PaymentMadeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * PaymentMade update
   */
  export type PaymentMadeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * The data needed to update a PaymentMade.
     */
    data: XOR<PaymentMadeUpdateInput, PaymentMadeUncheckedUpdateInput>
    /**
     * Choose, which PaymentMade to update.
     */
    where: PaymentMadeWhereUniqueInput
  }

  /**
   * PaymentMade updateMany
   */
  export type PaymentMadeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update PaymentMades.
     */
    data: XOR<PaymentMadeUpdateManyMutationInput, PaymentMadeUncheckedUpdateManyInput>
    /**
     * Filter which PaymentMades to update
     */
    where?: PaymentMadeWhereInput
    /**
     * Limit how many PaymentMades to update.
     */
    limit?: number
  }

  /**
   * PaymentMade upsert
   */
  export type PaymentMadeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * The filter to search for the PaymentMade to update in case it exists.
     */
    where: PaymentMadeWhereUniqueInput
    /**
     * In case the PaymentMade found by the `where` argument doesn't exist, create a new PaymentMade with this data.
     */
    create: XOR<PaymentMadeCreateInput, PaymentMadeUncheckedCreateInput>
    /**
     * In case the PaymentMade was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentMadeUpdateInput, PaymentMadeUncheckedUpdateInput>
  }

  /**
   * PaymentMade delete
   */
  export type PaymentMadeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
    /**
     * Filter which PaymentMade to delete.
     */
    where: PaymentMadeWhereUniqueInput
  }

  /**
   * PaymentMade deleteMany
   */
  export type PaymentMadeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentMades to delete
     */
    where?: PaymentMadeWhereInput
    /**
     * Limit how many PaymentMades to delete.
     */
    limit?: number
  }

  /**
   * PaymentMade without action
   */
  export type PaymentMadeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentMade
     */
    select?: PaymentMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentMade
     */
    omit?: PaymentMadeOmit<ExtArgs> | null
  }


  /**
   * Model PaymentPartMade
   */

  export type AggregatePaymentPartMade = {
    _count: PaymentPartMadeCountAggregateOutputType | null
    _avg: PaymentPartMadeAvgAggregateOutputType | null
    _sum: PaymentPartMadeSumAggregateOutputType | null
    _min: PaymentPartMadeMinAggregateOutputType | null
    _max: PaymentPartMadeMaxAggregateOutputType | null
  }

  export type PaymentPartMadeAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_part_paid: Decimal | null
    created_by: number | null
  }

  export type PaymentPartMadeSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_part_paid: Decimal | null
    created_by: number | null
  }

  export type PaymentPartMadeMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    payer_model: string | null
    payer_phonenumber: string | null
    payer_name: string | null
    amount_part_paid: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentPartMadeMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    payer_model: string | null
    payer_phonenumber: string | null
    payer_name: string | null
    amount_part_paid: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentPartMadeCountAggregateOutputType = {
    id: number
    branch_id: number
    payment_id: number
    student_id: number
    payer_id: number
    payer_model: number
    payer_phonenumber: number
    payer_name: number
    amount_part_paid: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentPartMadeAvgAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_part_paid?: true
    created_by?: true
  }

  export type PaymentPartMadeSumAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_part_paid?: true
    created_by?: true
  }

  export type PaymentPartMadeMinAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_part_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentPartMadeMaxAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_part_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentPartMadeCountAggregateInputType = {
    id?: true
    branch_id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    payer_model?: true
    payer_phonenumber?: true
    payer_name?: true
    amount_part_paid?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentPartMadeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentPartMade to aggregate.
     */
    where?: PaymentPartMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentPartMades to fetch.
     */
    orderBy?: PaymentPartMadeOrderByWithRelationInput | PaymentPartMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentPartMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentPartMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentPartMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned PaymentPartMades
    **/
    _count?: true | PaymentPartMadeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentPartMadeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentPartMadeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentPartMadeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentPartMadeMaxAggregateInputType
  }

  export type GetPaymentPartMadeAggregateType<T extends PaymentPartMadeAggregateArgs> = {
        [P in keyof T & keyof AggregatePaymentPartMade]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePaymentPartMade[P]>
      : GetScalarType<T[P], AggregatePaymentPartMade[P]>
  }




  export type PaymentPartMadeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentPartMadeWhereInput
    orderBy?: PaymentPartMadeOrderByWithAggregationInput | PaymentPartMadeOrderByWithAggregationInput[]
    by: PaymentPartMadeScalarFieldEnum[] | PaymentPartMadeScalarFieldEnum
    having?: PaymentPartMadeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentPartMadeCountAggregateInputType | true
    _avg?: PaymentPartMadeAvgAggregateInputType
    _sum?: PaymentPartMadeSumAggregateInputType
    _min?: PaymentPartMadeMinAggregateInputType
    _max?: PaymentPartMadeMaxAggregateInputType
  }

  export type PaymentPartMadeGroupByOutputType = {
    id: number
    branch_id: number
    payment_id: number
    student_id: number | null
    payer_id: number | null
    payer_model: string
    payer_phonenumber: string | null
    payer_name: string | null
    amount_part_paid: Decimal | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentPartMadeCountAggregateOutputType | null
    _avg: PaymentPartMadeAvgAggregateOutputType | null
    _sum: PaymentPartMadeSumAggregateOutputType | null
    _min: PaymentPartMadeMinAggregateOutputType | null
    _max: PaymentPartMadeMaxAggregateOutputType | null
  }

  type GetPaymentPartMadeGroupByPayload<T extends PaymentPartMadeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentPartMadeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentPartMadeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentPartMadeGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentPartMadeGroupByOutputType[P]>
        }
      >
    >


  export type PaymentPartMadeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    payment_id?: boolean
    student_id?: boolean
    payer_id?: boolean
    payer_model?: boolean
    payer_phonenumber?: boolean
    payer_name?: boolean
    amount_part_paid?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["paymentPartMade"]>



  export type PaymentPartMadeSelectScalar = {
    id?: boolean
    branch_id?: boolean
    payment_id?: boolean
    student_id?: boolean
    payer_id?: boolean
    payer_model?: boolean
    payer_phonenumber?: boolean
    payer_name?: boolean
    amount_part_paid?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentPartMadeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "payment_id" | "student_id" | "payer_id" | "payer_model" | "payer_phonenumber" | "payer_name" | "amount_part_paid" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["paymentPartMade"]>

  export type $PaymentPartMadePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "PaymentPartMade"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      payment_id: number
      student_id: number | null
      payer_id: number | null
      payer_model: string
      payer_phonenumber: string | null
      payer_name: string | null
      amount_part_paid: Prisma.Decimal | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["paymentPartMade"]>
    composites: {}
  }

  type PaymentPartMadeGetPayload<S extends boolean | null | undefined | PaymentPartMadeDefaultArgs> = $Result.GetResult<Prisma.$PaymentPartMadePayload, S>

  type PaymentPartMadeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentPartMadeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentPartMadeCountAggregateInputType | true
    }

  export interface PaymentPartMadeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['PaymentPartMade'], meta: { name: 'PaymentPartMade' } }
    /**
     * Find zero or one PaymentPartMade that matches the filter.
     * @param {PaymentPartMadeFindUniqueArgs} args - Arguments to find a PaymentPartMade
     * @example
     * // Get one PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentPartMadeFindUniqueArgs>(args: SelectSubset<T, PaymentPartMadeFindUniqueArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one PaymentPartMade that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentPartMadeFindUniqueOrThrowArgs} args - Arguments to find a PaymentPartMade
     * @example
     * // Get one PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentPartMadeFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentPartMadeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentPartMade that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeFindFirstArgs} args - Arguments to find a PaymentPartMade
     * @example
     * // Get one PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentPartMadeFindFirstArgs>(args?: SelectSubset<T, PaymentPartMadeFindFirstArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentPartMade that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeFindFirstOrThrowArgs} args - Arguments to find a PaymentPartMade
     * @example
     * // Get one PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentPartMadeFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentPartMadeFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more PaymentPartMades that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all PaymentPartMades
     * const paymentPartMades = await prisma.paymentPartMade.findMany()
     * 
     * // Get first 10 PaymentPartMades
     * const paymentPartMades = await prisma.paymentPartMade.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentPartMadeWithIdOnly = await prisma.paymentPartMade.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentPartMadeFindManyArgs>(args?: SelectSubset<T, PaymentPartMadeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a PaymentPartMade.
     * @param {PaymentPartMadeCreateArgs} args - Arguments to create a PaymentPartMade.
     * @example
     * // Create one PaymentPartMade
     * const PaymentPartMade = await prisma.paymentPartMade.create({
     *   data: {
     *     // ... data to create a PaymentPartMade
     *   }
     * })
     * 
     */
    create<T extends PaymentPartMadeCreateArgs>(args: SelectSubset<T, PaymentPartMadeCreateArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many PaymentPartMades.
     * @param {PaymentPartMadeCreateManyArgs} args - Arguments to create many PaymentPartMades.
     * @example
     * // Create many PaymentPartMades
     * const paymentPartMade = await prisma.paymentPartMade.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentPartMadeCreateManyArgs>(args?: SelectSubset<T, PaymentPartMadeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a PaymentPartMade.
     * @param {PaymentPartMadeDeleteArgs} args - Arguments to delete one PaymentPartMade.
     * @example
     * // Delete one PaymentPartMade
     * const PaymentPartMade = await prisma.paymentPartMade.delete({
     *   where: {
     *     // ... filter to delete one PaymentPartMade
     *   }
     * })
     * 
     */
    delete<T extends PaymentPartMadeDeleteArgs>(args: SelectSubset<T, PaymentPartMadeDeleteArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one PaymentPartMade.
     * @param {PaymentPartMadeUpdateArgs} args - Arguments to update one PaymentPartMade.
     * @example
     * // Update one PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentPartMadeUpdateArgs>(args: SelectSubset<T, PaymentPartMadeUpdateArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more PaymentPartMades.
     * @param {PaymentPartMadeDeleteManyArgs} args - Arguments to filter PaymentPartMades to delete.
     * @example
     * // Delete a few PaymentPartMades
     * const { count } = await prisma.paymentPartMade.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentPartMadeDeleteManyArgs>(args?: SelectSubset<T, PaymentPartMadeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more PaymentPartMades.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many PaymentPartMades
     * const paymentPartMade = await prisma.paymentPartMade.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentPartMadeUpdateManyArgs>(args: SelectSubset<T, PaymentPartMadeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one PaymentPartMade.
     * @param {PaymentPartMadeUpsertArgs} args - Arguments to update or create a PaymentPartMade.
     * @example
     * // Update or create a PaymentPartMade
     * const paymentPartMade = await prisma.paymentPartMade.upsert({
     *   create: {
     *     // ... data to create a PaymentPartMade
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the PaymentPartMade we want to update
     *   }
     * })
     */
    upsert<T extends PaymentPartMadeUpsertArgs>(args: SelectSubset<T, PaymentPartMadeUpsertArgs<ExtArgs>>): Prisma__PaymentPartMadeClient<$Result.GetResult<Prisma.$PaymentPartMadePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of PaymentPartMades.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeCountArgs} args - Arguments to filter PaymentPartMades to count.
     * @example
     * // Count the number of PaymentPartMades
     * const count = await prisma.paymentPartMade.count({
     *   where: {
     *     // ... the filter for the PaymentPartMades we want to count
     *   }
     * })
    **/
    count<T extends PaymentPartMadeCountArgs>(
      args?: Subset<T, PaymentPartMadeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentPartMadeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a PaymentPartMade.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentPartMadeAggregateArgs>(args: Subset<T, PaymentPartMadeAggregateArgs>): Prisma.PrismaPromise<GetPaymentPartMadeAggregateType<T>>

    /**
     * Group by PaymentPartMade.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentPartMadeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentPartMadeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentPartMadeGroupByArgs['orderBy'] }
        : { orderBy?: PaymentPartMadeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentPartMadeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentPartMadeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the PaymentPartMade model
   */
  readonly fields: PaymentPartMadeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for PaymentPartMade.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentPartMadeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the PaymentPartMade model
   */
  interface PaymentPartMadeFieldRefs {
    readonly id: FieldRef<"PaymentPartMade", 'Int'>
    readonly branch_id: FieldRef<"PaymentPartMade", 'Int'>
    readonly payment_id: FieldRef<"PaymentPartMade", 'Int'>
    readonly student_id: FieldRef<"PaymentPartMade", 'Int'>
    readonly payer_id: FieldRef<"PaymentPartMade", 'Int'>
    readonly payer_model: FieldRef<"PaymentPartMade", 'String'>
    readonly payer_phonenumber: FieldRef<"PaymentPartMade", 'String'>
    readonly payer_name: FieldRef<"PaymentPartMade", 'String'>
    readonly amount_part_paid: FieldRef<"PaymentPartMade", 'Decimal'>
    readonly created_by: FieldRef<"PaymentPartMade", 'Int'>
    readonly created_at: FieldRef<"PaymentPartMade", 'DateTime'>
    readonly updated_at: FieldRef<"PaymentPartMade", 'DateTime'>
    readonly deleted_at: FieldRef<"PaymentPartMade", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * PaymentPartMade findUnique
   */
  export type PaymentPartMadeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentPartMade to fetch.
     */
    where: PaymentPartMadeWhereUniqueInput
  }

  /**
   * PaymentPartMade findUniqueOrThrow
   */
  export type PaymentPartMadeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentPartMade to fetch.
     */
    where: PaymentPartMadeWhereUniqueInput
  }

  /**
   * PaymentPartMade findFirst
   */
  export type PaymentPartMadeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentPartMade to fetch.
     */
    where?: PaymentPartMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentPartMades to fetch.
     */
    orderBy?: PaymentPartMadeOrderByWithRelationInput | PaymentPartMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentPartMades.
     */
    cursor?: PaymentPartMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentPartMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentPartMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentPartMades.
     */
    distinct?: PaymentPartMadeScalarFieldEnum | PaymentPartMadeScalarFieldEnum[]
  }

  /**
   * PaymentPartMade findFirstOrThrow
   */
  export type PaymentPartMadeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentPartMade to fetch.
     */
    where?: PaymentPartMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentPartMades to fetch.
     */
    orderBy?: PaymentPartMadeOrderByWithRelationInput | PaymentPartMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentPartMades.
     */
    cursor?: PaymentPartMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentPartMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentPartMades.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentPartMades.
     */
    distinct?: PaymentPartMadeScalarFieldEnum | PaymentPartMadeScalarFieldEnum[]
  }

  /**
   * PaymentPartMade findMany
   */
  export type PaymentPartMadeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter, which PaymentPartMades to fetch.
     */
    where?: PaymentPartMadeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentPartMades to fetch.
     */
    orderBy?: PaymentPartMadeOrderByWithRelationInput | PaymentPartMadeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing PaymentPartMades.
     */
    cursor?: PaymentPartMadeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentPartMades from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentPartMades.
     */
    skip?: number
    distinct?: PaymentPartMadeScalarFieldEnum | PaymentPartMadeScalarFieldEnum[]
  }

  /**
   * PaymentPartMade create
   */
  export type PaymentPartMadeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * The data needed to create a PaymentPartMade.
     */
    data: XOR<PaymentPartMadeCreateInput, PaymentPartMadeUncheckedCreateInput>
  }

  /**
   * PaymentPartMade createMany
   */
  export type PaymentPartMadeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many PaymentPartMades.
     */
    data: PaymentPartMadeCreateManyInput | PaymentPartMadeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * PaymentPartMade update
   */
  export type PaymentPartMadeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * The data needed to update a PaymentPartMade.
     */
    data: XOR<PaymentPartMadeUpdateInput, PaymentPartMadeUncheckedUpdateInput>
    /**
     * Choose, which PaymentPartMade to update.
     */
    where: PaymentPartMadeWhereUniqueInput
  }

  /**
   * PaymentPartMade updateMany
   */
  export type PaymentPartMadeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update PaymentPartMades.
     */
    data: XOR<PaymentPartMadeUpdateManyMutationInput, PaymentPartMadeUncheckedUpdateManyInput>
    /**
     * Filter which PaymentPartMades to update
     */
    where?: PaymentPartMadeWhereInput
    /**
     * Limit how many PaymentPartMades to update.
     */
    limit?: number
  }

  /**
   * PaymentPartMade upsert
   */
  export type PaymentPartMadeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * The filter to search for the PaymentPartMade to update in case it exists.
     */
    where: PaymentPartMadeWhereUniqueInput
    /**
     * In case the PaymentPartMade found by the `where` argument doesn't exist, create a new PaymentPartMade with this data.
     */
    create: XOR<PaymentPartMadeCreateInput, PaymentPartMadeUncheckedCreateInput>
    /**
     * In case the PaymentPartMade was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentPartMadeUpdateInput, PaymentPartMadeUncheckedUpdateInput>
  }

  /**
   * PaymentPartMade delete
   */
  export type PaymentPartMadeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
    /**
     * Filter which PaymentPartMade to delete.
     */
    where: PaymentPartMadeWhereUniqueInput
  }

  /**
   * PaymentPartMade deleteMany
   */
  export type PaymentPartMadeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentPartMades to delete
     */
    where?: PaymentPartMadeWhereInput
    /**
     * Limit how many PaymentPartMades to delete.
     */
    limit?: number
  }

  /**
   * PaymentPartMade without action
   */
  export type PaymentPartMadeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentPartMade
     */
    select?: PaymentPartMadeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentPartMade
     */
    omit?: PaymentPartMadeOmit<ExtArgs> | null
  }


  /**
   * Model PaymentAttempt
   */

  export type AggregatePaymentAttempt = {
    _count: PaymentAttemptCountAggregateOutputType | null
    _avg: PaymentAttemptAvgAggregateOutputType | null
    _sum: PaymentAttemptSumAggregateOutputType | null
    _min: PaymentAttemptMinAggregateOutputType | null
    _max: PaymentAttemptMaxAggregateOutputType | null
  }

  export type PaymentAttemptAvgAggregateOutputType = {
    id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_paid: Decimal | null
    is_successful: number | null
    created_by: number | null
  }

  export type PaymentAttemptSumAggregateOutputType = {
    id: number | null
    payment_id: number | null
    student_id: number | null
    payer_id: number | null
    amount_paid: Decimal | null
    is_successful: number | null
    created_by: number | null
  }

  export type PaymentAttemptMinAggregateOutputType = {
    id: number | null
    payment_id: number | null
    student_id: number | null
    ref_code: string | null
    access_code: string | null
    payer_id: number | null
    payer_model: string | null
    amount_paid: Decimal | null
    is_successful: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentAttemptMaxAggregateOutputType = {
    id: number | null
    payment_id: number | null
    student_id: number | null
    ref_code: string | null
    access_code: string | null
    payer_id: number | null
    payer_model: string | null
    amount_paid: Decimal | null
    is_successful: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type PaymentAttemptCountAggregateOutputType = {
    id: number
    payment_id: number
    student_id: number
    ref_code: number
    access_code: number
    payer_id: number
    payer_model: number
    amount_paid: number
    is_successful: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type PaymentAttemptAvgAggregateInputType = {
    id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_paid?: true
    is_successful?: true
    created_by?: true
  }

  export type PaymentAttemptSumAggregateInputType = {
    id?: true
    payment_id?: true
    student_id?: true
    payer_id?: true
    amount_paid?: true
    is_successful?: true
    created_by?: true
  }

  export type PaymentAttemptMinAggregateInputType = {
    id?: true
    payment_id?: true
    student_id?: true
    ref_code?: true
    access_code?: true
    payer_id?: true
    payer_model?: true
    amount_paid?: true
    is_successful?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentAttemptMaxAggregateInputType = {
    id?: true
    payment_id?: true
    student_id?: true
    ref_code?: true
    access_code?: true
    payer_id?: true
    payer_model?: true
    amount_paid?: true
    is_successful?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type PaymentAttemptCountAggregateInputType = {
    id?: true
    payment_id?: true
    student_id?: true
    ref_code?: true
    access_code?: true
    payer_id?: true
    payer_model?: true
    amount_paid?: true
    is_successful?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type PaymentAttemptAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentAttempt to aggregate.
     */
    where?: PaymentAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentAttempts to fetch.
     */
    orderBy?: PaymentAttemptOrderByWithRelationInput | PaymentAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: PaymentAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned PaymentAttempts
    **/
    _count?: true | PaymentAttemptCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: PaymentAttemptAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: PaymentAttemptSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: PaymentAttemptMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: PaymentAttemptMaxAggregateInputType
  }

  export type GetPaymentAttemptAggregateType<T extends PaymentAttemptAggregateArgs> = {
        [P in keyof T & keyof AggregatePaymentAttempt]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregatePaymentAttempt[P]>
      : GetScalarType<T[P], AggregatePaymentAttempt[P]>
  }




  export type PaymentAttemptGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: PaymentAttemptWhereInput
    orderBy?: PaymentAttemptOrderByWithAggregationInput | PaymentAttemptOrderByWithAggregationInput[]
    by: PaymentAttemptScalarFieldEnum[] | PaymentAttemptScalarFieldEnum
    having?: PaymentAttemptScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: PaymentAttemptCountAggregateInputType | true
    _avg?: PaymentAttemptAvgAggregateInputType
    _sum?: PaymentAttemptSumAggregateInputType
    _min?: PaymentAttemptMinAggregateInputType
    _max?: PaymentAttemptMaxAggregateInputType
  }

  export type PaymentAttemptGroupByOutputType = {
    id: number
    payment_id: number
    student_id: number | null
    ref_code: string
    access_code: string
    payer_id: number
    payer_model: string
    amount_paid: Decimal | null
    is_successful: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: PaymentAttemptCountAggregateOutputType | null
    _avg: PaymentAttemptAvgAggregateOutputType | null
    _sum: PaymentAttemptSumAggregateOutputType | null
    _min: PaymentAttemptMinAggregateOutputType | null
    _max: PaymentAttemptMaxAggregateOutputType | null
  }

  type GetPaymentAttemptGroupByPayload<T extends PaymentAttemptGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<PaymentAttemptGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof PaymentAttemptGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], PaymentAttemptGroupByOutputType[P]>
            : GetScalarType<T[P], PaymentAttemptGroupByOutputType[P]>
        }
      >
    >


  export type PaymentAttemptSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    payment_id?: boolean
    student_id?: boolean
    ref_code?: boolean
    access_code?: boolean
    payer_id?: boolean
    payer_model?: boolean
    amount_paid?: boolean
    is_successful?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["paymentAttempt"]>



  export type PaymentAttemptSelectScalar = {
    id?: boolean
    payment_id?: boolean
    student_id?: boolean
    ref_code?: boolean
    access_code?: boolean
    payer_id?: boolean
    payer_model?: boolean
    amount_paid?: boolean
    is_successful?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type PaymentAttemptOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "payment_id" | "student_id" | "ref_code" | "access_code" | "payer_id" | "payer_model" | "amount_paid" | "is_successful" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["paymentAttempt"]>

  export type $PaymentAttemptPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "PaymentAttempt"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      payment_id: number
      student_id: number | null
      ref_code: string
      access_code: string
      payer_id: number
      payer_model: string
      amount_paid: Prisma.Decimal | null
      is_successful: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["paymentAttempt"]>
    composites: {}
  }

  type PaymentAttemptGetPayload<S extends boolean | null | undefined | PaymentAttemptDefaultArgs> = $Result.GetResult<Prisma.$PaymentAttemptPayload, S>

  type PaymentAttemptCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<PaymentAttemptFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: PaymentAttemptCountAggregateInputType | true
    }

  export interface PaymentAttemptDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['PaymentAttempt'], meta: { name: 'PaymentAttempt' } }
    /**
     * Find zero or one PaymentAttempt that matches the filter.
     * @param {PaymentAttemptFindUniqueArgs} args - Arguments to find a PaymentAttempt
     * @example
     * // Get one PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends PaymentAttemptFindUniqueArgs>(args: SelectSubset<T, PaymentAttemptFindUniqueArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one PaymentAttempt that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {PaymentAttemptFindUniqueOrThrowArgs} args - Arguments to find a PaymentAttempt
     * @example
     * // Get one PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends PaymentAttemptFindUniqueOrThrowArgs>(args: SelectSubset<T, PaymentAttemptFindUniqueOrThrowArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentAttempt that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptFindFirstArgs} args - Arguments to find a PaymentAttempt
     * @example
     * // Get one PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends PaymentAttemptFindFirstArgs>(args?: SelectSubset<T, PaymentAttemptFindFirstArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first PaymentAttempt that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptFindFirstOrThrowArgs} args - Arguments to find a PaymentAttempt
     * @example
     * // Get one PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends PaymentAttemptFindFirstOrThrowArgs>(args?: SelectSubset<T, PaymentAttemptFindFirstOrThrowArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more PaymentAttempts that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all PaymentAttempts
     * const paymentAttempts = await prisma.paymentAttempt.findMany()
     * 
     * // Get first 10 PaymentAttempts
     * const paymentAttempts = await prisma.paymentAttempt.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const paymentAttemptWithIdOnly = await prisma.paymentAttempt.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends PaymentAttemptFindManyArgs>(args?: SelectSubset<T, PaymentAttemptFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a PaymentAttempt.
     * @param {PaymentAttemptCreateArgs} args - Arguments to create a PaymentAttempt.
     * @example
     * // Create one PaymentAttempt
     * const PaymentAttempt = await prisma.paymentAttempt.create({
     *   data: {
     *     // ... data to create a PaymentAttempt
     *   }
     * })
     * 
     */
    create<T extends PaymentAttemptCreateArgs>(args: SelectSubset<T, PaymentAttemptCreateArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many PaymentAttempts.
     * @param {PaymentAttemptCreateManyArgs} args - Arguments to create many PaymentAttempts.
     * @example
     * // Create many PaymentAttempts
     * const paymentAttempt = await prisma.paymentAttempt.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends PaymentAttemptCreateManyArgs>(args?: SelectSubset<T, PaymentAttemptCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a PaymentAttempt.
     * @param {PaymentAttemptDeleteArgs} args - Arguments to delete one PaymentAttempt.
     * @example
     * // Delete one PaymentAttempt
     * const PaymentAttempt = await prisma.paymentAttempt.delete({
     *   where: {
     *     // ... filter to delete one PaymentAttempt
     *   }
     * })
     * 
     */
    delete<T extends PaymentAttemptDeleteArgs>(args: SelectSubset<T, PaymentAttemptDeleteArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one PaymentAttempt.
     * @param {PaymentAttemptUpdateArgs} args - Arguments to update one PaymentAttempt.
     * @example
     * // Update one PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends PaymentAttemptUpdateArgs>(args: SelectSubset<T, PaymentAttemptUpdateArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more PaymentAttempts.
     * @param {PaymentAttemptDeleteManyArgs} args - Arguments to filter PaymentAttempts to delete.
     * @example
     * // Delete a few PaymentAttempts
     * const { count } = await prisma.paymentAttempt.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends PaymentAttemptDeleteManyArgs>(args?: SelectSubset<T, PaymentAttemptDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more PaymentAttempts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many PaymentAttempts
     * const paymentAttempt = await prisma.paymentAttempt.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends PaymentAttemptUpdateManyArgs>(args: SelectSubset<T, PaymentAttemptUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one PaymentAttempt.
     * @param {PaymentAttemptUpsertArgs} args - Arguments to update or create a PaymentAttempt.
     * @example
     * // Update or create a PaymentAttempt
     * const paymentAttempt = await prisma.paymentAttempt.upsert({
     *   create: {
     *     // ... data to create a PaymentAttempt
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the PaymentAttempt we want to update
     *   }
     * })
     */
    upsert<T extends PaymentAttemptUpsertArgs>(args: SelectSubset<T, PaymentAttemptUpsertArgs<ExtArgs>>): Prisma__PaymentAttemptClient<$Result.GetResult<Prisma.$PaymentAttemptPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of PaymentAttempts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptCountArgs} args - Arguments to filter PaymentAttempts to count.
     * @example
     * // Count the number of PaymentAttempts
     * const count = await prisma.paymentAttempt.count({
     *   where: {
     *     // ... the filter for the PaymentAttempts we want to count
     *   }
     * })
    **/
    count<T extends PaymentAttemptCountArgs>(
      args?: Subset<T, PaymentAttemptCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], PaymentAttemptCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a PaymentAttempt.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends PaymentAttemptAggregateArgs>(args: Subset<T, PaymentAttemptAggregateArgs>): Prisma.PrismaPromise<GetPaymentAttemptAggregateType<T>>

    /**
     * Group by PaymentAttempt.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {PaymentAttemptGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends PaymentAttemptGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: PaymentAttemptGroupByArgs['orderBy'] }
        : { orderBy?: PaymentAttemptGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, PaymentAttemptGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetPaymentAttemptGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the PaymentAttempt model
   */
  readonly fields: PaymentAttemptFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for PaymentAttempt.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__PaymentAttemptClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the PaymentAttempt model
   */
  interface PaymentAttemptFieldRefs {
    readonly id: FieldRef<"PaymentAttempt", 'Int'>
    readonly payment_id: FieldRef<"PaymentAttempt", 'Int'>
    readonly student_id: FieldRef<"PaymentAttempt", 'Int'>
    readonly ref_code: FieldRef<"PaymentAttempt", 'String'>
    readonly access_code: FieldRef<"PaymentAttempt", 'String'>
    readonly payer_id: FieldRef<"PaymentAttempt", 'Int'>
    readonly payer_model: FieldRef<"PaymentAttempt", 'String'>
    readonly amount_paid: FieldRef<"PaymentAttempt", 'Decimal'>
    readonly is_successful: FieldRef<"PaymentAttempt", 'Int'>
    readonly created_by: FieldRef<"PaymentAttempt", 'Int'>
    readonly created_at: FieldRef<"PaymentAttempt", 'DateTime'>
    readonly updated_at: FieldRef<"PaymentAttempt", 'DateTime'>
    readonly deleted_at: FieldRef<"PaymentAttempt", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * PaymentAttempt findUnique
   */
  export type PaymentAttemptFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter, which PaymentAttempt to fetch.
     */
    where: PaymentAttemptWhereUniqueInput
  }

  /**
   * PaymentAttempt findUniqueOrThrow
   */
  export type PaymentAttemptFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter, which PaymentAttempt to fetch.
     */
    where: PaymentAttemptWhereUniqueInput
  }

  /**
   * PaymentAttempt findFirst
   */
  export type PaymentAttemptFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter, which PaymentAttempt to fetch.
     */
    where?: PaymentAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentAttempts to fetch.
     */
    orderBy?: PaymentAttemptOrderByWithRelationInput | PaymentAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentAttempts.
     */
    cursor?: PaymentAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentAttempts.
     */
    distinct?: PaymentAttemptScalarFieldEnum | PaymentAttemptScalarFieldEnum[]
  }

  /**
   * PaymentAttempt findFirstOrThrow
   */
  export type PaymentAttemptFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter, which PaymentAttempt to fetch.
     */
    where?: PaymentAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentAttempts to fetch.
     */
    orderBy?: PaymentAttemptOrderByWithRelationInput | PaymentAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for PaymentAttempts.
     */
    cursor?: PaymentAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of PaymentAttempts.
     */
    distinct?: PaymentAttemptScalarFieldEnum | PaymentAttemptScalarFieldEnum[]
  }

  /**
   * PaymentAttempt findMany
   */
  export type PaymentAttemptFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter, which PaymentAttempts to fetch.
     */
    where?: PaymentAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of PaymentAttempts to fetch.
     */
    orderBy?: PaymentAttemptOrderByWithRelationInput | PaymentAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing PaymentAttempts.
     */
    cursor?: PaymentAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` PaymentAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` PaymentAttempts.
     */
    skip?: number
    distinct?: PaymentAttemptScalarFieldEnum | PaymentAttemptScalarFieldEnum[]
  }

  /**
   * PaymentAttempt create
   */
  export type PaymentAttemptCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * The data needed to create a PaymentAttempt.
     */
    data: XOR<PaymentAttemptCreateInput, PaymentAttemptUncheckedCreateInput>
  }

  /**
   * PaymentAttempt createMany
   */
  export type PaymentAttemptCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many PaymentAttempts.
     */
    data: PaymentAttemptCreateManyInput | PaymentAttemptCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * PaymentAttempt update
   */
  export type PaymentAttemptUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * The data needed to update a PaymentAttempt.
     */
    data: XOR<PaymentAttemptUpdateInput, PaymentAttemptUncheckedUpdateInput>
    /**
     * Choose, which PaymentAttempt to update.
     */
    where: PaymentAttemptWhereUniqueInput
  }

  /**
   * PaymentAttempt updateMany
   */
  export type PaymentAttemptUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update PaymentAttempts.
     */
    data: XOR<PaymentAttemptUpdateManyMutationInput, PaymentAttemptUncheckedUpdateManyInput>
    /**
     * Filter which PaymentAttempts to update
     */
    where?: PaymentAttemptWhereInput
    /**
     * Limit how many PaymentAttempts to update.
     */
    limit?: number
  }

  /**
   * PaymentAttempt upsert
   */
  export type PaymentAttemptUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * The filter to search for the PaymentAttempt to update in case it exists.
     */
    where: PaymentAttemptWhereUniqueInput
    /**
     * In case the PaymentAttempt found by the `where` argument doesn't exist, create a new PaymentAttempt with this data.
     */
    create: XOR<PaymentAttemptCreateInput, PaymentAttemptUncheckedCreateInput>
    /**
     * In case the PaymentAttempt was found with the provided `where` argument, update it with this data.
     */
    update: XOR<PaymentAttemptUpdateInput, PaymentAttemptUncheckedUpdateInput>
  }

  /**
   * PaymentAttempt delete
   */
  export type PaymentAttemptDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
    /**
     * Filter which PaymentAttempt to delete.
     */
    where: PaymentAttemptWhereUniqueInput
  }

  /**
   * PaymentAttempt deleteMany
   */
  export type PaymentAttemptDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which PaymentAttempts to delete
     */
    where?: PaymentAttemptWhereInput
    /**
     * Limit how many PaymentAttempts to delete.
     */
    limit?: number
  }

  /**
   * PaymentAttempt without action
   */
  export type PaymentAttemptDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the PaymentAttempt
     */
    select?: PaymentAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the PaymentAttempt
     */
    omit?: PaymentAttemptOmit<ExtArgs> | null
  }


  /**
   * Model ClassSubjectTemplate
   */

  export type AggregateClassSubjectTemplate = {
    _count: ClassSubjectTemplateCountAggregateOutputType | null
    _avg: ClassSubjectTemplateAvgAggregateOutputType | null
    _sum: ClassSubjectTemplateSumAggregateOutputType | null
    _min: ClassSubjectTemplateMinAggregateOutputType | null
    _max: ClassSubjectTemplateMaxAggregateOutputType | null
  }

  export type ClassSubjectTemplateAvgAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
  }

  export type ClassSubjectTemplateSumAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
  }

  export type ClassSubjectTemplateMinAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassSubjectTemplateMaxAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassSubjectTemplateCountAggregateOutputType = {
    id: number
    class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory: number
    include_in_result: number
    include_in_calculation: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ClassSubjectTemplateAvgAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
  }

  export type ClassSubjectTemplateSumAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
  }

  export type ClassSubjectTemplateMinAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassSubjectTemplateMaxAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassSubjectTemplateCountAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ClassSubjectTemplateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassSubjectTemplate to aggregate.
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSubjectTemplates to fetch.
     */
    orderBy?: ClassSubjectTemplateOrderByWithRelationInput | ClassSubjectTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ClassSubjectTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSubjectTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSubjectTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ClassSubjectTemplates
    **/
    _count?: true | ClassSubjectTemplateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ClassSubjectTemplateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ClassSubjectTemplateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ClassSubjectTemplateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ClassSubjectTemplateMaxAggregateInputType
  }

  export type GetClassSubjectTemplateAggregateType<T extends ClassSubjectTemplateAggregateArgs> = {
        [P in keyof T & keyof AggregateClassSubjectTemplate]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateClassSubjectTemplate[P]>
      : GetScalarType<T[P], AggregateClassSubjectTemplate[P]>
  }




  export type ClassSubjectTemplateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassSubjectTemplateWhereInput
    orderBy?: ClassSubjectTemplateOrderByWithAggregationInput | ClassSubjectTemplateOrderByWithAggregationInput[]
    by: ClassSubjectTemplateScalarFieldEnum[] | ClassSubjectTemplateScalarFieldEnum
    having?: ClassSubjectTemplateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ClassSubjectTemplateCountAggregateInputType | true
    _avg?: ClassSubjectTemplateAvgAggregateInputType
    _sum?: ClassSubjectTemplateSumAggregateInputType
    _min?: ClassSubjectTemplateMinAggregateInputType
    _max?: ClassSubjectTemplateMaxAggregateInputType
  }

  export type ClassSubjectTemplateGroupByOutputType = {
    id: number
    class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory: number
    include_in_result: number
    include_in_calculation: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ClassSubjectTemplateCountAggregateOutputType | null
    _avg: ClassSubjectTemplateAvgAggregateOutputType | null
    _sum: ClassSubjectTemplateSumAggregateOutputType | null
    _min: ClassSubjectTemplateMinAggregateOutputType | null
    _max: ClassSubjectTemplateMaxAggregateOutputType | null
  }

  type GetClassSubjectTemplateGroupByPayload<T extends ClassSubjectTemplateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ClassSubjectTemplateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ClassSubjectTemplateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ClassSubjectTemplateGroupByOutputType[P]>
            : GetScalarType<T[P], ClassSubjectTemplateGroupByOutputType[P]>
        }
      >
    >


  export type ClassSubjectTemplateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    subject_id?: boolean
    is_compulsory?: boolean
    include_in_result?: boolean
    include_in_calculation?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    subject?: boolean | SchoolSubjectDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["classSubjectTemplate"]>



  export type ClassSubjectTemplateSelectScalar = {
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    subject_id?: boolean
    is_compulsory?: boolean
    include_in_result?: boolean
    include_in_calculation?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ClassSubjectTemplateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "class_id" | "specialization_id" | "subject_id" | "is_compulsory" | "include_in_result" | "include_in_calculation" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["classSubjectTemplate"]>
  export type ClassSubjectTemplateInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    subject?: boolean | SchoolSubjectDefaultArgs<ExtArgs>
  }

  export type $ClassSubjectTemplatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ClassSubjectTemplate"
    objects: {
      subject: Prisma.$SchoolSubjectPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      class_id: number
      specialization_id: number
      subject_id: number
      is_compulsory: number
      include_in_result: number
      include_in_calculation: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["classSubjectTemplate"]>
    composites: {}
  }

  type ClassSubjectTemplateGetPayload<S extends boolean | null | undefined | ClassSubjectTemplateDefaultArgs> = $Result.GetResult<Prisma.$ClassSubjectTemplatePayload, S>

  type ClassSubjectTemplateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ClassSubjectTemplateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ClassSubjectTemplateCountAggregateInputType | true
    }

  export interface ClassSubjectTemplateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ClassSubjectTemplate'], meta: { name: 'ClassSubjectTemplate' } }
    /**
     * Find zero or one ClassSubjectTemplate that matches the filter.
     * @param {ClassSubjectTemplateFindUniqueArgs} args - Arguments to find a ClassSubjectTemplate
     * @example
     * // Get one ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ClassSubjectTemplateFindUniqueArgs>(args: SelectSubset<T, ClassSubjectTemplateFindUniqueArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ClassSubjectTemplate that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ClassSubjectTemplateFindUniqueOrThrowArgs} args - Arguments to find a ClassSubjectTemplate
     * @example
     * // Get one ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ClassSubjectTemplateFindUniqueOrThrowArgs>(args: SelectSubset<T, ClassSubjectTemplateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassSubjectTemplate that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateFindFirstArgs} args - Arguments to find a ClassSubjectTemplate
     * @example
     * // Get one ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ClassSubjectTemplateFindFirstArgs>(args?: SelectSubset<T, ClassSubjectTemplateFindFirstArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassSubjectTemplate that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateFindFirstOrThrowArgs} args - Arguments to find a ClassSubjectTemplate
     * @example
     * // Get one ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ClassSubjectTemplateFindFirstOrThrowArgs>(args?: SelectSubset<T, ClassSubjectTemplateFindFirstOrThrowArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ClassSubjectTemplates that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ClassSubjectTemplates
     * const classSubjectTemplates = await prisma.classSubjectTemplate.findMany()
     * 
     * // Get first 10 ClassSubjectTemplates
     * const classSubjectTemplates = await prisma.classSubjectTemplate.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const classSubjectTemplateWithIdOnly = await prisma.classSubjectTemplate.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ClassSubjectTemplateFindManyArgs>(args?: SelectSubset<T, ClassSubjectTemplateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ClassSubjectTemplate.
     * @param {ClassSubjectTemplateCreateArgs} args - Arguments to create a ClassSubjectTemplate.
     * @example
     * // Create one ClassSubjectTemplate
     * const ClassSubjectTemplate = await prisma.classSubjectTemplate.create({
     *   data: {
     *     // ... data to create a ClassSubjectTemplate
     *   }
     * })
     * 
     */
    create<T extends ClassSubjectTemplateCreateArgs>(args: SelectSubset<T, ClassSubjectTemplateCreateArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ClassSubjectTemplates.
     * @param {ClassSubjectTemplateCreateManyArgs} args - Arguments to create many ClassSubjectTemplates.
     * @example
     * // Create many ClassSubjectTemplates
     * const classSubjectTemplate = await prisma.classSubjectTemplate.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ClassSubjectTemplateCreateManyArgs>(args?: SelectSubset<T, ClassSubjectTemplateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ClassSubjectTemplate.
     * @param {ClassSubjectTemplateDeleteArgs} args - Arguments to delete one ClassSubjectTemplate.
     * @example
     * // Delete one ClassSubjectTemplate
     * const ClassSubjectTemplate = await prisma.classSubjectTemplate.delete({
     *   where: {
     *     // ... filter to delete one ClassSubjectTemplate
     *   }
     * })
     * 
     */
    delete<T extends ClassSubjectTemplateDeleteArgs>(args: SelectSubset<T, ClassSubjectTemplateDeleteArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ClassSubjectTemplate.
     * @param {ClassSubjectTemplateUpdateArgs} args - Arguments to update one ClassSubjectTemplate.
     * @example
     * // Update one ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ClassSubjectTemplateUpdateArgs>(args: SelectSubset<T, ClassSubjectTemplateUpdateArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ClassSubjectTemplates.
     * @param {ClassSubjectTemplateDeleteManyArgs} args - Arguments to filter ClassSubjectTemplates to delete.
     * @example
     * // Delete a few ClassSubjectTemplates
     * const { count } = await prisma.classSubjectTemplate.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ClassSubjectTemplateDeleteManyArgs>(args?: SelectSubset<T, ClassSubjectTemplateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ClassSubjectTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ClassSubjectTemplates
     * const classSubjectTemplate = await prisma.classSubjectTemplate.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ClassSubjectTemplateUpdateManyArgs>(args: SelectSubset<T, ClassSubjectTemplateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ClassSubjectTemplate.
     * @param {ClassSubjectTemplateUpsertArgs} args - Arguments to update or create a ClassSubjectTemplate.
     * @example
     * // Update or create a ClassSubjectTemplate
     * const classSubjectTemplate = await prisma.classSubjectTemplate.upsert({
     *   create: {
     *     // ... data to create a ClassSubjectTemplate
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ClassSubjectTemplate we want to update
     *   }
     * })
     */
    upsert<T extends ClassSubjectTemplateUpsertArgs>(args: SelectSubset<T, ClassSubjectTemplateUpsertArgs<ExtArgs>>): Prisma__ClassSubjectTemplateClient<$Result.GetResult<Prisma.$ClassSubjectTemplatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ClassSubjectTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateCountArgs} args - Arguments to filter ClassSubjectTemplates to count.
     * @example
     * // Count the number of ClassSubjectTemplates
     * const count = await prisma.classSubjectTemplate.count({
     *   where: {
     *     // ... the filter for the ClassSubjectTemplates we want to count
     *   }
     * })
    **/
    count<T extends ClassSubjectTemplateCountArgs>(
      args?: Subset<T, ClassSubjectTemplateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ClassSubjectTemplateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ClassSubjectTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ClassSubjectTemplateAggregateArgs>(args: Subset<T, ClassSubjectTemplateAggregateArgs>): Prisma.PrismaPromise<GetClassSubjectTemplateAggregateType<T>>

    /**
     * Group by ClassSubjectTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSubjectTemplateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ClassSubjectTemplateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ClassSubjectTemplateGroupByArgs['orderBy'] }
        : { orderBy?: ClassSubjectTemplateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ClassSubjectTemplateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetClassSubjectTemplateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ClassSubjectTemplate model
   */
  readonly fields: ClassSubjectTemplateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ClassSubjectTemplate.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ClassSubjectTemplateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    subject<T extends SchoolSubjectDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SchoolSubjectDefaultArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ClassSubjectTemplate model
   */
  interface ClassSubjectTemplateFieldRefs {
    readonly id: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly class_id: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly specialization_id: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly subject_id: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly is_compulsory: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly include_in_result: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly include_in_calculation: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly created_by: FieldRef<"ClassSubjectTemplate", 'Int'>
    readonly created_at: FieldRef<"ClassSubjectTemplate", 'DateTime'>
    readonly updated_at: FieldRef<"ClassSubjectTemplate", 'DateTime'>
    readonly deleted_at: FieldRef<"ClassSubjectTemplate", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ClassSubjectTemplate findUnique
   */
  export type ClassSubjectTemplateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassSubjectTemplate to fetch.
     */
    where: ClassSubjectTemplateWhereUniqueInput
  }

  /**
   * ClassSubjectTemplate findUniqueOrThrow
   */
  export type ClassSubjectTemplateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassSubjectTemplate to fetch.
     */
    where: ClassSubjectTemplateWhereUniqueInput
  }

  /**
   * ClassSubjectTemplate findFirst
   */
  export type ClassSubjectTemplateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassSubjectTemplate to fetch.
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSubjectTemplates to fetch.
     */
    orderBy?: ClassSubjectTemplateOrderByWithRelationInput | ClassSubjectTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassSubjectTemplates.
     */
    cursor?: ClassSubjectTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSubjectTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSubjectTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassSubjectTemplates.
     */
    distinct?: ClassSubjectTemplateScalarFieldEnum | ClassSubjectTemplateScalarFieldEnum[]
  }

  /**
   * ClassSubjectTemplate findFirstOrThrow
   */
  export type ClassSubjectTemplateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassSubjectTemplate to fetch.
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSubjectTemplates to fetch.
     */
    orderBy?: ClassSubjectTemplateOrderByWithRelationInput | ClassSubjectTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassSubjectTemplates.
     */
    cursor?: ClassSubjectTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSubjectTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSubjectTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassSubjectTemplates.
     */
    distinct?: ClassSubjectTemplateScalarFieldEnum | ClassSubjectTemplateScalarFieldEnum[]
  }

  /**
   * ClassSubjectTemplate findMany
   */
  export type ClassSubjectTemplateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter, which ClassSubjectTemplates to fetch.
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSubjectTemplates to fetch.
     */
    orderBy?: ClassSubjectTemplateOrderByWithRelationInput | ClassSubjectTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ClassSubjectTemplates.
     */
    cursor?: ClassSubjectTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSubjectTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSubjectTemplates.
     */
    skip?: number
    distinct?: ClassSubjectTemplateScalarFieldEnum | ClassSubjectTemplateScalarFieldEnum[]
  }

  /**
   * ClassSubjectTemplate create
   */
  export type ClassSubjectTemplateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * The data needed to create a ClassSubjectTemplate.
     */
    data: XOR<ClassSubjectTemplateCreateInput, ClassSubjectTemplateUncheckedCreateInput>
  }

  /**
   * ClassSubjectTemplate createMany
   */
  export type ClassSubjectTemplateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ClassSubjectTemplates.
     */
    data: ClassSubjectTemplateCreateManyInput | ClassSubjectTemplateCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ClassSubjectTemplate update
   */
  export type ClassSubjectTemplateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * The data needed to update a ClassSubjectTemplate.
     */
    data: XOR<ClassSubjectTemplateUpdateInput, ClassSubjectTemplateUncheckedUpdateInput>
    /**
     * Choose, which ClassSubjectTemplate to update.
     */
    where: ClassSubjectTemplateWhereUniqueInput
  }

  /**
   * ClassSubjectTemplate updateMany
   */
  export type ClassSubjectTemplateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ClassSubjectTemplates.
     */
    data: XOR<ClassSubjectTemplateUpdateManyMutationInput, ClassSubjectTemplateUncheckedUpdateManyInput>
    /**
     * Filter which ClassSubjectTemplates to update
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * Limit how many ClassSubjectTemplates to update.
     */
    limit?: number
  }

  /**
   * ClassSubjectTemplate upsert
   */
  export type ClassSubjectTemplateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * The filter to search for the ClassSubjectTemplate to update in case it exists.
     */
    where: ClassSubjectTemplateWhereUniqueInput
    /**
     * In case the ClassSubjectTemplate found by the `where` argument doesn't exist, create a new ClassSubjectTemplate with this data.
     */
    create: XOR<ClassSubjectTemplateCreateInput, ClassSubjectTemplateUncheckedCreateInput>
    /**
     * In case the ClassSubjectTemplate was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ClassSubjectTemplateUpdateInput, ClassSubjectTemplateUncheckedUpdateInput>
  }

  /**
   * ClassSubjectTemplate delete
   */
  export type ClassSubjectTemplateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
    /**
     * Filter which ClassSubjectTemplate to delete.
     */
    where: ClassSubjectTemplateWhereUniqueInput
  }

  /**
   * ClassSubjectTemplate deleteMany
   */
  export type ClassSubjectTemplateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassSubjectTemplates to delete
     */
    where?: ClassSubjectTemplateWhereInput
    /**
     * Limit how many ClassSubjectTemplates to delete.
     */
    limit?: number
  }

  /**
   * ClassSubjectTemplate without action
   */
  export type ClassSubjectTemplateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSubjectTemplate
     */
    select?: ClassSubjectTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSubjectTemplate
     */
    omit?: ClassSubjectTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassSubjectTemplateInclude<ExtArgs> | null
  }


  /**
   * Model SessionClass
   */

  export type AggregateSessionClass = {
    _count: SessionClassCountAggregateOutputType | null
    _avg: SessionClassAvgAggregateOutputType | null
    _sum: SessionClassSumAggregateOutputType | null
    _min: SessionClassMinAggregateOutputType | null
    _max: SessionClassMaxAggregateOutputType | null
  }

  export type SessionClassAvgAggregateOutputType = {
    id: number | null
    session_term_id: number | null
    class_id: number | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    main_treachear: number | null
    created_by: number | null
  }

  export type SessionClassSumAggregateOutputType = {
    id: number | null
    session_term_id: number | null
    class_id: number | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    main_treachear: number | null
    created_by: number | null
  }

  export type SessionClassMinAggregateOutputType = {
    id: number | null
    session_term_id: number | null
    class_id: number | null
    session_class_name: string | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    main_treachear: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassMaxAggregateOutputType = {
    id: number | null
    session_term_id: number | null
    class_id: number | null
    session_class_name: string | null
    no_of_group: number | null
    has_multiple_teacher: number | null
    has_specialization: number | null
    has_optionals_subject: number | null
    main_treachear: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassCountAggregateOutputType = {
    id: number
    session_term_id: number
    class_id: number
    session_class_name: number
    no_of_group: number
    has_multiple_teacher: number
    has_specialization: number
    has_optionals_subject: number
    main_treachear: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SessionClassAvgAggregateInputType = {
    id?: true
    session_term_id?: true
    class_id?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    main_treachear?: true
    created_by?: true
  }

  export type SessionClassSumAggregateInputType = {
    id?: true
    session_term_id?: true
    class_id?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    main_treachear?: true
    created_by?: true
  }

  export type SessionClassMinAggregateInputType = {
    id?: true
    session_term_id?: true
    class_id?: true
    session_class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    main_treachear?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassMaxAggregateInputType = {
    id?: true
    session_term_id?: true
    class_id?: true
    session_class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    main_treachear?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassCountAggregateInputType = {
    id?: true
    session_term_id?: true
    class_id?: true
    session_class_name?: true
    no_of_group?: true
    has_multiple_teacher?: true
    has_specialization?: true
    has_optionals_subject?: true
    main_treachear?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SessionClassAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClass to aggregate.
     */
    where?: SessionClassWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClasses to fetch.
     */
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionClassWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClasses from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClasses.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SessionClasses
    **/
    _count?: true | SessionClassCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionClassAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionClassSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionClassMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionClassMaxAggregateInputType
  }

  export type GetSessionClassAggregateType<T extends SessionClassAggregateArgs> = {
        [P in keyof T & keyof AggregateSessionClass]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSessionClass[P]>
      : GetScalarType<T[P], AggregateSessionClass[P]>
  }




  export type SessionClassGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassWhereInput
    orderBy?: SessionClassOrderByWithAggregationInput | SessionClassOrderByWithAggregationInput[]
    by: SessionClassScalarFieldEnum[] | SessionClassScalarFieldEnum
    having?: SessionClassScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionClassCountAggregateInputType | true
    _avg?: SessionClassAvgAggregateInputType
    _sum?: SessionClassSumAggregateInputType
    _min?: SessionClassMinAggregateInputType
    _max?: SessionClassMaxAggregateInputType
  }

  export type SessionClassGroupByOutputType = {
    id: number
    session_term_id: number
    class_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher: number
    has_specialization: number
    has_optionals_subject: number
    main_treachear: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SessionClassCountAggregateOutputType | null
    _avg: SessionClassAvgAggregateOutputType | null
    _sum: SessionClassSumAggregateOutputType | null
    _min: SessionClassMinAggregateOutputType | null
    _max: SessionClassMaxAggregateOutputType | null
  }

  type GetSessionClassGroupByPayload<T extends SessionClassGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionClassGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionClassGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionClassGroupByOutputType[P]>
            : GetScalarType<T[P], SessionClassGroupByOutputType[P]>
        }
      >
    >


  export type SessionClassSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_term_id?: boolean
    class_id?: boolean
    session_class_name?: boolean
    no_of_group?: boolean
    has_multiple_teacher?: boolean
    has_specialization?: boolean
    has_optionals_subject?: boolean
    main_treachear?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    classdetails?: boolean | SessionClass$classdetailsArgs<ExtArgs>
    sessionterm?: boolean | SessionClass$sessiontermArgs<ExtArgs>
  }, ExtArgs["result"]["sessionClass"]>



  export type SessionClassSelectScalar = {
    id?: boolean
    session_term_id?: boolean
    class_id?: boolean
    session_class_name?: boolean
    no_of_group?: boolean
    has_multiple_teacher?: boolean
    has_specialization?: boolean
    has_optionals_subject?: boolean
    main_treachear?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SessionClassOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_term_id" | "class_id" | "session_class_name" | "no_of_group" | "has_multiple_teacher" | "has_specialization" | "has_optionals_subject" | "main_treachear" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["sessionClass"]>
  export type SessionClassInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    classdetails?: boolean | SessionClass$classdetailsArgs<ExtArgs>
    sessionterm?: boolean | SessionClass$sessiontermArgs<ExtArgs>
  }

  export type $SessionClassPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SessionClass"
    objects: {
      classdetails: Prisma.$ClassTemplatePayload<ExtArgs> | null
      sessionterm: Prisma.$SessionTermPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_term_id: number
      class_id: number
      session_class_name: string
      no_of_group: number
      has_multiple_teacher: number
      has_specialization: number
      has_optionals_subject: number
      main_treachear: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["sessionClass"]>
    composites: {}
  }

  type SessionClassGetPayload<S extends boolean | null | undefined | SessionClassDefaultArgs> = $Result.GetResult<Prisma.$SessionClassPayload, S>

  type SessionClassCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionClassFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionClassCountAggregateInputType | true
    }

  export interface SessionClassDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SessionClass'], meta: { name: 'SessionClass' } }
    /**
     * Find zero or one SessionClass that matches the filter.
     * @param {SessionClassFindUniqueArgs} args - Arguments to find a SessionClass
     * @example
     * // Get one SessionClass
     * const sessionClass = await prisma.sessionClass.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionClassFindUniqueArgs>(args: SelectSubset<T, SessionClassFindUniqueArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SessionClass that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionClassFindUniqueOrThrowArgs} args - Arguments to find a SessionClass
     * @example
     * // Get one SessionClass
     * const sessionClass = await prisma.sessionClass.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionClassFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionClassFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClass that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassFindFirstArgs} args - Arguments to find a SessionClass
     * @example
     * // Get one SessionClass
     * const sessionClass = await prisma.sessionClass.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionClassFindFirstArgs>(args?: SelectSubset<T, SessionClassFindFirstArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClass that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassFindFirstOrThrowArgs} args - Arguments to find a SessionClass
     * @example
     * // Get one SessionClass
     * const sessionClass = await prisma.sessionClass.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionClassFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionClassFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SessionClasses that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SessionClasses
     * const sessionClasses = await prisma.sessionClass.findMany()
     * 
     * // Get first 10 SessionClasses
     * const sessionClasses = await prisma.sessionClass.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionClassWithIdOnly = await prisma.sessionClass.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionClassFindManyArgs>(args?: SelectSubset<T, SessionClassFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SessionClass.
     * @param {SessionClassCreateArgs} args - Arguments to create a SessionClass.
     * @example
     * // Create one SessionClass
     * const SessionClass = await prisma.sessionClass.create({
     *   data: {
     *     // ... data to create a SessionClass
     *   }
     * })
     * 
     */
    create<T extends SessionClassCreateArgs>(args: SelectSubset<T, SessionClassCreateArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SessionClasses.
     * @param {SessionClassCreateManyArgs} args - Arguments to create many SessionClasses.
     * @example
     * // Create many SessionClasses
     * const sessionClass = await prisma.sessionClass.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionClassCreateManyArgs>(args?: SelectSubset<T, SessionClassCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SessionClass.
     * @param {SessionClassDeleteArgs} args - Arguments to delete one SessionClass.
     * @example
     * // Delete one SessionClass
     * const SessionClass = await prisma.sessionClass.delete({
     *   where: {
     *     // ... filter to delete one SessionClass
     *   }
     * })
     * 
     */
    delete<T extends SessionClassDeleteArgs>(args: SelectSubset<T, SessionClassDeleteArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SessionClass.
     * @param {SessionClassUpdateArgs} args - Arguments to update one SessionClass.
     * @example
     * // Update one SessionClass
     * const sessionClass = await prisma.sessionClass.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionClassUpdateArgs>(args: SelectSubset<T, SessionClassUpdateArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SessionClasses.
     * @param {SessionClassDeleteManyArgs} args - Arguments to filter SessionClasses to delete.
     * @example
     * // Delete a few SessionClasses
     * const { count } = await prisma.sessionClass.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionClassDeleteManyArgs>(args?: SelectSubset<T, SessionClassDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SessionClasses.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SessionClasses
     * const sessionClass = await prisma.sessionClass.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionClassUpdateManyArgs>(args: SelectSubset<T, SessionClassUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SessionClass.
     * @param {SessionClassUpsertArgs} args - Arguments to update or create a SessionClass.
     * @example
     * // Update or create a SessionClass
     * const sessionClass = await prisma.sessionClass.upsert({
     *   create: {
     *     // ... data to create a SessionClass
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SessionClass we want to update
     *   }
     * })
     */
    upsert<T extends SessionClassUpsertArgs>(args: SelectSubset<T, SessionClassUpsertArgs<ExtArgs>>): Prisma__SessionClassClient<$Result.GetResult<Prisma.$SessionClassPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SessionClasses.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassCountArgs} args - Arguments to filter SessionClasses to count.
     * @example
     * // Count the number of SessionClasses
     * const count = await prisma.sessionClass.count({
     *   where: {
     *     // ... the filter for the SessionClasses we want to count
     *   }
     * })
    **/
    count<T extends SessionClassCountArgs>(
      args?: Subset<T, SessionClassCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionClassCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SessionClass.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionClassAggregateArgs>(args: Subset<T, SessionClassAggregateArgs>): Prisma.PrismaPromise<GetSessionClassAggregateType<T>>

    /**
     * Group by SessionClass.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionClassGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionClassGroupByArgs['orderBy'] }
        : { orderBy?: SessionClassGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionClassGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionClassGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SessionClass model
   */
  readonly fields: SessionClassFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SessionClass.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionClassClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    classdetails<T extends SessionClass$classdetailsArgs<ExtArgs> = {}>(args?: Subset<T, SessionClass$classdetailsArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    sessionterm<T extends SessionClass$sessiontermArgs<ExtArgs> = {}>(args?: Subset<T, SessionClass$sessiontermArgs<ExtArgs>>): Prisma__SessionTermClient<$Result.GetResult<Prisma.$SessionTermPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SessionClass model
   */
  interface SessionClassFieldRefs {
    readonly id: FieldRef<"SessionClass", 'Int'>
    readonly session_term_id: FieldRef<"SessionClass", 'Int'>
    readonly class_id: FieldRef<"SessionClass", 'Int'>
    readonly session_class_name: FieldRef<"SessionClass", 'String'>
    readonly no_of_group: FieldRef<"SessionClass", 'Int'>
    readonly has_multiple_teacher: FieldRef<"SessionClass", 'Int'>
    readonly has_specialization: FieldRef<"SessionClass", 'Int'>
    readonly has_optionals_subject: FieldRef<"SessionClass", 'Int'>
    readonly main_treachear: FieldRef<"SessionClass", 'Int'>
    readonly created_by: FieldRef<"SessionClass", 'Int'>
    readonly created_at: FieldRef<"SessionClass", 'DateTime'>
    readonly updated_at: FieldRef<"SessionClass", 'DateTime'>
    readonly deleted_at: FieldRef<"SessionClass", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SessionClass findUnique
   */
  export type SessionClassFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter, which SessionClass to fetch.
     */
    where: SessionClassWhereUniqueInput
  }

  /**
   * SessionClass findUniqueOrThrow
   */
  export type SessionClassFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter, which SessionClass to fetch.
     */
    where: SessionClassWhereUniqueInput
  }

  /**
   * SessionClass findFirst
   */
  export type SessionClassFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter, which SessionClass to fetch.
     */
    where?: SessionClassWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClasses to fetch.
     */
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClasses.
     */
    cursor?: SessionClassWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClasses from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClasses.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClasses.
     */
    distinct?: SessionClassScalarFieldEnum | SessionClassScalarFieldEnum[]
  }

  /**
   * SessionClass findFirstOrThrow
   */
  export type SessionClassFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter, which SessionClass to fetch.
     */
    where?: SessionClassWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClasses to fetch.
     */
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClasses.
     */
    cursor?: SessionClassWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClasses from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClasses.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClasses.
     */
    distinct?: SessionClassScalarFieldEnum | SessionClassScalarFieldEnum[]
  }

  /**
   * SessionClass findMany
   */
  export type SessionClassFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter, which SessionClasses to fetch.
     */
    where?: SessionClassWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClasses to fetch.
     */
    orderBy?: SessionClassOrderByWithRelationInput | SessionClassOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SessionClasses.
     */
    cursor?: SessionClassWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClasses from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClasses.
     */
    skip?: number
    distinct?: SessionClassScalarFieldEnum | SessionClassScalarFieldEnum[]
  }

  /**
   * SessionClass create
   */
  export type SessionClassCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * The data needed to create a SessionClass.
     */
    data: XOR<SessionClassCreateInput, SessionClassUncheckedCreateInput>
  }

  /**
   * SessionClass createMany
   */
  export type SessionClassCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SessionClasses.
     */
    data: SessionClassCreateManyInput | SessionClassCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SessionClass update
   */
  export type SessionClassUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * The data needed to update a SessionClass.
     */
    data: XOR<SessionClassUpdateInput, SessionClassUncheckedUpdateInput>
    /**
     * Choose, which SessionClass to update.
     */
    where: SessionClassWhereUniqueInput
  }

  /**
   * SessionClass updateMany
   */
  export type SessionClassUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SessionClasses.
     */
    data: XOR<SessionClassUpdateManyMutationInput, SessionClassUncheckedUpdateManyInput>
    /**
     * Filter which SessionClasses to update
     */
    where?: SessionClassWhereInput
    /**
     * Limit how many SessionClasses to update.
     */
    limit?: number
  }

  /**
   * SessionClass upsert
   */
  export type SessionClassUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * The filter to search for the SessionClass to update in case it exists.
     */
    where: SessionClassWhereUniqueInput
    /**
     * In case the SessionClass found by the `where` argument doesn't exist, create a new SessionClass with this data.
     */
    create: XOR<SessionClassCreateInput, SessionClassUncheckedCreateInput>
    /**
     * In case the SessionClass was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionClassUpdateInput, SessionClassUncheckedUpdateInput>
  }

  /**
   * SessionClass delete
   */
  export type SessionClassDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
    /**
     * Filter which SessionClass to delete.
     */
    where: SessionClassWhereUniqueInput
  }

  /**
   * SessionClass deleteMany
   */
  export type SessionClassDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClasses to delete
     */
    where?: SessionClassWhereInput
    /**
     * Limit how many SessionClasses to delete.
     */
    limit?: number
  }

  /**
   * SessionClass.classdetails
   */
  export type SessionClass$classdetailsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    where?: ClassTemplateWhereInput
  }

  /**
   * SessionClass.sessionterm
   */
  export type SessionClass$sessiontermArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionTerm
     */
    select?: SessionTermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionTerm
     */
    omit?: SessionTermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionTermInclude<ExtArgs> | null
    where?: SessionTermWhereInput
  }

  /**
   * SessionClass without action
   */
  export type SessionClassDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClass
     */
    select?: SessionClassSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClass
     */
    omit?: SessionClassOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassInclude<ExtArgs> | null
  }


  /**
   * Model SessionClassSubject
   */

  export type AggregateSessionClassSubject = {
    _count: SessionClassSubjectCountAggregateOutputType | null
    _avg: SessionClassSubjectAvgAggregateOutputType | null
    _sum: SessionClassSubjectSumAggregateOutputType | null
    _min: SessionClassSubjectMinAggregateOutputType | null
    _max: SessionClassSubjectMaxAggregateOutputType | null
  }

  export type SessionClassSubjectAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
  }

  export type SessionClassSubjectSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
  }

  export type SessionClassSubjectMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassSubjectMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    subject_id: number | null
    is_compulsory: number | null
    include_in_result: number | null
    include_in_calculation: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassSubjectCountAggregateOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory: number
    include_in_result: number
    include_in_calculation: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SessionClassSubjectAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
  }

  export type SessionClassSubjectSumAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
  }

  export type SessionClassSubjectMinAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassSubjectMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassSubjectCountAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    subject_id?: true
    is_compulsory?: true
    include_in_result?: true
    include_in_calculation?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SessionClassSubjectAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassSubject to aggregate.
     */
    where?: SessionClassSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassSubjects to fetch.
     */
    orderBy?: SessionClassSubjectOrderByWithRelationInput | SessionClassSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionClassSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SessionClassSubjects
    **/
    _count?: true | SessionClassSubjectCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionClassSubjectAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionClassSubjectSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionClassSubjectMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionClassSubjectMaxAggregateInputType
  }

  export type GetSessionClassSubjectAggregateType<T extends SessionClassSubjectAggregateArgs> = {
        [P in keyof T & keyof AggregateSessionClassSubject]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSessionClassSubject[P]>
      : GetScalarType<T[P], AggregateSessionClassSubject[P]>
  }




  export type SessionClassSubjectGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassSubjectWhereInput
    orderBy?: SessionClassSubjectOrderByWithAggregationInput | SessionClassSubjectOrderByWithAggregationInput[]
    by: SessionClassSubjectScalarFieldEnum[] | SessionClassSubjectScalarFieldEnum
    having?: SessionClassSubjectScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionClassSubjectCountAggregateInputType | true
    _avg?: SessionClassSubjectAvgAggregateInputType
    _sum?: SessionClassSubjectSumAggregateInputType
    _min?: SessionClassSubjectMinAggregateInputType
    _max?: SessionClassSubjectMaxAggregateInputType
  }

  export type SessionClassSubjectGroupByOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory: number
    include_in_result: number
    include_in_calculation: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SessionClassSubjectCountAggregateOutputType | null
    _avg: SessionClassSubjectAvgAggregateOutputType | null
    _sum: SessionClassSubjectSumAggregateOutputType | null
    _min: SessionClassSubjectMinAggregateOutputType | null
    _max: SessionClassSubjectMaxAggregateOutputType | null
  }

  type GetSessionClassSubjectGroupByPayload<T extends SessionClassSubjectGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionClassSubjectGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionClassSubjectGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionClassSubjectGroupByOutputType[P]>
            : GetScalarType<T[P], SessionClassSubjectGroupByOutputType[P]>
        }
      >
    >


  export type SessionClassSubjectSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    subject_id?: boolean
    is_compulsory?: boolean
    include_in_result?: boolean
    include_in_calculation?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    subject?: boolean | SchoolSubjectDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["sessionClassSubject"]>



  export type SessionClassSubjectSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    subject_id?: boolean
    is_compulsory?: boolean
    include_in_result?: boolean
    include_in_calculation?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SessionClassSubjectOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "specialization_id" | "subject_id" | "is_compulsory" | "include_in_result" | "include_in_calculation" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["sessionClassSubject"]>
  export type SessionClassSubjectInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    subject?: boolean | SchoolSubjectDefaultArgs<ExtArgs>
  }

  export type $SessionClassSubjectPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SessionClassSubject"
    objects: {
      subject: Prisma.$SchoolSubjectPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      specialization_id: number
      subject_id: number
      is_compulsory: number
      include_in_result: number
      include_in_calculation: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["sessionClassSubject"]>
    composites: {}
  }

  type SessionClassSubjectGetPayload<S extends boolean | null | undefined | SessionClassSubjectDefaultArgs> = $Result.GetResult<Prisma.$SessionClassSubjectPayload, S>

  type SessionClassSubjectCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionClassSubjectFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionClassSubjectCountAggregateInputType | true
    }

  export interface SessionClassSubjectDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SessionClassSubject'], meta: { name: 'SessionClassSubject' } }
    /**
     * Find zero or one SessionClassSubject that matches the filter.
     * @param {SessionClassSubjectFindUniqueArgs} args - Arguments to find a SessionClassSubject
     * @example
     * // Get one SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionClassSubjectFindUniqueArgs>(args: SelectSubset<T, SessionClassSubjectFindUniqueArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SessionClassSubject that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionClassSubjectFindUniqueOrThrowArgs} args - Arguments to find a SessionClassSubject
     * @example
     * // Get one SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionClassSubjectFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionClassSubjectFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassSubject that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectFindFirstArgs} args - Arguments to find a SessionClassSubject
     * @example
     * // Get one SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionClassSubjectFindFirstArgs>(args?: SelectSubset<T, SessionClassSubjectFindFirstArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassSubject that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectFindFirstOrThrowArgs} args - Arguments to find a SessionClassSubject
     * @example
     * // Get one SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionClassSubjectFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionClassSubjectFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SessionClassSubjects that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SessionClassSubjects
     * const sessionClassSubjects = await prisma.sessionClassSubject.findMany()
     * 
     * // Get first 10 SessionClassSubjects
     * const sessionClassSubjects = await prisma.sessionClassSubject.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionClassSubjectWithIdOnly = await prisma.sessionClassSubject.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionClassSubjectFindManyArgs>(args?: SelectSubset<T, SessionClassSubjectFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SessionClassSubject.
     * @param {SessionClassSubjectCreateArgs} args - Arguments to create a SessionClassSubject.
     * @example
     * // Create one SessionClassSubject
     * const SessionClassSubject = await prisma.sessionClassSubject.create({
     *   data: {
     *     // ... data to create a SessionClassSubject
     *   }
     * })
     * 
     */
    create<T extends SessionClassSubjectCreateArgs>(args: SelectSubset<T, SessionClassSubjectCreateArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SessionClassSubjects.
     * @param {SessionClassSubjectCreateManyArgs} args - Arguments to create many SessionClassSubjects.
     * @example
     * // Create many SessionClassSubjects
     * const sessionClassSubject = await prisma.sessionClassSubject.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionClassSubjectCreateManyArgs>(args?: SelectSubset<T, SessionClassSubjectCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SessionClassSubject.
     * @param {SessionClassSubjectDeleteArgs} args - Arguments to delete one SessionClassSubject.
     * @example
     * // Delete one SessionClassSubject
     * const SessionClassSubject = await prisma.sessionClassSubject.delete({
     *   where: {
     *     // ... filter to delete one SessionClassSubject
     *   }
     * })
     * 
     */
    delete<T extends SessionClassSubjectDeleteArgs>(args: SelectSubset<T, SessionClassSubjectDeleteArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SessionClassSubject.
     * @param {SessionClassSubjectUpdateArgs} args - Arguments to update one SessionClassSubject.
     * @example
     * // Update one SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionClassSubjectUpdateArgs>(args: SelectSubset<T, SessionClassSubjectUpdateArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SessionClassSubjects.
     * @param {SessionClassSubjectDeleteManyArgs} args - Arguments to filter SessionClassSubjects to delete.
     * @example
     * // Delete a few SessionClassSubjects
     * const { count } = await prisma.sessionClassSubject.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionClassSubjectDeleteManyArgs>(args?: SelectSubset<T, SessionClassSubjectDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SessionClassSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SessionClassSubjects
     * const sessionClassSubject = await prisma.sessionClassSubject.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionClassSubjectUpdateManyArgs>(args: SelectSubset<T, SessionClassSubjectUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SessionClassSubject.
     * @param {SessionClassSubjectUpsertArgs} args - Arguments to update or create a SessionClassSubject.
     * @example
     * // Update or create a SessionClassSubject
     * const sessionClassSubject = await prisma.sessionClassSubject.upsert({
     *   create: {
     *     // ... data to create a SessionClassSubject
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SessionClassSubject we want to update
     *   }
     * })
     */
    upsert<T extends SessionClassSubjectUpsertArgs>(args: SelectSubset<T, SessionClassSubjectUpsertArgs<ExtArgs>>): Prisma__SessionClassSubjectClient<$Result.GetResult<Prisma.$SessionClassSubjectPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SessionClassSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectCountArgs} args - Arguments to filter SessionClassSubjects to count.
     * @example
     * // Count the number of SessionClassSubjects
     * const count = await prisma.sessionClassSubject.count({
     *   where: {
     *     // ... the filter for the SessionClassSubjects we want to count
     *   }
     * })
    **/
    count<T extends SessionClassSubjectCountArgs>(
      args?: Subset<T, SessionClassSubjectCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionClassSubjectCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SessionClassSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionClassSubjectAggregateArgs>(args: Subset<T, SessionClassSubjectAggregateArgs>): Prisma.PrismaPromise<GetSessionClassSubjectAggregateType<T>>

    /**
     * Group by SessionClassSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassSubjectGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionClassSubjectGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionClassSubjectGroupByArgs['orderBy'] }
        : { orderBy?: SessionClassSubjectGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionClassSubjectGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionClassSubjectGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SessionClassSubject model
   */
  readonly fields: SessionClassSubjectFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SessionClassSubject.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionClassSubjectClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    subject<T extends SchoolSubjectDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SchoolSubjectDefaultArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SessionClassSubject model
   */
  interface SessionClassSubjectFieldRefs {
    readonly id: FieldRef<"SessionClassSubject", 'Int'>
    readonly session_class_id: FieldRef<"SessionClassSubject", 'Int'>
    readonly specialization_id: FieldRef<"SessionClassSubject", 'Int'>
    readonly subject_id: FieldRef<"SessionClassSubject", 'Int'>
    readonly is_compulsory: FieldRef<"SessionClassSubject", 'Int'>
    readonly include_in_result: FieldRef<"SessionClassSubject", 'Int'>
    readonly include_in_calculation: FieldRef<"SessionClassSubject", 'Int'>
    readonly created_by: FieldRef<"SessionClassSubject", 'Int'>
    readonly created_at: FieldRef<"SessionClassSubject", 'DateTime'>
    readonly updated_at: FieldRef<"SessionClassSubject", 'DateTime'>
    readonly deleted_at: FieldRef<"SessionClassSubject", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SessionClassSubject findUnique
   */
  export type SessionClassSubjectFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassSubject to fetch.
     */
    where: SessionClassSubjectWhereUniqueInput
  }

  /**
   * SessionClassSubject findUniqueOrThrow
   */
  export type SessionClassSubjectFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassSubject to fetch.
     */
    where: SessionClassSubjectWhereUniqueInput
  }

  /**
   * SessionClassSubject findFirst
   */
  export type SessionClassSubjectFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassSubject to fetch.
     */
    where?: SessionClassSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassSubjects to fetch.
     */
    orderBy?: SessionClassSubjectOrderByWithRelationInput | SessionClassSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassSubjects.
     */
    cursor?: SessionClassSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassSubjects.
     */
    distinct?: SessionClassSubjectScalarFieldEnum | SessionClassSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassSubject findFirstOrThrow
   */
  export type SessionClassSubjectFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassSubject to fetch.
     */
    where?: SessionClassSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassSubjects to fetch.
     */
    orderBy?: SessionClassSubjectOrderByWithRelationInput | SessionClassSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassSubjects.
     */
    cursor?: SessionClassSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassSubjects.
     */
    distinct?: SessionClassSubjectScalarFieldEnum | SessionClassSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassSubject findMany
   */
  export type SessionClassSubjectFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassSubjects to fetch.
     */
    where?: SessionClassSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassSubjects to fetch.
     */
    orderBy?: SessionClassSubjectOrderByWithRelationInput | SessionClassSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SessionClassSubjects.
     */
    cursor?: SessionClassSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassSubjects.
     */
    skip?: number
    distinct?: SessionClassSubjectScalarFieldEnum | SessionClassSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassSubject create
   */
  export type SessionClassSubjectCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * The data needed to create a SessionClassSubject.
     */
    data: XOR<SessionClassSubjectCreateInput, SessionClassSubjectUncheckedCreateInput>
  }

  /**
   * SessionClassSubject createMany
   */
  export type SessionClassSubjectCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SessionClassSubjects.
     */
    data: SessionClassSubjectCreateManyInput | SessionClassSubjectCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SessionClassSubject update
   */
  export type SessionClassSubjectUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * The data needed to update a SessionClassSubject.
     */
    data: XOR<SessionClassSubjectUpdateInput, SessionClassSubjectUncheckedUpdateInput>
    /**
     * Choose, which SessionClassSubject to update.
     */
    where: SessionClassSubjectWhereUniqueInput
  }

  /**
   * SessionClassSubject updateMany
   */
  export type SessionClassSubjectUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SessionClassSubjects.
     */
    data: XOR<SessionClassSubjectUpdateManyMutationInput, SessionClassSubjectUncheckedUpdateManyInput>
    /**
     * Filter which SessionClassSubjects to update
     */
    where?: SessionClassSubjectWhereInput
    /**
     * Limit how many SessionClassSubjects to update.
     */
    limit?: number
  }

  /**
   * SessionClassSubject upsert
   */
  export type SessionClassSubjectUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * The filter to search for the SessionClassSubject to update in case it exists.
     */
    where: SessionClassSubjectWhereUniqueInput
    /**
     * In case the SessionClassSubject found by the `where` argument doesn't exist, create a new SessionClassSubject with this data.
     */
    create: XOR<SessionClassSubjectCreateInput, SessionClassSubjectUncheckedCreateInput>
    /**
     * In case the SessionClassSubject was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionClassSubjectUpdateInput, SessionClassSubjectUncheckedUpdateInput>
  }

  /**
   * SessionClassSubject delete
   */
  export type SessionClassSubjectDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
    /**
     * Filter which SessionClassSubject to delete.
     */
    where: SessionClassSubjectWhereUniqueInput
  }

  /**
   * SessionClassSubject deleteMany
   */
  export type SessionClassSubjectDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassSubjects to delete
     */
    where?: SessionClassSubjectWhereInput
    /**
     * Limit how many SessionClassSubjects to delete.
     */
    limit?: number
  }

  /**
   * SessionClassSubject without action
   */
  export type SessionClassSubjectDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassSubject
     */
    select?: SessionClassSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassSubject
     */
    omit?: SessionClassSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassSubjectInclude<ExtArgs> | null
  }


  /**
   * Model SessionClassStudentSubject
   */

  export type AggregateSessionClassStudentSubject = {
    _count: SessionClassStudentSubjectCountAggregateOutputType | null
    _avg: SessionClassStudentSubjectAvgAggregateOutputType | null
    _sum: SessionClassStudentSubjectSumAggregateOutputType | null
    _min: SessionClassStudentSubjectMinAggregateOutputType | null
    _max: SessionClassStudentSubjectMaxAggregateOutputType | null
  }

  export type SessionClassStudentSubjectAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    subject_id: number | null
    student_id: number | null
    created_by: number | null
  }

  export type SessionClassStudentSubjectSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    subject_id: number | null
    student_id: number | null
    created_by: number | null
  }

  export type SessionClassStudentSubjectMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    subject_id: number | null
    student_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassStudentSubjectMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    subject_id: number | null
    student_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassStudentSubjectCountAggregateOutputType = {
    id: number
    session_class_id: number
    subject_id: number
    student_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SessionClassStudentSubjectAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    subject_id?: true
    student_id?: true
    created_by?: true
  }

  export type SessionClassStudentSubjectSumAggregateInputType = {
    id?: true
    session_class_id?: true
    subject_id?: true
    student_id?: true
    created_by?: true
  }

  export type SessionClassStudentSubjectMinAggregateInputType = {
    id?: true
    session_class_id?: true
    subject_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassStudentSubjectMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    subject_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassStudentSubjectCountAggregateInputType = {
    id?: true
    session_class_id?: true
    subject_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SessionClassStudentSubjectAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassStudentSubject to aggregate.
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassStudentSubjects to fetch.
     */
    orderBy?: SessionClassStudentSubjectOrderByWithRelationInput | SessionClassStudentSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionClassStudentSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassStudentSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassStudentSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SessionClassStudentSubjects
    **/
    _count?: true | SessionClassStudentSubjectCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionClassStudentSubjectAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionClassStudentSubjectSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionClassStudentSubjectMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionClassStudentSubjectMaxAggregateInputType
  }

  export type GetSessionClassStudentSubjectAggregateType<T extends SessionClassStudentSubjectAggregateArgs> = {
        [P in keyof T & keyof AggregateSessionClassStudentSubject]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSessionClassStudentSubject[P]>
      : GetScalarType<T[P], AggregateSessionClassStudentSubject[P]>
  }




  export type SessionClassStudentSubjectGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassStudentSubjectWhereInput
    orderBy?: SessionClassStudentSubjectOrderByWithAggregationInput | SessionClassStudentSubjectOrderByWithAggregationInput[]
    by: SessionClassStudentSubjectScalarFieldEnum[] | SessionClassStudentSubjectScalarFieldEnum
    having?: SessionClassStudentSubjectScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionClassStudentSubjectCountAggregateInputType | true
    _avg?: SessionClassStudentSubjectAvgAggregateInputType
    _sum?: SessionClassStudentSubjectSumAggregateInputType
    _min?: SessionClassStudentSubjectMinAggregateInputType
    _max?: SessionClassStudentSubjectMaxAggregateInputType
  }

  export type SessionClassStudentSubjectGroupByOutputType = {
    id: number
    session_class_id: number
    subject_id: number
    student_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SessionClassStudentSubjectCountAggregateOutputType | null
    _avg: SessionClassStudentSubjectAvgAggregateOutputType | null
    _sum: SessionClassStudentSubjectSumAggregateOutputType | null
    _min: SessionClassStudentSubjectMinAggregateOutputType | null
    _max: SessionClassStudentSubjectMaxAggregateOutputType | null
  }

  type GetSessionClassStudentSubjectGroupByPayload<T extends SessionClassStudentSubjectGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionClassStudentSubjectGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionClassStudentSubjectGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionClassStudentSubjectGroupByOutputType[P]>
            : GetScalarType<T[P], SessionClassStudentSubjectGroupByOutputType[P]>
        }
      >
    >


  export type SessionClassStudentSubjectSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    subject_id?: boolean
    student_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["sessionClassStudentSubject"]>



  export type SessionClassStudentSubjectSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    subject_id?: boolean
    student_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SessionClassStudentSubjectOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "subject_id" | "student_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["sessionClassStudentSubject"]>

  export type $SessionClassStudentSubjectPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SessionClassStudentSubject"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      subject_id: number
      student_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["sessionClassStudentSubject"]>
    composites: {}
  }

  type SessionClassStudentSubjectGetPayload<S extends boolean | null | undefined | SessionClassStudentSubjectDefaultArgs> = $Result.GetResult<Prisma.$SessionClassStudentSubjectPayload, S>

  type SessionClassStudentSubjectCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionClassStudentSubjectFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionClassStudentSubjectCountAggregateInputType | true
    }

  export interface SessionClassStudentSubjectDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SessionClassStudentSubject'], meta: { name: 'SessionClassStudentSubject' } }
    /**
     * Find zero or one SessionClassStudentSubject that matches the filter.
     * @param {SessionClassStudentSubjectFindUniqueArgs} args - Arguments to find a SessionClassStudentSubject
     * @example
     * // Get one SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionClassStudentSubjectFindUniqueArgs>(args: SelectSubset<T, SessionClassStudentSubjectFindUniqueArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SessionClassStudentSubject that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionClassStudentSubjectFindUniqueOrThrowArgs} args - Arguments to find a SessionClassStudentSubject
     * @example
     * // Get one SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionClassStudentSubjectFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionClassStudentSubjectFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassStudentSubject that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectFindFirstArgs} args - Arguments to find a SessionClassStudentSubject
     * @example
     * // Get one SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionClassStudentSubjectFindFirstArgs>(args?: SelectSubset<T, SessionClassStudentSubjectFindFirstArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassStudentSubject that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectFindFirstOrThrowArgs} args - Arguments to find a SessionClassStudentSubject
     * @example
     * // Get one SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionClassStudentSubjectFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionClassStudentSubjectFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SessionClassStudentSubjects that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SessionClassStudentSubjects
     * const sessionClassStudentSubjects = await prisma.sessionClassStudentSubject.findMany()
     * 
     * // Get first 10 SessionClassStudentSubjects
     * const sessionClassStudentSubjects = await prisma.sessionClassStudentSubject.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionClassStudentSubjectWithIdOnly = await prisma.sessionClassStudentSubject.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionClassStudentSubjectFindManyArgs>(args?: SelectSubset<T, SessionClassStudentSubjectFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SessionClassStudentSubject.
     * @param {SessionClassStudentSubjectCreateArgs} args - Arguments to create a SessionClassStudentSubject.
     * @example
     * // Create one SessionClassStudentSubject
     * const SessionClassStudentSubject = await prisma.sessionClassStudentSubject.create({
     *   data: {
     *     // ... data to create a SessionClassStudentSubject
     *   }
     * })
     * 
     */
    create<T extends SessionClassStudentSubjectCreateArgs>(args: SelectSubset<T, SessionClassStudentSubjectCreateArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SessionClassStudentSubjects.
     * @param {SessionClassStudentSubjectCreateManyArgs} args - Arguments to create many SessionClassStudentSubjects.
     * @example
     * // Create many SessionClassStudentSubjects
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionClassStudentSubjectCreateManyArgs>(args?: SelectSubset<T, SessionClassStudentSubjectCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SessionClassStudentSubject.
     * @param {SessionClassStudentSubjectDeleteArgs} args - Arguments to delete one SessionClassStudentSubject.
     * @example
     * // Delete one SessionClassStudentSubject
     * const SessionClassStudentSubject = await prisma.sessionClassStudentSubject.delete({
     *   where: {
     *     // ... filter to delete one SessionClassStudentSubject
     *   }
     * })
     * 
     */
    delete<T extends SessionClassStudentSubjectDeleteArgs>(args: SelectSubset<T, SessionClassStudentSubjectDeleteArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SessionClassStudentSubject.
     * @param {SessionClassStudentSubjectUpdateArgs} args - Arguments to update one SessionClassStudentSubject.
     * @example
     * // Update one SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionClassStudentSubjectUpdateArgs>(args: SelectSubset<T, SessionClassStudentSubjectUpdateArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SessionClassStudentSubjects.
     * @param {SessionClassStudentSubjectDeleteManyArgs} args - Arguments to filter SessionClassStudentSubjects to delete.
     * @example
     * // Delete a few SessionClassStudentSubjects
     * const { count } = await prisma.sessionClassStudentSubject.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionClassStudentSubjectDeleteManyArgs>(args?: SelectSubset<T, SessionClassStudentSubjectDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SessionClassStudentSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SessionClassStudentSubjects
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionClassStudentSubjectUpdateManyArgs>(args: SelectSubset<T, SessionClassStudentSubjectUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SessionClassStudentSubject.
     * @param {SessionClassStudentSubjectUpsertArgs} args - Arguments to update or create a SessionClassStudentSubject.
     * @example
     * // Update or create a SessionClassStudentSubject
     * const sessionClassStudentSubject = await prisma.sessionClassStudentSubject.upsert({
     *   create: {
     *     // ... data to create a SessionClassStudentSubject
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SessionClassStudentSubject we want to update
     *   }
     * })
     */
    upsert<T extends SessionClassStudentSubjectUpsertArgs>(args: SelectSubset<T, SessionClassStudentSubjectUpsertArgs<ExtArgs>>): Prisma__SessionClassStudentSubjectClient<$Result.GetResult<Prisma.$SessionClassStudentSubjectPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SessionClassStudentSubjects.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectCountArgs} args - Arguments to filter SessionClassStudentSubjects to count.
     * @example
     * // Count the number of SessionClassStudentSubjects
     * const count = await prisma.sessionClassStudentSubject.count({
     *   where: {
     *     // ... the filter for the SessionClassStudentSubjects we want to count
     *   }
     * })
    **/
    count<T extends SessionClassStudentSubjectCountArgs>(
      args?: Subset<T, SessionClassStudentSubjectCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionClassStudentSubjectCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SessionClassStudentSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionClassStudentSubjectAggregateArgs>(args: Subset<T, SessionClassStudentSubjectAggregateArgs>): Prisma.PrismaPromise<GetSessionClassStudentSubjectAggregateType<T>>

    /**
     * Group by SessionClassStudentSubject.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassStudentSubjectGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionClassStudentSubjectGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionClassStudentSubjectGroupByArgs['orderBy'] }
        : { orderBy?: SessionClassStudentSubjectGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionClassStudentSubjectGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionClassStudentSubjectGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SessionClassStudentSubject model
   */
  readonly fields: SessionClassStudentSubjectFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SessionClassStudentSubject.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionClassStudentSubjectClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SessionClassStudentSubject model
   */
  interface SessionClassStudentSubjectFieldRefs {
    readonly id: FieldRef<"SessionClassStudentSubject", 'Int'>
    readonly session_class_id: FieldRef<"SessionClassStudentSubject", 'Int'>
    readonly subject_id: FieldRef<"SessionClassStudentSubject", 'Int'>
    readonly student_id: FieldRef<"SessionClassStudentSubject", 'Int'>
    readonly created_by: FieldRef<"SessionClassStudentSubject", 'Int'>
    readonly created_at: FieldRef<"SessionClassStudentSubject", 'DateTime'>
    readonly updated_at: FieldRef<"SessionClassStudentSubject", 'DateTime'>
    readonly deleted_at: FieldRef<"SessionClassStudentSubject", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SessionClassStudentSubject findUnique
   */
  export type SessionClassStudentSubjectFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter, which SessionClassStudentSubject to fetch.
     */
    where: SessionClassStudentSubjectWhereUniqueInput
  }

  /**
   * SessionClassStudentSubject findUniqueOrThrow
   */
  export type SessionClassStudentSubjectFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter, which SessionClassStudentSubject to fetch.
     */
    where: SessionClassStudentSubjectWhereUniqueInput
  }

  /**
   * SessionClassStudentSubject findFirst
   */
  export type SessionClassStudentSubjectFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter, which SessionClassStudentSubject to fetch.
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassStudentSubjects to fetch.
     */
    orderBy?: SessionClassStudentSubjectOrderByWithRelationInput | SessionClassStudentSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassStudentSubjects.
     */
    cursor?: SessionClassStudentSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassStudentSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassStudentSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassStudentSubjects.
     */
    distinct?: SessionClassStudentSubjectScalarFieldEnum | SessionClassStudentSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassStudentSubject findFirstOrThrow
   */
  export type SessionClassStudentSubjectFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter, which SessionClassStudentSubject to fetch.
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassStudentSubjects to fetch.
     */
    orderBy?: SessionClassStudentSubjectOrderByWithRelationInput | SessionClassStudentSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassStudentSubjects.
     */
    cursor?: SessionClassStudentSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassStudentSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassStudentSubjects.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassStudentSubjects.
     */
    distinct?: SessionClassStudentSubjectScalarFieldEnum | SessionClassStudentSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassStudentSubject findMany
   */
  export type SessionClassStudentSubjectFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter, which SessionClassStudentSubjects to fetch.
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassStudentSubjects to fetch.
     */
    orderBy?: SessionClassStudentSubjectOrderByWithRelationInput | SessionClassStudentSubjectOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SessionClassStudentSubjects.
     */
    cursor?: SessionClassStudentSubjectWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassStudentSubjects from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassStudentSubjects.
     */
    skip?: number
    distinct?: SessionClassStudentSubjectScalarFieldEnum | SessionClassStudentSubjectScalarFieldEnum[]
  }

  /**
   * SessionClassStudentSubject create
   */
  export type SessionClassStudentSubjectCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * The data needed to create a SessionClassStudentSubject.
     */
    data: XOR<SessionClassStudentSubjectCreateInput, SessionClassStudentSubjectUncheckedCreateInput>
  }

  /**
   * SessionClassStudentSubject createMany
   */
  export type SessionClassStudentSubjectCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SessionClassStudentSubjects.
     */
    data: SessionClassStudentSubjectCreateManyInput | SessionClassStudentSubjectCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SessionClassStudentSubject update
   */
  export type SessionClassStudentSubjectUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * The data needed to update a SessionClassStudentSubject.
     */
    data: XOR<SessionClassStudentSubjectUpdateInput, SessionClassStudentSubjectUncheckedUpdateInput>
    /**
     * Choose, which SessionClassStudentSubject to update.
     */
    where: SessionClassStudentSubjectWhereUniqueInput
  }

  /**
   * SessionClassStudentSubject updateMany
   */
  export type SessionClassStudentSubjectUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SessionClassStudentSubjects.
     */
    data: XOR<SessionClassStudentSubjectUpdateManyMutationInput, SessionClassStudentSubjectUncheckedUpdateManyInput>
    /**
     * Filter which SessionClassStudentSubjects to update
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * Limit how many SessionClassStudentSubjects to update.
     */
    limit?: number
  }

  /**
   * SessionClassStudentSubject upsert
   */
  export type SessionClassStudentSubjectUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * The filter to search for the SessionClassStudentSubject to update in case it exists.
     */
    where: SessionClassStudentSubjectWhereUniqueInput
    /**
     * In case the SessionClassStudentSubject found by the `where` argument doesn't exist, create a new SessionClassStudentSubject with this data.
     */
    create: XOR<SessionClassStudentSubjectCreateInput, SessionClassStudentSubjectUncheckedCreateInput>
    /**
     * In case the SessionClassStudentSubject was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionClassStudentSubjectUpdateInput, SessionClassStudentSubjectUncheckedUpdateInput>
  }

  /**
   * SessionClassStudentSubject delete
   */
  export type SessionClassStudentSubjectDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
    /**
     * Filter which SessionClassStudentSubject to delete.
     */
    where: SessionClassStudentSubjectWhereUniqueInput
  }

  /**
   * SessionClassStudentSubject deleteMany
   */
  export type SessionClassStudentSubjectDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassStudentSubjects to delete
     */
    where?: SessionClassStudentSubjectWhereInput
    /**
     * Limit how many SessionClassStudentSubjects to delete.
     */
    limit?: number
  }

  /**
   * SessionClassStudentSubject without action
   */
  export type SessionClassStudentSubjectDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassStudentSubject
     */
    select?: SessionClassStudentSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassStudentSubject
     */
    omit?: SessionClassStudentSubjectOmit<ExtArgs> | null
  }


  /**
   * Model ClassSpecialization
   */

  export type AggregateClassSpecialization = {
    _count: ClassSpecializationCountAggregateOutputType | null
    _avg: ClassSpecializationAvgAggregateOutputType | null
    _sum: ClassSpecializationSumAggregateOutputType | null
    _min: ClassSpecializationMinAggregateOutputType | null
    _max: ClassSpecializationMaxAggregateOutputType | null
  }

  export type ClassSpecializationAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    created_by: number | null
  }

  export type ClassSpecializationSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    created_by: number | null
  }

  export type ClassSpecializationMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    specialization_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassSpecializationMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    specialization_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassSpecializationCountAggregateOutputType = {
    id: number
    school_id: number
    specialization_name: number
    branch_config: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ClassSpecializationAvgAggregateInputType = {
    id?: true
    school_id?: true
    created_by?: true
  }

  export type ClassSpecializationSumAggregateInputType = {
    id?: true
    school_id?: true
    created_by?: true
  }

  export type ClassSpecializationMinAggregateInputType = {
    id?: true
    school_id?: true
    specialization_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassSpecializationMaxAggregateInputType = {
    id?: true
    school_id?: true
    specialization_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassSpecializationCountAggregateInputType = {
    id?: true
    school_id?: true
    specialization_name?: true
    branch_config?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ClassSpecializationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassSpecialization to aggregate.
     */
    where?: ClassSpecializationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSpecializations to fetch.
     */
    orderBy?: ClassSpecializationOrderByWithRelationInput | ClassSpecializationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ClassSpecializationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSpecializations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSpecializations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ClassSpecializations
    **/
    _count?: true | ClassSpecializationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ClassSpecializationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ClassSpecializationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ClassSpecializationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ClassSpecializationMaxAggregateInputType
  }

  export type GetClassSpecializationAggregateType<T extends ClassSpecializationAggregateArgs> = {
        [P in keyof T & keyof AggregateClassSpecialization]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateClassSpecialization[P]>
      : GetScalarType<T[P], AggregateClassSpecialization[P]>
  }




  export type ClassSpecializationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassSpecializationWhereInput
    orderBy?: ClassSpecializationOrderByWithAggregationInput | ClassSpecializationOrderByWithAggregationInput[]
    by: ClassSpecializationScalarFieldEnum[] | ClassSpecializationScalarFieldEnum
    having?: ClassSpecializationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ClassSpecializationCountAggregateInputType | true
    _avg?: ClassSpecializationAvgAggregateInputType
    _sum?: ClassSpecializationSumAggregateInputType
    _min?: ClassSpecializationMinAggregateInputType
    _max?: ClassSpecializationMaxAggregateInputType
  }

  export type ClassSpecializationGroupByOutputType = {
    id: number
    school_id: number
    specialization_name: string
    branch_config: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ClassSpecializationCountAggregateOutputType | null
    _avg: ClassSpecializationAvgAggregateOutputType | null
    _sum: ClassSpecializationSumAggregateOutputType | null
    _min: ClassSpecializationMinAggregateOutputType | null
    _max: ClassSpecializationMaxAggregateOutputType | null
  }

  type GetClassSpecializationGroupByPayload<T extends ClassSpecializationGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ClassSpecializationGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ClassSpecializationGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ClassSpecializationGroupByOutputType[P]>
            : GetScalarType<T[P], ClassSpecializationGroupByOutputType[P]>
        }
      >
    >


  export type ClassSpecializationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    specialization_name?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["classSpecialization"]>



  export type ClassSpecializationSelectScalar = {
    id?: boolean
    school_id?: boolean
    specialization_name?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ClassSpecializationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "specialization_name" | "branch_config" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["classSpecialization"]>

  export type $ClassSpecializationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ClassSpecialization"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      specialization_name: string
      branch_config: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["classSpecialization"]>
    composites: {}
  }

  type ClassSpecializationGetPayload<S extends boolean | null | undefined | ClassSpecializationDefaultArgs> = $Result.GetResult<Prisma.$ClassSpecializationPayload, S>

  type ClassSpecializationCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ClassSpecializationFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ClassSpecializationCountAggregateInputType | true
    }

  export interface ClassSpecializationDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ClassSpecialization'], meta: { name: 'ClassSpecialization' } }
    /**
     * Find zero or one ClassSpecialization that matches the filter.
     * @param {ClassSpecializationFindUniqueArgs} args - Arguments to find a ClassSpecialization
     * @example
     * // Get one ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ClassSpecializationFindUniqueArgs>(args: SelectSubset<T, ClassSpecializationFindUniqueArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ClassSpecialization that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ClassSpecializationFindUniqueOrThrowArgs} args - Arguments to find a ClassSpecialization
     * @example
     * // Get one ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ClassSpecializationFindUniqueOrThrowArgs>(args: SelectSubset<T, ClassSpecializationFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassSpecialization that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationFindFirstArgs} args - Arguments to find a ClassSpecialization
     * @example
     * // Get one ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ClassSpecializationFindFirstArgs>(args?: SelectSubset<T, ClassSpecializationFindFirstArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassSpecialization that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationFindFirstOrThrowArgs} args - Arguments to find a ClassSpecialization
     * @example
     * // Get one ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ClassSpecializationFindFirstOrThrowArgs>(args?: SelectSubset<T, ClassSpecializationFindFirstOrThrowArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ClassSpecializations that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ClassSpecializations
     * const classSpecializations = await prisma.classSpecialization.findMany()
     * 
     * // Get first 10 ClassSpecializations
     * const classSpecializations = await prisma.classSpecialization.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const classSpecializationWithIdOnly = await prisma.classSpecialization.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ClassSpecializationFindManyArgs>(args?: SelectSubset<T, ClassSpecializationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ClassSpecialization.
     * @param {ClassSpecializationCreateArgs} args - Arguments to create a ClassSpecialization.
     * @example
     * // Create one ClassSpecialization
     * const ClassSpecialization = await prisma.classSpecialization.create({
     *   data: {
     *     // ... data to create a ClassSpecialization
     *   }
     * })
     * 
     */
    create<T extends ClassSpecializationCreateArgs>(args: SelectSubset<T, ClassSpecializationCreateArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ClassSpecializations.
     * @param {ClassSpecializationCreateManyArgs} args - Arguments to create many ClassSpecializations.
     * @example
     * // Create many ClassSpecializations
     * const classSpecialization = await prisma.classSpecialization.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ClassSpecializationCreateManyArgs>(args?: SelectSubset<T, ClassSpecializationCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ClassSpecialization.
     * @param {ClassSpecializationDeleteArgs} args - Arguments to delete one ClassSpecialization.
     * @example
     * // Delete one ClassSpecialization
     * const ClassSpecialization = await prisma.classSpecialization.delete({
     *   where: {
     *     // ... filter to delete one ClassSpecialization
     *   }
     * })
     * 
     */
    delete<T extends ClassSpecializationDeleteArgs>(args: SelectSubset<T, ClassSpecializationDeleteArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ClassSpecialization.
     * @param {ClassSpecializationUpdateArgs} args - Arguments to update one ClassSpecialization.
     * @example
     * // Update one ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ClassSpecializationUpdateArgs>(args: SelectSubset<T, ClassSpecializationUpdateArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ClassSpecializations.
     * @param {ClassSpecializationDeleteManyArgs} args - Arguments to filter ClassSpecializations to delete.
     * @example
     * // Delete a few ClassSpecializations
     * const { count } = await prisma.classSpecialization.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ClassSpecializationDeleteManyArgs>(args?: SelectSubset<T, ClassSpecializationDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ClassSpecializations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ClassSpecializations
     * const classSpecialization = await prisma.classSpecialization.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ClassSpecializationUpdateManyArgs>(args: SelectSubset<T, ClassSpecializationUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ClassSpecialization.
     * @param {ClassSpecializationUpsertArgs} args - Arguments to update or create a ClassSpecialization.
     * @example
     * // Update or create a ClassSpecialization
     * const classSpecialization = await prisma.classSpecialization.upsert({
     *   create: {
     *     // ... data to create a ClassSpecialization
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ClassSpecialization we want to update
     *   }
     * })
     */
    upsert<T extends ClassSpecializationUpsertArgs>(args: SelectSubset<T, ClassSpecializationUpsertArgs<ExtArgs>>): Prisma__ClassSpecializationClient<$Result.GetResult<Prisma.$ClassSpecializationPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ClassSpecializations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationCountArgs} args - Arguments to filter ClassSpecializations to count.
     * @example
     * // Count the number of ClassSpecializations
     * const count = await prisma.classSpecialization.count({
     *   where: {
     *     // ... the filter for the ClassSpecializations we want to count
     *   }
     * })
    **/
    count<T extends ClassSpecializationCountArgs>(
      args?: Subset<T, ClassSpecializationCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ClassSpecializationCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ClassSpecialization.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ClassSpecializationAggregateArgs>(args: Subset<T, ClassSpecializationAggregateArgs>): Prisma.PrismaPromise<GetClassSpecializationAggregateType<T>>

    /**
     * Group by ClassSpecialization.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassSpecializationGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ClassSpecializationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ClassSpecializationGroupByArgs['orderBy'] }
        : { orderBy?: ClassSpecializationGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ClassSpecializationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetClassSpecializationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ClassSpecialization model
   */
  readonly fields: ClassSpecializationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ClassSpecialization.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ClassSpecializationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ClassSpecialization model
   */
  interface ClassSpecializationFieldRefs {
    readonly id: FieldRef<"ClassSpecialization", 'Int'>
    readonly school_id: FieldRef<"ClassSpecialization", 'Int'>
    readonly specialization_name: FieldRef<"ClassSpecialization", 'String'>
    readonly branch_config: FieldRef<"ClassSpecialization", 'Json'>
    readonly created_by: FieldRef<"ClassSpecialization", 'Int'>
    readonly created_at: FieldRef<"ClassSpecialization", 'DateTime'>
    readonly updated_at: FieldRef<"ClassSpecialization", 'DateTime'>
    readonly deleted_at: FieldRef<"ClassSpecialization", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ClassSpecialization findUnique
   */
  export type ClassSpecializationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter, which ClassSpecialization to fetch.
     */
    where: ClassSpecializationWhereUniqueInput
  }

  /**
   * ClassSpecialization findUniqueOrThrow
   */
  export type ClassSpecializationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter, which ClassSpecialization to fetch.
     */
    where: ClassSpecializationWhereUniqueInput
  }

  /**
   * ClassSpecialization findFirst
   */
  export type ClassSpecializationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter, which ClassSpecialization to fetch.
     */
    where?: ClassSpecializationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSpecializations to fetch.
     */
    orderBy?: ClassSpecializationOrderByWithRelationInput | ClassSpecializationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassSpecializations.
     */
    cursor?: ClassSpecializationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSpecializations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSpecializations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassSpecializations.
     */
    distinct?: ClassSpecializationScalarFieldEnum | ClassSpecializationScalarFieldEnum[]
  }

  /**
   * ClassSpecialization findFirstOrThrow
   */
  export type ClassSpecializationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter, which ClassSpecialization to fetch.
     */
    where?: ClassSpecializationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSpecializations to fetch.
     */
    orderBy?: ClassSpecializationOrderByWithRelationInput | ClassSpecializationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassSpecializations.
     */
    cursor?: ClassSpecializationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSpecializations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSpecializations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassSpecializations.
     */
    distinct?: ClassSpecializationScalarFieldEnum | ClassSpecializationScalarFieldEnum[]
  }

  /**
   * ClassSpecialization findMany
   */
  export type ClassSpecializationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter, which ClassSpecializations to fetch.
     */
    where?: ClassSpecializationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassSpecializations to fetch.
     */
    orderBy?: ClassSpecializationOrderByWithRelationInput | ClassSpecializationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ClassSpecializations.
     */
    cursor?: ClassSpecializationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassSpecializations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassSpecializations.
     */
    skip?: number
    distinct?: ClassSpecializationScalarFieldEnum | ClassSpecializationScalarFieldEnum[]
  }

  /**
   * ClassSpecialization create
   */
  export type ClassSpecializationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * The data needed to create a ClassSpecialization.
     */
    data: XOR<ClassSpecializationCreateInput, ClassSpecializationUncheckedCreateInput>
  }

  /**
   * ClassSpecialization createMany
   */
  export type ClassSpecializationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ClassSpecializations.
     */
    data: ClassSpecializationCreateManyInput | ClassSpecializationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ClassSpecialization update
   */
  export type ClassSpecializationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * The data needed to update a ClassSpecialization.
     */
    data: XOR<ClassSpecializationUpdateInput, ClassSpecializationUncheckedUpdateInput>
    /**
     * Choose, which ClassSpecialization to update.
     */
    where: ClassSpecializationWhereUniqueInput
  }

  /**
   * ClassSpecialization updateMany
   */
  export type ClassSpecializationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ClassSpecializations.
     */
    data: XOR<ClassSpecializationUpdateManyMutationInput, ClassSpecializationUncheckedUpdateManyInput>
    /**
     * Filter which ClassSpecializations to update
     */
    where?: ClassSpecializationWhereInput
    /**
     * Limit how many ClassSpecializations to update.
     */
    limit?: number
  }

  /**
   * ClassSpecialization upsert
   */
  export type ClassSpecializationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * The filter to search for the ClassSpecialization to update in case it exists.
     */
    where: ClassSpecializationWhereUniqueInput
    /**
     * In case the ClassSpecialization found by the `where` argument doesn't exist, create a new ClassSpecialization with this data.
     */
    create: XOR<ClassSpecializationCreateInput, ClassSpecializationUncheckedCreateInput>
    /**
     * In case the ClassSpecialization was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ClassSpecializationUpdateInput, ClassSpecializationUncheckedUpdateInput>
  }

  /**
   * ClassSpecialization delete
   */
  export type ClassSpecializationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
    /**
     * Filter which ClassSpecialization to delete.
     */
    where: ClassSpecializationWhereUniqueInput
  }

  /**
   * ClassSpecialization deleteMany
   */
  export type ClassSpecializationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassSpecializations to delete
     */
    where?: ClassSpecializationWhereInput
    /**
     * Limit how many ClassSpecializations to delete.
     */
    limit?: number
  }

  /**
   * ClassSpecialization without action
   */
  export type ClassSpecializationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassSpecialization
     */
    select?: ClassSpecializationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassSpecialization
     */
    omit?: ClassSpecializationOmit<ExtArgs> | null
  }


  /**
   * Model ClassGroup
   */

  export type AggregateClassGroup = {
    _count: ClassGroupCountAggregateOutputType | null
    _avg: ClassGroupAvgAggregateOutputType | null
    _sum: ClassGroupSumAggregateOutputType | null
    _min: ClassGroupMinAggregateOutputType | null
    _max: ClassGroupMaxAggregateOutputType | null
  }

  export type ClassGroupAvgAggregateOutputType = {
    id: number | null
    school_id: number | null
    created_by: number | null
  }

  export type ClassGroupSumAggregateOutputType = {
    id: number | null
    school_id: number | null
    created_by: number | null
  }

  export type ClassGroupMinAggregateOutputType = {
    id: number | null
    school_id: number | null
    group_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassGroupMaxAggregateOutputType = {
    id: number | null
    school_id: number | null
    group_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassGroupCountAggregateOutputType = {
    id: number
    school_id: number
    group_name: number
    branch_config: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ClassGroupAvgAggregateInputType = {
    id?: true
    school_id?: true
    created_by?: true
  }

  export type ClassGroupSumAggregateInputType = {
    id?: true
    school_id?: true
    created_by?: true
  }

  export type ClassGroupMinAggregateInputType = {
    id?: true
    school_id?: true
    group_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassGroupMaxAggregateInputType = {
    id?: true
    school_id?: true
    group_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassGroupCountAggregateInputType = {
    id?: true
    school_id?: true
    group_name?: true
    branch_config?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ClassGroupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassGroup to aggregate.
     */
    where?: ClassGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassGroups to fetch.
     */
    orderBy?: ClassGroupOrderByWithRelationInput | ClassGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ClassGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ClassGroups
    **/
    _count?: true | ClassGroupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ClassGroupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ClassGroupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ClassGroupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ClassGroupMaxAggregateInputType
  }

  export type GetClassGroupAggregateType<T extends ClassGroupAggregateArgs> = {
        [P in keyof T & keyof AggregateClassGroup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateClassGroup[P]>
      : GetScalarType<T[P], AggregateClassGroup[P]>
  }




  export type ClassGroupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassGroupWhereInput
    orderBy?: ClassGroupOrderByWithAggregationInput | ClassGroupOrderByWithAggregationInput[]
    by: ClassGroupScalarFieldEnum[] | ClassGroupScalarFieldEnum
    having?: ClassGroupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ClassGroupCountAggregateInputType | true
    _avg?: ClassGroupAvgAggregateInputType
    _sum?: ClassGroupSumAggregateInputType
    _min?: ClassGroupMinAggregateInputType
    _max?: ClassGroupMaxAggregateInputType
  }

  export type ClassGroupGroupByOutputType = {
    id: number
    school_id: number
    group_name: string
    branch_config: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ClassGroupCountAggregateOutputType | null
    _avg: ClassGroupAvgAggregateOutputType | null
    _sum: ClassGroupSumAggregateOutputType | null
    _min: ClassGroupMinAggregateOutputType | null
    _max: ClassGroupMaxAggregateOutputType | null
  }

  type GetClassGroupGroupByPayload<T extends ClassGroupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ClassGroupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ClassGroupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ClassGroupGroupByOutputType[P]>
            : GetScalarType<T[P], ClassGroupGroupByOutputType[P]>
        }
      >
    >


  export type ClassGroupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_id?: boolean
    group_name?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["classGroup"]>



  export type ClassGroupSelectScalar = {
    id?: boolean
    school_id?: boolean
    group_name?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ClassGroupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_id" | "group_name" | "branch_config" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["classGroup"]>

  export type $ClassGroupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ClassGroup"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_id: number
      group_name: string
      branch_config: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["classGroup"]>
    composites: {}
  }

  type ClassGroupGetPayload<S extends boolean | null | undefined | ClassGroupDefaultArgs> = $Result.GetResult<Prisma.$ClassGroupPayload, S>

  type ClassGroupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ClassGroupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ClassGroupCountAggregateInputType | true
    }

  export interface ClassGroupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ClassGroup'], meta: { name: 'ClassGroup' } }
    /**
     * Find zero or one ClassGroup that matches the filter.
     * @param {ClassGroupFindUniqueArgs} args - Arguments to find a ClassGroup
     * @example
     * // Get one ClassGroup
     * const classGroup = await prisma.classGroup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ClassGroupFindUniqueArgs>(args: SelectSubset<T, ClassGroupFindUniqueArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ClassGroup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ClassGroupFindUniqueOrThrowArgs} args - Arguments to find a ClassGroup
     * @example
     * // Get one ClassGroup
     * const classGroup = await prisma.classGroup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ClassGroupFindUniqueOrThrowArgs>(args: SelectSubset<T, ClassGroupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassGroup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupFindFirstArgs} args - Arguments to find a ClassGroup
     * @example
     * // Get one ClassGroup
     * const classGroup = await prisma.classGroup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ClassGroupFindFirstArgs>(args?: SelectSubset<T, ClassGroupFindFirstArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassGroup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupFindFirstOrThrowArgs} args - Arguments to find a ClassGroup
     * @example
     * // Get one ClassGroup
     * const classGroup = await prisma.classGroup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ClassGroupFindFirstOrThrowArgs>(args?: SelectSubset<T, ClassGroupFindFirstOrThrowArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ClassGroups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ClassGroups
     * const classGroups = await prisma.classGroup.findMany()
     * 
     * // Get first 10 ClassGroups
     * const classGroups = await prisma.classGroup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const classGroupWithIdOnly = await prisma.classGroup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ClassGroupFindManyArgs>(args?: SelectSubset<T, ClassGroupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ClassGroup.
     * @param {ClassGroupCreateArgs} args - Arguments to create a ClassGroup.
     * @example
     * // Create one ClassGroup
     * const ClassGroup = await prisma.classGroup.create({
     *   data: {
     *     // ... data to create a ClassGroup
     *   }
     * })
     * 
     */
    create<T extends ClassGroupCreateArgs>(args: SelectSubset<T, ClassGroupCreateArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ClassGroups.
     * @param {ClassGroupCreateManyArgs} args - Arguments to create many ClassGroups.
     * @example
     * // Create many ClassGroups
     * const classGroup = await prisma.classGroup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ClassGroupCreateManyArgs>(args?: SelectSubset<T, ClassGroupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ClassGroup.
     * @param {ClassGroupDeleteArgs} args - Arguments to delete one ClassGroup.
     * @example
     * // Delete one ClassGroup
     * const ClassGroup = await prisma.classGroup.delete({
     *   where: {
     *     // ... filter to delete one ClassGroup
     *   }
     * })
     * 
     */
    delete<T extends ClassGroupDeleteArgs>(args: SelectSubset<T, ClassGroupDeleteArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ClassGroup.
     * @param {ClassGroupUpdateArgs} args - Arguments to update one ClassGroup.
     * @example
     * // Update one ClassGroup
     * const classGroup = await prisma.classGroup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ClassGroupUpdateArgs>(args: SelectSubset<T, ClassGroupUpdateArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ClassGroups.
     * @param {ClassGroupDeleteManyArgs} args - Arguments to filter ClassGroups to delete.
     * @example
     * // Delete a few ClassGroups
     * const { count } = await prisma.classGroup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ClassGroupDeleteManyArgs>(args?: SelectSubset<T, ClassGroupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ClassGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ClassGroups
     * const classGroup = await prisma.classGroup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ClassGroupUpdateManyArgs>(args: SelectSubset<T, ClassGroupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ClassGroup.
     * @param {ClassGroupUpsertArgs} args - Arguments to update or create a ClassGroup.
     * @example
     * // Update or create a ClassGroup
     * const classGroup = await prisma.classGroup.upsert({
     *   create: {
     *     // ... data to create a ClassGroup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ClassGroup we want to update
     *   }
     * })
     */
    upsert<T extends ClassGroupUpsertArgs>(args: SelectSubset<T, ClassGroupUpsertArgs<ExtArgs>>): Prisma__ClassGroupClient<$Result.GetResult<Prisma.$ClassGroupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ClassGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupCountArgs} args - Arguments to filter ClassGroups to count.
     * @example
     * // Count the number of ClassGroups
     * const count = await prisma.classGroup.count({
     *   where: {
     *     // ... the filter for the ClassGroups we want to count
     *   }
     * })
    **/
    count<T extends ClassGroupCountArgs>(
      args?: Subset<T, ClassGroupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ClassGroupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ClassGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ClassGroupAggregateArgs>(args: Subset<T, ClassGroupAggregateArgs>): Prisma.PrismaPromise<GetClassGroupAggregateType<T>>

    /**
     * Group by ClassGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassGroupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ClassGroupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ClassGroupGroupByArgs['orderBy'] }
        : { orderBy?: ClassGroupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ClassGroupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetClassGroupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ClassGroup model
   */
  readonly fields: ClassGroupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ClassGroup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ClassGroupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ClassGroup model
   */
  interface ClassGroupFieldRefs {
    readonly id: FieldRef<"ClassGroup", 'Int'>
    readonly school_id: FieldRef<"ClassGroup", 'Int'>
    readonly group_name: FieldRef<"ClassGroup", 'String'>
    readonly branch_config: FieldRef<"ClassGroup", 'Json'>
    readonly created_by: FieldRef<"ClassGroup", 'Int'>
    readonly created_at: FieldRef<"ClassGroup", 'DateTime'>
    readonly updated_at: FieldRef<"ClassGroup", 'DateTime'>
    readonly deleted_at: FieldRef<"ClassGroup", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ClassGroup findUnique
   */
  export type ClassGroupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter, which ClassGroup to fetch.
     */
    where: ClassGroupWhereUniqueInput
  }

  /**
   * ClassGroup findUniqueOrThrow
   */
  export type ClassGroupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter, which ClassGroup to fetch.
     */
    where: ClassGroupWhereUniqueInput
  }

  /**
   * ClassGroup findFirst
   */
  export type ClassGroupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter, which ClassGroup to fetch.
     */
    where?: ClassGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassGroups to fetch.
     */
    orderBy?: ClassGroupOrderByWithRelationInput | ClassGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassGroups.
     */
    cursor?: ClassGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassGroups.
     */
    distinct?: ClassGroupScalarFieldEnum | ClassGroupScalarFieldEnum[]
  }

  /**
   * ClassGroup findFirstOrThrow
   */
  export type ClassGroupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter, which ClassGroup to fetch.
     */
    where?: ClassGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassGroups to fetch.
     */
    orderBy?: ClassGroupOrderByWithRelationInput | ClassGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassGroups.
     */
    cursor?: ClassGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassGroups.
     */
    distinct?: ClassGroupScalarFieldEnum | ClassGroupScalarFieldEnum[]
  }

  /**
   * ClassGroup findMany
   */
  export type ClassGroupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter, which ClassGroups to fetch.
     */
    where?: ClassGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassGroups to fetch.
     */
    orderBy?: ClassGroupOrderByWithRelationInput | ClassGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ClassGroups.
     */
    cursor?: ClassGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassGroups.
     */
    skip?: number
    distinct?: ClassGroupScalarFieldEnum | ClassGroupScalarFieldEnum[]
  }

  /**
   * ClassGroup create
   */
  export type ClassGroupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * The data needed to create a ClassGroup.
     */
    data: XOR<ClassGroupCreateInput, ClassGroupUncheckedCreateInput>
  }

  /**
   * ClassGroup createMany
   */
  export type ClassGroupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ClassGroups.
     */
    data: ClassGroupCreateManyInput | ClassGroupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ClassGroup update
   */
  export type ClassGroupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * The data needed to update a ClassGroup.
     */
    data: XOR<ClassGroupUpdateInput, ClassGroupUncheckedUpdateInput>
    /**
     * Choose, which ClassGroup to update.
     */
    where: ClassGroupWhereUniqueInput
  }

  /**
   * ClassGroup updateMany
   */
  export type ClassGroupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ClassGroups.
     */
    data: XOR<ClassGroupUpdateManyMutationInput, ClassGroupUncheckedUpdateManyInput>
    /**
     * Filter which ClassGroups to update
     */
    where?: ClassGroupWhereInput
    /**
     * Limit how many ClassGroups to update.
     */
    limit?: number
  }

  /**
   * ClassGroup upsert
   */
  export type ClassGroupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * The filter to search for the ClassGroup to update in case it exists.
     */
    where: ClassGroupWhereUniqueInput
    /**
     * In case the ClassGroup found by the `where` argument doesn't exist, create a new ClassGroup with this data.
     */
    create: XOR<ClassGroupCreateInput, ClassGroupUncheckedCreateInput>
    /**
     * In case the ClassGroup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ClassGroupUpdateInput, ClassGroupUncheckedUpdateInput>
  }

  /**
   * ClassGroup delete
   */
  export type ClassGroupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
    /**
     * Filter which ClassGroup to delete.
     */
    where: ClassGroupWhereUniqueInput
  }

  /**
   * ClassGroup deleteMany
   */
  export type ClassGroupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassGroups to delete
     */
    where?: ClassGroupWhereInput
    /**
     * Limit how many ClassGroups to delete.
     */
    limit?: number
  }

  /**
   * ClassGroup without action
   */
  export type ClassGroupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassGroup
     */
    select?: ClassGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassGroup
     */
    omit?: ClassGroupOmit<ExtArgs> | null
  }


  /**
   * Model ScoreType
   */

  export type AggregateScoreType = {
    _count: ScoreTypeCountAggregateOutputType | null
    _avg: ScoreTypeAvgAggregateOutputType | null
    _sum: ScoreTypeSumAggregateOutputType | null
    _min: ScoreTypeMinAggregateOutputType | null
    _max: ScoreTypeMaxAggregateOutputType | null
  }

  export type ScoreTypeAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ScoreTypeSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ScoreTypeMinAggregateOutputType = {
    id: number | null
    score_type: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ScoreTypeMaxAggregateOutputType = {
    id: number | null
    score_type: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ScoreTypeCountAggregateOutputType = {
    id: number
    score_type: number
    branch_config: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ScoreTypeAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ScoreTypeSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ScoreTypeMinAggregateInputType = {
    id?: true
    score_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ScoreTypeMaxAggregateInputType = {
    id?: true
    score_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ScoreTypeCountAggregateInputType = {
    id?: true
    score_type?: true
    branch_config?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ScoreTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ScoreType to aggregate.
     */
    where?: ScoreTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreTypes to fetch.
     */
    orderBy?: ScoreTypeOrderByWithRelationInput | ScoreTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ScoreTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ScoreTypes
    **/
    _count?: true | ScoreTypeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ScoreTypeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ScoreTypeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ScoreTypeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ScoreTypeMaxAggregateInputType
  }

  export type GetScoreTypeAggregateType<T extends ScoreTypeAggregateArgs> = {
        [P in keyof T & keyof AggregateScoreType]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateScoreType[P]>
      : GetScalarType<T[P], AggregateScoreType[P]>
  }




  export type ScoreTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ScoreTypeWhereInput
    orderBy?: ScoreTypeOrderByWithAggregationInput | ScoreTypeOrderByWithAggregationInput[]
    by: ScoreTypeScalarFieldEnum[] | ScoreTypeScalarFieldEnum
    having?: ScoreTypeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ScoreTypeCountAggregateInputType | true
    _avg?: ScoreTypeAvgAggregateInputType
    _sum?: ScoreTypeSumAggregateInputType
    _min?: ScoreTypeMinAggregateInputType
    _max?: ScoreTypeMaxAggregateInputType
  }

  export type ScoreTypeGroupByOutputType = {
    id: number
    score_type: string
    branch_config: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ScoreTypeCountAggregateOutputType | null
    _avg: ScoreTypeAvgAggregateOutputType | null
    _sum: ScoreTypeSumAggregateOutputType | null
    _min: ScoreTypeMinAggregateOutputType | null
    _max: ScoreTypeMaxAggregateOutputType | null
  }

  type GetScoreTypeGroupByPayload<T extends ScoreTypeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ScoreTypeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ScoreTypeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ScoreTypeGroupByOutputType[P]>
            : GetScalarType<T[P], ScoreTypeGroupByOutputType[P]>
        }
      >
    >


  export type ScoreTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    score_type?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["scoreType"]>



  export type ScoreTypeSelectScalar = {
    id?: boolean
    score_type?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ScoreTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "score_type" | "branch_config" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["scoreType"]>

  export type $ScoreTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ScoreType"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      score_type: string
      branch_config: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["scoreType"]>
    composites: {}
  }

  type ScoreTypeGetPayload<S extends boolean | null | undefined | ScoreTypeDefaultArgs> = $Result.GetResult<Prisma.$ScoreTypePayload, S>

  type ScoreTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ScoreTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ScoreTypeCountAggregateInputType | true
    }

  export interface ScoreTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ScoreType'], meta: { name: 'ScoreType' } }
    /**
     * Find zero or one ScoreType that matches the filter.
     * @param {ScoreTypeFindUniqueArgs} args - Arguments to find a ScoreType
     * @example
     * // Get one ScoreType
     * const scoreType = await prisma.scoreType.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ScoreTypeFindUniqueArgs>(args: SelectSubset<T, ScoreTypeFindUniqueArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ScoreType that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ScoreTypeFindUniqueOrThrowArgs} args - Arguments to find a ScoreType
     * @example
     * // Get one ScoreType
     * const scoreType = await prisma.scoreType.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ScoreTypeFindUniqueOrThrowArgs>(args: SelectSubset<T, ScoreTypeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ScoreType that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeFindFirstArgs} args - Arguments to find a ScoreType
     * @example
     * // Get one ScoreType
     * const scoreType = await prisma.scoreType.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ScoreTypeFindFirstArgs>(args?: SelectSubset<T, ScoreTypeFindFirstArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ScoreType that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeFindFirstOrThrowArgs} args - Arguments to find a ScoreType
     * @example
     * // Get one ScoreType
     * const scoreType = await prisma.scoreType.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ScoreTypeFindFirstOrThrowArgs>(args?: SelectSubset<T, ScoreTypeFindFirstOrThrowArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ScoreTypes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ScoreTypes
     * const scoreTypes = await prisma.scoreType.findMany()
     * 
     * // Get first 10 ScoreTypes
     * const scoreTypes = await prisma.scoreType.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const scoreTypeWithIdOnly = await prisma.scoreType.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ScoreTypeFindManyArgs>(args?: SelectSubset<T, ScoreTypeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ScoreType.
     * @param {ScoreTypeCreateArgs} args - Arguments to create a ScoreType.
     * @example
     * // Create one ScoreType
     * const ScoreType = await prisma.scoreType.create({
     *   data: {
     *     // ... data to create a ScoreType
     *   }
     * })
     * 
     */
    create<T extends ScoreTypeCreateArgs>(args: SelectSubset<T, ScoreTypeCreateArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ScoreTypes.
     * @param {ScoreTypeCreateManyArgs} args - Arguments to create many ScoreTypes.
     * @example
     * // Create many ScoreTypes
     * const scoreType = await prisma.scoreType.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ScoreTypeCreateManyArgs>(args?: SelectSubset<T, ScoreTypeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ScoreType.
     * @param {ScoreTypeDeleteArgs} args - Arguments to delete one ScoreType.
     * @example
     * // Delete one ScoreType
     * const ScoreType = await prisma.scoreType.delete({
     *   where: {
     *     // ... filter to delete one ScoreType
     *   }
     * })
     * 
     */
    delete<T extends ScoreTypeDeleteArgs>(args: SelectSubset<T, ScoreTypeDeleteArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ScoreType.
     * @param {ScoreTypeUpdateArgs} args - Arguments to update one ScoreType.
     * @example
     * // Update one ScoreType
     * const scoreType = await prisma.scoreType.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ScoreTypeUpdateArgs>(args: SelectSubset<T, ScoreTypeUpdateArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ScoreTypes.
     * @param {ScoreTypeDeleteManyArgs} args - Arguments to filter ScoreTypes to delete.
     * @example
     * // Delete a few ScoreTypes
     * const { count } = await prisma.scoreType.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ScoreTypeDeleteManyArgs>(args?: SelectSubset<T, ScoreTypeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ScoreTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ScoreTypes
     * const scoreType = await prisma.scoreType.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ScoreTypeUpdateManyArgs>(args: SelectSubset<T, ScoreTypeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ScoreType.
     * @param {ScoreTypeUpsertArgs} args - Arguments to update or create a ScoreType.
     * @example
     * // Update or create a ScoreType
     * const scoreType = await prisma.scoreType.upsert({
     *   create: {
     *     // ... data to create a ScoreType
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ScoreType we want to update
     *   }
     * })
     */
    upsert<T extends ScoreTypeUpsertArgs>(args: SelectSubset<T, ScoreTypeUpsertArgs<ExtArgs>>): Prisma__ScoreTypeClient<$Result.GetResult<Prisma.$ScoreTypePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ScoreTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeCountArgs} args - Arguments to filter ScoreTypes to count.
     * @example
     * // Count the number of ScoreTypes
     * const count = await prisma.scoreType.count({
     *   where: {
     *     // ... the filter for the ScoreTypes we want to count
     *   }
     * })
    **/
    count<T extends ScoreTypeCountArgs>(
      args?: Subset<T, ScoreTypeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ScoreTypeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ScoreType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ScoreTypeAggregateArgs>(args: Subset<T, ScoreTypeAggregateArgs>): Prisma.PrismaPromise<GetScoreTypeAggregateType<T>>

    /**
     * Group by ScoreType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreTypeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ScoreTypeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ScoreTypeGroupByArgs['orderBy'] }
        : { orderBy?: ScoreTypeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ScoreTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetScoreTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ScoreType model
   */
  readonly fields: ScoreTypeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ScoreType.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ScoreTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ScoreType model
   */
  interface ScoreTypeFieldRefs {
    readonly id: FieldRef<"ScoreType", 'Int'>
    readonly score_type: FieldRef<"ScoreType", 'String'>
    readonly branch_config: FieldRef<"ScoreType", 'Json'>
    readonly created_by: FieldRef<"ScoreType", 'Int'>
    readonly created_at: FieldRef<"ScoreType", 'DateTime'>
    readonly updated_at: FieldRef<"ScoreType", 'DateTime'>
    readonly deleted_at: FieldRef<"ScoreType", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ScoreType findUnique
   */
  export type ScoreTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreType to fetch.
     */
    where: ScoreTypeWhereUniqueInput
  }

  /**
   * ScoreType findUniqueOrThrow
   */
  export type ScoreTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreType to fetch.
     */
    where: ScoreTypeWhereUniqueInput
  }

  /**
   * ScoreType findFirst
   */
  export type ScoreTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreType to fetch.
     */
    where?: ScoreTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreTypes to fetch.
     */
    orderBy?: ScoreTypeOrderByWithRelationInput | ScoreTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ScoreTypes.
     */
    cursor?: ScoreTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ScoreTypes.
     */
    distinct?: ScoreTypeScalarFieldEnum | ScoreTypeScalarFieldEnum[]
  }

  /**
   * ScoreType findFirstOrThrow
   */
  export type ScoreTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreType to fetch.
     */
    where?: ScoreTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreTypes to fetch.
     */
    orderBy?: ScoreTypeOrderByWithRelationInput | ScoreTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ScoreTypes.
     */
    cursor?: ScoreTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ScoreTypes.
     */
    distinct?: ScoreTypeScalarFieldEnum | ScoreTypeScalarFieldEnum[]
  }

  /**
   * ScoreType findMany
   */
  export type ScoreTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreTypes to fetch.
     */
    where?: ScoreTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreTypes to fetch.
     */
    orderBy?: ScoreTypeOrderByWithRelationInput | ScoreTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ScoreTypes.
     */
    cursor?: ScoreTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreTypes.
     */
    skip?: number
    distinct?: ScoreTypeScalarFieldEnum | ScoreTypeScalarFieldEnum[]
  }

  /**
   * ScoreType create
   */
  export type ScoreTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * The data needed to create a ScoreType.
     */
    data: XOR<ScoreTypeCreateInput, ScoreTypeUncheckedCreateInput>
  }

  /**
   * ScoreType createMany
   */
  export type ScoreTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ScoreTypes.
     */
    data: ScoreTypeCreateManyInput | ScoreTypeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ScoreType update
   */
  export type ScoreTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * The data needed to update a ScoreType.
     */
    data: XOR<ScoreTypeUpdateInput, ScoreTypeUncheckedUpdateInput>
    /**
     * Choose, which ScoreType to update.
     */
    where: ScoreTypeWhereUniqueInput
  }

  /**
   * ScoreType updateMany
   */
  export type ScoreTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ScoreTypes.
     */
    data: XOR<ScoreTypeUpdateManyMutationInput, ScoreTypeUncheckedUpdateManyInput>
    /**
     * Filter which ScoreTypes to update
     */
    where?: ScoreTypeWhereInput
    /**
     * Limit how many ScoreTypes to update.
     */
    limit?: number
  }

  /**
   * ScoreType upsert
   */
  export type ScoreTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * The filter to search for the ScoreType to update in case it exists.
     */
    where: ScoreTypeWhereUniqueInput
    /**
     * In case the ScoreType found by the `where` argument doesn't exist, create a new ScoreType with this data.
     */
    create: XOR<ScoreTypeCreateInput, ScoreTypeUncheckedCreateInput>
    /**
     * In case the ScoreType was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ScoreTypeUpdateInput, ScoreTypeUncheckedUpdateInput>
  }

  /**
   * ScoreType delete
   */
  export type ScoreTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
    /**
     * Filter which ScoreType to delete.
     */
    where: ScoreTypeWhereUniqueInput
  }

  /**
   * ScoreType deleteMany
   */
  export type ScoreTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ScoreTypes to delete
     */
    where?: ScoreTypeWhereInput
    /**
     * Limit how many ScoreTypes to delete.
     */
    limit?: number
  }

  /**
   * ScoreType without action
   */
  export type ScoreTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreType
     */
    select?: ScoreTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreType
     */
    omit?: ScoreTypeOmit<ExtArgs> | null
  }


  /**
   * Model ScoreDisplayType
   */

  export type AggregateScoreDisplayType = {
    _count: ScoreDisplayTypeCountAggregateOutputType | null
    _avg: ScoreDisplayTypeAvgAggregateOutputType | null
    _sum: ScoreDisplayTypeSumAggregateOutputType | null
    _min: ScoreDisplayTypeMinAggregateOutputType | null
    _max: ScoreDisplayTypeMaxAggregateOutputType | null
  }

  export type ScoreDisplayTypeAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ScoreDisplayTypeSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ScoreDisplayTypeMinAggregateOutputType = {
    id: number | null
    display_type: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ScoreDisplayTypeMaxAggregateOutputType = {
    id: number | null
    display_type: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ScoreDisplayTypeCountAggregateOutputType = {
    id: number
    display_type: number
    branch_config: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ScoreDisplayTypeAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ScoreDisplayTypeSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ScoreDisplayTypeMinAggregateInputType = {
    id?: true
    display_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ScoreDisplayTypeMaxAggregateInputType = {
    id?: true
    display_type?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ScoreDisplayTypeCountAggregateInputType = {
    id?: true
    display_type?: true
    branch_config?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ScoreDisplayTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ScoreDisplayType to aggregate.
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreDisplayTypes to fetch.
     */
    orderBy?: ScoreDisplayTypeOrderByWithRelationInput | ScoreDisplayTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ScoreDisplayTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreDisplayTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreDisplayTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ScoreDisplayTypes
    **/
    _count?: true | ScoreDisplayTypeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ScoreDisplayTypeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ScoreDisplayTypeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ScoreDisplayTypeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ScoreDisplayTypeMaxAggregateInputType
  }

  export type GetScoreDisplayTypeAggregateType<T extends ScoreDisplayTypeAggregateArgs> = {
        [P in keyof T & keyof AggregateScoreDisplayType]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateScoreDisplayType[P]>
      : GetScalarType<T[P], AggregateScoreDisplayType[P]>
  }




  export type ScoreDisplayTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ScoreDisplayTypeWhereInput
    orderBy?: ScoreDisplayTypeOrderByWithAggregationInput | ScoreDisplayTypeOrderByWithAggregationInput[]
    by: ScoreDisplayTypeScalarFieldEnum[] | ScoreDisplayTypeScalarFieldEnum
    having?: ScoreDisplayTypeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ScoreDisplayTypeCountAggregateInputType | true
    _avg?: ScoreDisplayTypeAvgAggregateInputType
    _sum?: ScoreDisplayTypeSumAggregateInputType
    _min?: ScoreDisplayTypeMinAggregateInputType
    _max?: ScoreDisplayTypeMaxAggregateInputType
  }

  export type ScoreDisplayTypeGroupByOutputType = {
    id: number
    display_type: string
    branch_config: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ScoreDisplayTypeCountAggregateOutputType | null
    _avg: ScoreDisplayTypeAvgAggregateOutputType | null
    _sum: ScoreDisplayTypeSumAggregateOutputType | null
    _min: ScoreDisplayTypeMinAggregateOutputType | null
    _max: ScoreDisplayTypeMaxAggregateOutputType | null
  }

  type GetScoreDisplayTypeGroupByPayload<T extends ScoreDisplayTypeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ScoreDisplayTypeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ScoreDisplayTypeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ScoreDisplayTypeGroupByOutputType[P]>
            : GetScalarType<T[P], ScoreDisplayTypeGroupByOutputType[P]>
        }
      >
    >


  export type ScoreDisplayTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    display_type?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["scoreDisplayType"]>



  export type ScoreDisplayTypeSelectScalar = {
    id?: boolean
    display_type?: boolean
    branch_config?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ScoreDisplayTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "display_type" | "branch_config" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["scoreDisplayType"]>

  export type $ScoreDisplayTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ScoreDisplayType"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      display_type: string
      branch_config: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["scoreDisplayType"]>
    composites: {}
  }

  type ScoreDisplayTypeGetPayload<S extends boolean | null | undefined | ScoreDisplayTypeDefaultArgs> = $Result.GetResult<Prisma.$ScoreDisplayTypePayload, S>

  type ScoreDisplayTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ScoreDisplayTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ScoreDisplayTypeCountAggregateInputType | true
    }

  export interface ScoreDisplayTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ScoreDisplayType'], meta: { name: 'ScoreDisplayType' } }
    /**
     * Find zero or one ScoreDisplayType that matches the filter.
     * @param {ScoreDisplayTypeFindUniqueArgs} args - Arguments to find a ScoreDisplayType
     * @example
     * // Get one ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ScoreDisplayTypeFindUniqueArgs>(args: SelectSubset<T, ScoreDisplayTypeFindUniqueArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ScoreDisplayType that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ScoreDisplayTypeFindUniqueOrThrowArgs} args - Arguments to find a ScoreDisplayType
     * @example
     * // Get one ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ScoreDisplayTypeFindUniqueOrThrowArgs>(args: SelectSubset<T, ScoreDisplayTypeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ScoreDisplayType that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeFindFirstArgs} args - Arguments to find a ScoreDisplayType
     * @example
     * // Get one ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ScoreDisplayTypeFindFirstArgs>(args?: SelectSubset<T, ScoreDisplayTypeFindFirstArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ScoreDisplayType that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeFindFirstOrThrowArgs} args - Arguments to find a ScoreDisplayType
     * @example
     * // Get one ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ScoreDisplayTypeFindFirstOrThrowArgs>(args?: SelectSubset<T, ScoreDisplayTypeFindFirstOrThrowArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ScoreDisplayTypes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ScoreDisplayTypes
     * const scoreDisplayTypes = await prisma.scoreDisplayType.findMany()
     * 
     * // Get first 10 ScoreDisplayTypes
     * const scoreDisplayTypes = await prisma.scoreDisplayType.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const scoreDisplayTypeWithIdOnly = await prisma.scoreDisplayType.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ScoreDisplayTypeFindManyArgs>(args?: SelectSubset<T, ScoreDisplayTypeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ScoreDisplayType.
     * @param {ScoreDisplayTypeCreateArgs} args - Arguments to create a ScoreDisplayType.
     * @example
     * // Create one ScoreDisplayType
     * const ScoreDisplayType = await prisma.scoreDisplayType.create({
     *   data: {
     *     // ... data to create a ScoreDisplayType
     *   }
     * })
     * 
     */
    create<T extends ScoreDisplayTypeCreateArgs>(args: SelectSubset<T, ScoreDisplayTypeCreateArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ScoreDisplayTypes.
     * @param {ScoreDisplayTypeCreateManyArgs} args - Arguments to create many ScoreDisplayTypes.
     * @example
     * // Create many ScoreDisplayTypes
     * const scoreDisplayType = await prisma.scoreDisplayType.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ScoreDisplayTypeCreateManyArgs>(args?: SelectSubset<T, ScoreDisplayTypeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ScoreDisplayType.
     * @param {ScoreDisplayTypeDeleteArgs} args - Arguments to delete one ScoreDisplayType.
     * @example
     * // Delete one ScoreDisplayType
     * const ScoreDisplayType = await prisma.scoreDisplayType.delete({
     *   where: {
     *     // ... filter to delete one ScoreDisplayType
     *   }
     * })
     * 
     */
    delete<T extends ScoreDisplayTypeDeleteArgs>(args: SelectSubset<T, ScoreDisplayTypeDeleteArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ScoreDisplayType.
     * @param {ScoreDisplayTypeUpdateArgs} args - Arguments to update one ScoreDisplayType.
     * @example
     * // Update one ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ScoreDisplayTypeUpdateArgs>(args: SelectSubset<T, ScoreDisplayTypeUpdateArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ScoreDisplayTypes.
     * @param {ScoreDisplayTypeDeleteManyArgs} args - Arguments to filter ScoreDisplayTypes to delete.
     * @example
     * // Delete a few ScoreDisplayTypes
     * const { count } = await prisma.scoreDisplayType.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ScoreDisplayTypeDeleteManyArgs>(args?: SelectSubset<T, ScoreDisplayTypeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ScoreDisplayTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ScoreDisplayTypes
     * const scoreDisplayType = await prisma.scoreDisplayType.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ScoreDisplayTypeUpdateManyArgs>(args: SelectSubset<T, ScoreDisplayTypeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ScoreDisplayType.
     * @param {ScoreDisplayTypeUpsertArgs} args - Arguments to update or create a ScoreDisplayType.
     * @example
     * // Update or create a ScoreDisplayType
     * const scoreDisplayType = await prisma.scoreDisplayType.upsert({
     *   create: {
     *     // ... data to create a ScoreDisplayType
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ScoreDisplayType we want to update
     *   }
     * })
     */
    upsert<T extends ScoreDisplayTypeUpsertArgs>(args: SelectSubset<T, ScoreDisplayTypeUpsertArgs<ExtArgs>>): Prisma__ScoreDisplayTypeClient<$Result.GetResult<Prisma.$ScoreDisplayTypePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ScoreDisplayTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeCountArgs} args - Arguments to filter ScoreDisplayTypes to count.
     * @example
     * // Count the number of ScoreDisplayTypes
     * const count = await prisma.scoreDisplayType.count({
     *   where: {
     *     // ... the filter for the ScoreDisplayTypes we want to count
     *   }
     * })
    **/
    count<T extends ScoreDisplayTypeCountArgs>(
      args?: Subset<T, ScoreDisplayTypeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ScoreDisplayTypeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ScoreDisplayType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ScoreDisplayTypeAggregateArgs>(args: Subset<T, ScoreDisplayTypeAggregateArgs>): Prisma.PrismaPromise<GetScoreDisplayTypeAggregateType<T>>

    /**
     * Group by ScoreDisplayType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ScoreDisplayTypeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ScoreDisplayTypeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ScoreDisplayTypeGroupByArgs['orderBy'] }
        : { orderBy?: ScoreDisplayTypeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ScoreDisplayTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetScoreDisplayTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ScoreDisplayType model
   */
  readonly fields: ScoreDisplayTypeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ScoreDisplayType.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ScoreDisplayTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ScoreDisplayType model
   */
  interface ScoreDisplayTypeFieldRefs {
    readonly id: FieldRef<"ScoreDisplayType", 'Int'>
    readonly display_type: FieldRef<"ScoreDisplayType", 'String'>
    readonly branch_config: FieldRef<"ScoreDisplayType", 'Json'>
    readonly created_by: FieldRef<"ScoreDisplayType", 'Int'>
    readonly created_at: FieldRef<"ScoreDisplayType", 'DateTime'>
    readonly updated_at: FieldRef<"ScoreDisplayType", 'DateTime'>
    readonly deleted_at: FieldRef<"ScoreDisplayType", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ScoreDisplayType findUnique
   */
  export type ScoreDisplayTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreDisplayType to fetch.
     */
    where: ScoreDisplayTypeWhereUniqueInput
  }

  /**
   * ScoreDisplayType findUniqueOrThrow
   */
  export type ScoreDisplayTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreDisplayType to fetch.
     */
    where: ScoreDisplayTypeWhereUniqueInput
  }

  /**
   * ScoreDisplayType findFirst
   */
  export type ScoreDisplayTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreDisplayType to fetch.
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreDisplayTypes to fetch.
     */
    orderBy?: ScoreDisplayTypeOrderByWithRelationInput | ScoreDisplayTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ScoreDisplayTypes.
     */
    cursor?: ScoreDisplayTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreDisplayTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreDisplayTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ScoreDisplayTypes.
     */
    distinct?: ScoreDisplayTypeScalarFieldEnum | ScoreDisplayTypeScalarFieldEnum[]
  }

  /**
   * ScoreDisplayType findFirstOrThrow
   */
  export type ScoreDisplayTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreDisplayType to fetch.
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreDisplayTypes to fetch.
     */
    orderBy?: ScoreDisplayTypeOrderByWithRelationInput | ScoreDisplayTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ScoreDisplayTypes.
     */
    cursor?: ScoreDisplayTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreDisplayTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreDisplayTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ScoreDisplayTypes.
     */
    distinct?: ScoreDisplayTypeScalarFieldEnum | ScoreDisplayTypeScalarFieldEnum[]
  }

  /**
   * ScoreDisplayType findMany
   */
  export type ScoreDisplayTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter, which ScoreDisplayTypes to fetch.
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ScoreDisplayTypes to fetch.
     */
    orderBy?: ScoreDisplayTypeOrderByWithRelationInput | ScoreDisplayTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ScoreDisplayTypes.
     */
    cursor?: ScoreDisplayTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ScoreDisplayTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ScoreDisplayTypes.
     */
    skip?: number
    distinct?: ScoreDisplayTypeScalarFieldEnum | ScoreDisplayTypeScalarFieldEnum[]
  }

  /**
   * ScoreDisplayType create
   */
  export type ScoreDisplayTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * The data needed to create a ScoreDisplayType.
     */
    data: XOR<ScoreDisplayTypeCreateInput, ScoreDisplayTypeUncheckedCreateInput>
  }

  /**
   * ScoreDisplayType createMany
   */
  export type ScoreDisplayTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ScoreDisplayTypes.
     */
    data: ScoreDisplayTypeCreateManyInput | ScoreDisplayTypeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ScoreDisplayType update
   */
  export type ScoreDisplayTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * The data needed to update a ScoreDisplayType.
     */
    data: XOR<ScoreDisplayTypeUpdateInput, ScoreDisplayTypeUncheckedUpdateInput>
    /**
     * Choose, which ScoreDisplayType to update.
     */
    where: ScoreDisplayTypeWhereUniqueInput
  }

  /**
   * ScoreDisplayType updateMany
   */
  export type ScoreDisplayTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ScoreDisplayTypes.
     */
    data: XOR<ScoreDisplayTypeUpdateManyMutationInput, ScoreDisplayTypeUncheckedUpdateManyInput>
    /**
     * Filter which ScoreDisplayTypes to update
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * Limit how many ScoreDisplayTypes to update.
     */
    limit?: number
  }

  /**
   * ScoreDisplayType upsert
   */
  export type ScoreDisplayTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * The filter to search for the ScoreDisplayType to update in case it exists.
     */
    where: ScoreDisplayTypeWhereUniqueInput
    /**
     * In case the ScoreDisplayType found by the `where` argument doesn't exist, create a new ScoreDisplayType with this data.
     */
    create: XOR<ScoreDisplayTypeCreateInput, ScoreDisplayTypeUncheckedCreateInput>
    /**
     * In case the ScoreDisplayType was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ScoreDisplayTypeUpdateInput, ScoreDisplayTypeUncheckedUpdateInput>
  }

  /**
   * ScoreDisplayType delete
   */
  export type ScoreDisplayTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
    /**
     * Filter which ScoreDisplayType to delete.
     */
    where: ScoreDisplayTypeWhereUniqueInput
  }

  /**
   * ScoreDisplayType deleteMany
   */
  export type ScoreDisplayTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ScoreDisplayTypes to delete
     */
    where?: ScoreDisplayTypeWhereInput
    /**
     * Limit how many ScoreDisplayTypes to delete.
     */
    limit?: number
  }

  /**
   * ScoreDisplayType without action
   */
  export type ScoreDisplayTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ScoreDisplayType
     */
    select?: ScoreDisplayTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ScoreDisplayType
     */
    omit?: ScoreDisplayTypeOmit<ExtArgs> | null
  }


  /**
   * Model StudentScore
   */

  export type AggregateStudentScore = {
    _count: StudentScoreCountAggregateOutputType | null
    _avg: StudentScoreAvgAggregateOutputType | null
    _sum: StudentScoreSumAggregateOutputType | null
    _min: StudentScoreMinAggregateOutputType | null
    _max: StudentScoreMaxAggregateOutputType | null
  }

  export type StudentScoreAvgAggregateOutputType = {
    id: number | null
    score_setup_id: number | null
    subject_id: number | null
    student_id: number | null
    score: Decimal | null
    created_by: number | null
  }

  export type StudentScoreSumAggregateOutputType = {
    id: number | null
    score_setup_id: number | null
    subject_id: number | null
    student_id: number | null
    score: Decimal | null
    created_by: number | null
  }

  export type StudentScoreMinAggregateOutputType = {
    id: number | null
    score_setup_id: number | null
    subject_id: number | null
    student_id: number | null
    score: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentScoreMaxAggregateOutputType = {
    id: number | null
    score_setup_id: number | null
    subject_id: number | null
    student_id: number | null
    score: Decimal | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentScoreCountAggregateOutputType = {
    id: number
    score_setup_id: number
    subject_id: number
    student_id: number
    score: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type StudentScoreAvgAggregateInputType = {
    id?: true
    score_setup_id?: true
    subject_id?: true
    student_id?: true
    score?: true
    created_by?: true
  }

  export type StudentScoreSumAggregateInputType = {
    id?: true
    score_setup_id?: true
    subject_id?: true
    student_id?: true
    score?: true
    created_by?: true
  }

  export type StudentScoreMinAggregateInputType = {
    id?: true
    score_setup_id?: true
    subject_id?: true
    student_id?: true
    score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentScoreMaxAggregateInputType = {
    id?: true
    score_setup_id?: true
    subject_id?: true
    student_id?: true
    score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentScoreCountAggregateInputType = {
    id?: true
    score_setup_id?: true
    subject_id?: true
    student_id?: true
    score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type StudentScoreAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentScore to aggregate.
     */
    where?: StudentScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentScores to fetch.
     */
    orderBy?: StudentScoreOrderByWithRelationInput | StudentScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StudentScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned StudentScores
    **/
    _count?: true | StudentScoreCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StudentScoreAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StudentScoreSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StudentScoreMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StudentScoreMaxAggregateInputType
  }

  export type GetStudentScoreAggregateType<T extends StudentScoreAggregateArgs> = {
        [P in keyof T & keyof AggregateStudentScore]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStudentScore[P]>
      : GetScalarType<T[P], AggregateStudentScore[P]>
  }




  export type StudentScoreGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentScoreWhereInput
    orderBy?: StudentScoreOrderByWithAggregationInput | StudentScoreOrderByWithAggregationInput[]
    by: StudentScoreScalarFieldEnum[] | StudentScoreScalarFieldEnum
    having?: StudentScoreScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StudentScoreCountAggregateInputType | true
    _avg?: StudentScoreAvgAggregateInputType
    _sum?: StudentScoreSumAggregateInputType
    _min?: StudentScoreMinAggregateInputType
    _max?: StudentScoreMaxAggregateInputType
  }

  export type StudentScoreGroupByOutputType = {
    id: number
    score_setup_id: number
    subject_id: number
    student_id: number
    score: Decimal
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: StudentScoreCountAggregateOutputType | null
    _avg: StudentScoreAvgAggregateOutputType | null
    _sum: StudentScoreSumAggregateOutputType | null
    _min: StudentScoreMinAggregateOutputType | null
    _max: StudentScoreMaxAggregateOutputType | null
  }

  type GetStudentScoreGroupByPayload<T extends StudentScoreGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StudentScoreGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StudentScoreGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StudentScoreGroupByOutputType[P]>
            : GetScalarType<T[P], StudentScoreGroupByOutputType[P]>
        }
      >
    >


  export type StudentScoreSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    score_setup_id?: boolean
    subject_id?: boolean
    student_id?: boolean
    score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["studentScore"]>



  export type StudentScoreSelectScalar = {
    id?: boolean
    score_setup_id?: boolean
    subject_id?: boolean
    student_id?: boolean
    score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type StudentScoreOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "score_setup_id" | "subject_id" | "student_id" | "score" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["studentScore"]>

  export type $StudentScorePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "StudentScore"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      score_setup_id: number
      subject_id: number
      student_id: number
      score: Prisma.Decimal
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["studentScore"]>
    composites: {}
  }

  type StudentScoreGetPayload<S extends boolean | null | undefined | StudentScoreDefaultArgs> = $Result.GetResult<Prisma.$StudentScorePayload, S>

  type StudentScoreCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StudentScoreFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StudentScoreCountAggregateInputType | true
    }

  export interface StudentScoreDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['StudentScore'], meta: { name: 'StudentScore' } }
    /**
     * Find zero or one StudentScore that matches the filter.
     * @param {StudentScoreFindUniqueArgs} args - Arguments to find a StudentScore
     * @example
     * // Get one StudentScore
     * const studentScore = await prisma.studentScore.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StudentScoreFindUniqueArgs>(args: SelectSubset<T, StudentScoreFindUniqueArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one StudentScore that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StudentScoreFindUniqueOrThrowArgs} args - Arguments to find a StudentScore
     * @example
     * // Get one StudentScore
     * const studentScore = await prisma.studentScore.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StudentScoreFindUniqueOrThrowArgs>(args: SelectSubset<T, StudentScoreFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentScore that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreFindFirstArgs} args - Arguments to find a StudentScore
     * @example
     * // Get one StudentScore
     * const studentScore = await prisma.studentScore.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StudentScoreFindFirstArgs>(args?: SelectSubset<T, StudentScoreFindFirstArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentScore that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreFindFirstOrThrowArgs} args - Arguments to find a StudentScore
     * @example
     * // Get one StudentScore
     * const studentScore = await prisma.studentScore.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StudentScoreFindFirstOrThrowArgs>(args?: SelectSubset<T, StudentScoreFindFirstOrThrowArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more StudentScores that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all StudentScores
     * const studentScores = await prisma.studentScore.findMany()
     * 
     * // Get first 10 StudentScores
     * const studentScores = await prisma.studentScore.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const studentScoreWithIdOnly = await prisma.studentScore.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StudentScoreFindManyArgs>(args?: SelectSubset<T, StudentScoreFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a StudentScore.
     * @param {StudentScoreCreateArgs} args - Arguments to create a StudentScore.
     * @example
     * // Create one StudentScore
     * const StudentScore = await prisma.studentScore.create({
     *   data: {
     *     // ... data to create a StudentScore
     *   }
     * })
     * 
     */
    create<T extends StudentScoreCreateArgs>(args: SelectSubset<T, StudentScoreCreateArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many StudentScores.
     * @param {StudentScoreCreateManyArgs} args - Arguments to create many StudentScores.
     * @example
     * // Create many StudentScores
     * const studentScore = await prisma.studentScore.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StudentScoreCreateManyArgs>(args?: SelectSubset<T, StudentScoreCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a StudentScore.
     * @param {StudentScoreDeleteArgs} args - Arguments to delete one StudentScore.
     * @example
     * // Delete one StudentScore
     * const StudentScore = await prisma.studentScore.delete({
     *   where: {
     *     // ... filter to delete one StudentScore
     *   }
     * })
     * 
     */
    delete<T extends StudentScoreDeleteArgs>(args: SelectSubset<T, StudentScoreDeleteArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one StudentScore.
     * @param {StudentScoreUpdateArgs} args - Arguments to update one StudentScore.
     * @example
     * // Update one StudentScore
     * const studentScore = await prisma.studentScore.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StudentScoreUpdateArgs>(args: SelectSubset<T, StudentScoreUpdateArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more StudentScores.
     * @param {StudentScoreDeleteManyArgs} args - Arguments to filter StudentScores to delete.
     * @example
     * // Delete a few StudentScores
     * const { count } = await prisma.studentScore.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StudentScoreDeleteManyArgs>(args?: SelectSubset<T, StudentScoreDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StudentScores.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many StudentScores
     * const studentScore = await prisma.studentScore.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StudentScoreUpdateManyArgs>(args: SelectSubset<T, StudentScoreUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one StudentScore.
     * @param {StudentScoreUpsertArgs} args - Arguments to update or create a StudentScore.
     * @example
     * // Update or create a StudentScore
     * const studentScore = await prisma.studentScore.upsert({
     *   create: {
     *     // ... data to create a StudentScore
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the StudentScore we want to update
     *   }
     * })
     */
    upsert<T extends StudentScoreUpsertArgs>(args: SelectSubset<T, StudentScoreUpsertArgs<ExtArgs>>): Prisma__StudentScoreClient<$Result.GetResult<Prisma.$StudentScorePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of StudentScores.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreCountArgs} args - Arguments to filter StudentScores to count.
     * @example
     * // Count the number of StudentScores
     * const count = await prisma.studentScore.count({
     *   where: {
     *     // ... the filter for the StudentScores we want to count
     *   }
     * })
    **/
    count<T extends StudentScoreCountArgs>(
      args?: Subset<T, StudentScoreCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StudentScoreCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a StudentScore.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StudentScoreAggregateArgs>(args: Subset<T, StudentScoreAggregateArgs>): Prisma.PrismaPromise<GetStudentScoreAggregateType<T>>

    /**
     * Group by StudentScore.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentScoreGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StudentScoreGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StudentScoreGroupByArgs['orderBy'] }
        : { orderBy?: StudentScoreGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StudentScoreGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStudentScoreGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the StudentScore model
   */
  readonly fields: StudentScoreFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for StudentScore.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StudentScoreClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the StudentScore model
   */
  interface StudentScoreFieldRefs {
    readonly id: FieldRef<"StudentScore", 'Int'>
    readonly score_setup_id: FieldRef<"StudentScore", 'Int'>
    readonly subject_id: FieldRef<"StudentScore", 'Int'>
    readonly student_id: FieldRef<"StudentScore", 'Int'>
    readonly score: FieldRef<"StudentScore", 'Decimal'>
    readonly created_by: FieldRef<"StudentScore", 'Int'>
    readonly created_at: FieldRef<"StudentScore", 'DateTime'>
    readonly updated_at: FieldRef<"StudentScore", 'DateTime'>
    readonly deleted_at: FieldRef<"StudentScore", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * StudentScore findUnique
   */
  export type StudentScoreFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentScore to fetch.
     */
    where: StudentScoreWhereUniqueInput
  }

  /**
   * StudentScore findUniqueOrThrow
   */
  export type StudentScoreFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentScore to fetch.
     */
    where: StudentScoreWhereUniqueInput
  }

  /**
   * StudentScore findFirst
   */
  export type StudentScoreFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentScore to fetch.
     */
    where?: StudentScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentScores to fetch.
     */
    orderBy?: StudentScoreOrderByWithRelationInput | StudentScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentScores.
     */
    cursor?: StudentScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentScores.
     */
    distinct?: StudentScoreScalarFieldEnum | StudentScoreScalarFieldEnum[]
  }

  /**
   * StudentScore findFirstOrThrow
   */
  export type StudentScoreFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentScore to fetch.
     */
    where?: StudentScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentScores to fetch.
     */
    orderBy?: StudentScoreOrderByWithRelationInput | StudentScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentScores.
     */
    cursor?: StudentScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentScores.
     */
    distinct?: StudentScoreScalarFieldEnum | StudentScoreScalarFieldEnum[]
  }

  /**
   * StudentScore findMany
   */
  export type StudentScoreFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentScores to fetch.
     */
    where?: StudentScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentScores to fetch.
     */
    orderBy?: StudentScoreOrderByWithRelationInput | StudentScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing StudentScores.
     */
    cursor?: StudentScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentScores.
     */
    skip?: number
    distinct?: StudentScoreScalarFieldEnum | StudentScoreScalarFieldEnum[]
  }

  /**
   * StudentScore create
   */
  export type StudentScoreCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * The data needed to create a StudentScore.
     */
    data: XOR<StudentScoreCreateInput, StudentScoreUncheckedCreateInput>
  }

  /**
   * StudentScore createMany
   */
  export type StudentScoreCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many StudentScores.
     */
    data: StudentScoreCreateManyInput | StudentScoreCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * StudentScore update
   */
  export type StudentScoreUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * The data needed to update a StudentScore.
     */
    data: XOR<StudentScoreUpdateInput, StudentScoreUncheckedUpdateInput>
    /**
     * Choose, which StudentScore to update.
     */
    where: StudentScoreWhereUniqueInput
  }

  /**
   * StudentScore updateMany
   */
  export type StudentScoreUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update StudentScores.
     */
    data: XOR<StudentScoreUpdateManyMutationInput, StudentScoreUncheckedUpdateManyInput>
    /**
     * Filter which StudentScores to update
     */
    where?: StudentScoreWhereInput
    /**
     * Limit how many StudentScores to update.
     */
    limit?: number
  }

  /**
   * StudentScore upsert
   */
  export type StudentScoreUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * The filter to search for the StudentScore to update in case it exists.
     */
    where: StudentScoreWhereUniqueInput
    /**
     * In case the StudentScore found by the `where` argument doesn't exist, create a new StudentScore with this data.
     */
    create: XOR<StudentScoreCreateInput, StudentScoreUncheckedCreateInput>
    /**
     * In case the StudentScore was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StudentScoreUpdateInput, StudentScoreUncheckedUpdateInput>
  }

  /**
   * StudentScore delete
   */
  export type StudentScoreDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
    /**
     * Filter which StudentScore to delete.
     */
    where: StudentScoreWhereUniqueInput
  }

  /**
   * StudentScore deleteMany
   */
  export type StudentScoreDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentScores to delete
     */
    where?: StudentScoreWhereInput
    /**
     * Limit how many StudentScores to delete.
     */
    limit?: number
  }

  /**
   * StudentScore without action
   */
  export type StudentScoreDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentScore
     */
    select?: StudentScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentScore
     */
    omit?: StudentScoreOmit<ExtArgs> | null
  }


  /**
   * Model StudentTotalScore
   */

  export type AggregateStudentTotalScore = {
    _count: StudentTotalScoreCountAggregateOutputType | null
    _avg: StudentTotalScoreAvgAggregateOutputType | null
    _sum: StudentTotalScoreSumAggregateOutputType | null
    _min: StudentTotalScoreMinAggregateOutputType | null
    _max: StudentTotalScoreMaxAggregateOutputType | null
  }

  export type StudentTotalScoreAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    totalscore: Decimal | null
    no_of_subject: number | null
    group_position: number | null
    created_by: number | null
  }

  export type StudentTotalScoreSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    totalscore: Decimal | null
    no_of_subject: number | null
    group_position: number | null
    created_by: number | null
  }

  export type StudentTotalScoreMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    totalscore: Decimal | null
    no_of_subject: number | null
    group_position: number | null
    teachers_comment: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentTotalScoreMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    totalscore: Decimal | null
    no_of_subject: number | null
    group_position: number | null
    teachers_comment: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentTotalScoreCountAggregateOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    totalscore: number
    no_of_subject: number
    group_position: number
    teachers_comment: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type StudentTotalScoreAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    totalscore?: true
    no_of_subject?: true
    group_position?: true
    created_by?: true
  }

  export type StudentTotalScoreSumAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    totalscore?: true
    no_of_subject?: true
    group_position?: true
    created_by?: true
  }

  export type StudentTotalScoreMinAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    totalscore?: true
    no_of_subject?: true
    group_position?: true
    teachers_comment?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentTotalScoreMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    totalscore?: true
    no_of_subject?: true
    group_position?: true
    teachers_comment?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentTotalScoreCountAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    totalscore?: true
    no_of_subject?: true
    group_position?: true
    teachers_comment?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type StudentTotalScoreAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentTotalScore to aggregate.
     */
    where?: StudentTotalScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTotalScores to fetch.
     */
    orderBy?: StudentTotalScoreOrderByWithRelationInput | StudentTotalScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StudentTotalScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTotalScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTotalScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned StudentTotalScores
    **/
    _count?: true | StudentTotalScoreCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StudentTotalScoreAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StudentTotalScoreSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StudentTotalScoreMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StudentTotalScoreMaxAggregateInputType
  }

  export type GetStudentTotalScoreAggregateType<T extends StudentTotalScoreAggregateArgs> = {
        [P in keyof T & keyof AggregateStudentTotalScore]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStudentTotalScore[P]>
      : GetScalarType<T[P], AggregateStudentTotalScore[P]>
  }




  export type StudentTotalScoreGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentTotalScoreWhereInput
    orderBy?: StudentTotalScoreOrderByWithAggregationInput | StudentTotalScoreOrderByWithAggregationInput[]
    by: StudentTotalScoreScalarFieldEnum[] | StudentTotalScoreScalarFieldEnum
    having?: StudentTotalScoreScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StudentTotalScoreCountAggregateInputType | true
    _avg?: StudentTotalScoreAvgAggregateInputType
    _sum?: StudentTotalScoreSumAggregateInputType
    _min?: StudentTotalScoreMinAggregateInputType
    _max?: StudentTotalScoreMaxAggregateInputType
  }

  export type StudentTotalScoreGroupByOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    totalscore: Decimal
    no_of_subject: number
    group_position: number
    teachers_comment: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: StudentTotalScoreCountAggregateOutputType | null
    _avg: StudentTotalScoreAvgAggregateOutputType | null
    _sum: StudentTotalScoreSumAggregateOutputType | null
    _min: StudentTotalScoreMinAggregateOutputType | null
    _max: StudentTotalScoreMaxAggregateOutputType | null
  }

  type GetStudentTotalScoreGroupByPayload<T extends StudentTotalScoreGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StudentTotalScoreGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StudentTotalScoreGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StudentTotalScoreGroupByOutputType[P]>
            : GetScalarType<T[P], StudentTotalScoreGroupByOutputType[P]>
        }
      >
    >


  export type StudentTotalScoreSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    student_id?: boolean
    totalscore?: boolean
    no_of_subject?: boolean
    group_position?: boolean
    teachers_comment?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["studentTotalScore"]>



  export type StudentTotalScoreSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    student_id?: boolean
    totalscore?: boolean
    no_of_subject?: boolean
    group_position?: boolean
    teachers_comment?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type StudentTotalScoreOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "specialization_id" | "group_id" | "student_id" | "totalscore" | "no_of_subject" | "group_position" | "teachers_comment" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["studentTotalScore"]>

  export type $StudentTotalScorePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "StudentTotalScore"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      specialization_id: number
      group_id: number
      student_id: number
      totalscore: Prisma.Decimal
      no_of_subject: number
      group_position: number
      teachers_comment: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["studentTotalScore"]>
    composites: {}
  }

  type StudentTotalScoreGetPayload<S extends boolean | null | undefined | StudentTotalScoreDefaultArgs> = $Result.GetResult<Prisma.$StudentTotalScorePayload, S>

  type StudentTotalScoreCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StudentTotalScoreFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StudentTotalScoreCountAggregateInputType | true
    }

  export interface StudentTotalScoreDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['StudentTotalScore'], meta: { name: 'StudentTotalScore' } }
    /**
     * Find zero or one StudentTotalScore that matches the filter.
     * @param {StudentTotalScoreFindUniqueArgs} args - Arguments to find a StudentTotalScore
     * @example
     * // Get one StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StudentTotalScoreFindUniqueArgs>(args: SelectSubset<T, StudentTotalScoreFindUniqueArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one StudentTotalScore that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StudentTotalScoreFindUniqueOrThrowArgs} args - Arguments to find a StudentTotalScore
     * @example
     * // Get one StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StudentTotalScoreFindUniqueOrThrowArgs>(args: SelectSubset<T, StudentTotalScoreFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentTotalScore that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreFindFirstArgs} args - Arguments to find a StudentTotalScore
     * @example
     * // Get one StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StudentTotalScoreFindFirstArgs>(args?: SelectSubset<T, StudentTotalScoreFindFirstArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentTotalScore that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreFindFirstOrThrowArgs} args - Arguments to find a StudentTotalScore
     * @example
     * // Get one StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StudentTotalScoreFindFirstOrThrowArgs>(args?: SelectSubset<T, StudentTotalScoreFindFirstOrThrowArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more StudentTotalScores that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all StudentTotalScores
     * const studentTotalScores = await prisma.studentTotalScore.findMany()
     * 
     * // Get first 10 StudentTotalScores
     * const studentTotalScores = await prisma.studentTotalScore.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const studentTotalScoreWithIdOnly = await prisma.studentTotalScore.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StudentTotalScoreFindManyArgs>(args?: SelectSubset<T, StudentTotalScoreFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a StudentTotalScore.
     * @param {StudentTotalScoreCreateArgs} args - Arguments to create a StudentTotalScore.
     * @example
     * // Create one StudentTotalScore
     * const StudentTotalScore = await prisma.studentTotalScore.create({
     *   data: {
     *     // ... data to create a StudentTotalScore
     *   }
     * })
     * 
     */
    create<T extends StudentTotalScoreCreateArgs>(args: SelectSubset<T, StudentTotalScoreCreateArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many StudentTotalScores.
     * @param {StudentTotalScoreCreateManyArgs} args - Arguments to create many StudentTotalScores.
     * @example
     * // Create many StudentTotalScores
     * const studentTotalScore = await prisma.studentTotalScore.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StudentTotalScoreCreateManyArgs>(args?: SelectSubset<T, StudentTotalScoreCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a StudentTotalScore.
     * @param {StudentTotalScoreDeleteArgs} args - Arguments to delete one StudentTotalScore.
     * @example
     * // Delete one StudentTotalScore
     * const StudentTotalScore = await prisma.studentTotalScore.delete({
     *   where: {
     *     // ... filter to delete one StudentTotalScore
     *   }
     * })
     * 
     */
    delete<T extends StudentTotalScoreDeleteArgs>(args: SelectSubset<T, StudentTotalScoreDeleteArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one StudentTotalScore.
     * @param {StudentTotalScoreUpdateArgs} args - Arguments to update one StudentTotalScore.
     * @example
     * // Update one StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StudentTotalScoreUpdateArgs>(args: SelectSubset<T, StudentTotalScoreUpdateArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more StudentTotalScores.
     * @param {StudentTotalScoreDeleteManyArgs} args - Arguments to filter StudentTotalScores to delete.
     * @example
     * // Delete a few StudentTotalScores
     * const { count } = await prisma.studentTotalScore.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StudentTotalScoreDeleteManyArgs>(args?: SelectSubset<T, StudentTotalScoreDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StudentTotalScores.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many StudentTotalScores
     * const studentTotalScore = await prisma.studentTotalScore.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StudentTotalScoreUpdateManyArgs>(args: SelectSubset<T, StudentTotalScoreUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one StudentTotalScore.
     * @param {StudentTotalScoreUpsertArgs} args - Arguments to update or create a StudentTotalScore.
     * @example
     * // Update or create a StudentTotalScore
     * const studentTotalScore = await prisma.studentTotalScore.upsert({
     *   create: {
     *     // ... data to create a StudentTotalScore
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the StudentTotalScore we want to update
     *   }
     * })
     */
    upsert<T extends StudentTotalScoreUpsertArgs>(args: SelectSubset<T, StudentTotalScoreUpsertArgs<ExtArgs>>): Prisma__StudentTotalScoreClient<$Result.GetResult<Prisma.$StudentTotalScorePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of StudentTotalScores.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreCountArgs} args - Arguments to filter StudentTotalScores to count.
     * @example
     * // Count the number of StudentTotalScores
     * const count = await prisma.studentTotalScore.count({
     *   where: {
     *     // ... the filter for the StudentTotalScores we want to count
     *   }
     * })
    **/
    count<T extends StudentTotalScoreCountArgs>(
      args?: Subset<T, StudentTotalScoreCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StudentTotalScoreCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a StudentTotalScore.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StudentTotalScoreAggregateArgs>(args: Subset<T, StudentTotalScoreAggregateArgs>): Prisma.PrismaPromise<GetStudentTotalScoreAggregateType<T>>

    /**
     * Group by StudentTotalScore.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTotalScoreGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StudentTotalScoreGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StudentTotalScoreGroupByArgs['orderBy'] }
        : { orderBy?: StudentTotalScoreGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StudentTotalScoreGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStudentTotalScoreGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the StudentTotalScore model
   */
  readonly fields: StudentTotalScoreFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for StudentTotalScore.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StudentTotalScoreClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the StudentTotalScore model
   */
  interface StudentTotalScoreFieldRefs {
    readonly id: FieldRef<"StudentTotalScore", 'Int'>
    readonly session_class_id: FieldRef<"StudentTotalScore", 'Int'>
    readonly specialization_id: FieldRef<"StudentTotalScore", 'Int'>
    readonly group_id: FieldRef<"StudentTotalScore", 'Int'>
    readonly student_id: FieldRef<"StudentTotalScore", 'Int'>
    readonly totalscore: FieldRef<"StudentTotalScore", 'Decimal'>
    readonly no_of_subject: FieldRef<"StudentTotalScore", 'Int'>
    readonly group_position: FieldRef<"StudentTotalScore", 'Int'>
    readonly teachers_comment: FieldRef<"StudentTotalScore", 'String'>
    readonly created_by: FieldRef<"StudentTotalScore", 'Int'>
    readonly created_at: FieldRef<"StudentTotalScore", 'DateTime'>
    readonly updated_at: FieldRef<"StudentTotalScore", 'DateTime'>
    readonly deleted_at: FieldRef<"StudentTotalScore", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * StudentTotalScore findUnique
   */
  export type StudentTotalScoreFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentTotalScore to fetch.
     */
    where: StudentTotalScoreWhereUniqueInput
  }

  /**
   * StudentTotalScore findUniqueOrThrow
   */
  export type StudentTotalScoreFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentTotalScore to fetch.
     */
    where: StudentTotalScoreWhereUniqueInput
  }

  /**
   * StudentTotalScore findFirst
   */
  export type StudentTotalScoreFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentTotalScore to fetch.
     */
    where?: StudentTotalScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTotalScores to fetch.
     */
    orderBy?: StudentTotalScoreOrderByWithRelationInput | StudentTotalScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentTotalScores.
     */
    cursor?: StudentTotalScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTotalScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTotalScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentTotalScores.
     */
    distinct?: StudentTotalScoreScalarFieldEnum | StudentTotalScoreScalarFieldEnum[]
  }

  /**
   * StudentTotalScore findFirstOrThrow
   */
  export type StudentTotalScoreFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentTotalScore to fetch.
     */
    where?: StudentTotalScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTotalScores to fetch.
     */
    orderBy?: StudentTotalScoreOrderByWithRelationInput | StudentTotalScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentTotalScores.
     */
    cursor?: StudentTotalScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTotalScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTotalScores.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentTotalScores.
     */
    distinct?: StudentTotalScoreScalarFieldEnum | StudentTotalScoreScalarFieldEnum[]
  }

  /**
   * StudentTotalScore findMany
   */
  export type StudentTotalScoreFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter, which StudentTotalScores to fetch.
     */
    where?: StudentTotalScoreWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTotalScores to fetch.
     */
    orderBy?: StudentTotalScoreOrderByWithRelationInput | StudentTotalScoreOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing StudentTotalScores.
     */
    cursor?: StudentTotalScoreWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTotalScores from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTotalScores.
     */
    skip?: number
    distinct?: StudentTotalScoreScalarFieldEnum | StudentTotalScoreScalarFieldEnum[]
  }

  /**
   * StudentTotalScore create
   */
  export type StudentTotalScoreCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * The data needed to create a StudentTotalScore.
     */
    data: XOR<StudentTotalScoreCreateInput, StudentTotalScoreUncheckedCreateInput>
  }

  /**
   * StudentTotalScore createMany
   */
  export type StudentTotalScoreCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many StudentTotalScores.
     */
    data: StudentTotalScoreCreateManyInput | StudentTotalScoreCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * StudentTotalScore update
   */
  export type StudentTotalScoreUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * The data needed to update a StudentTotalScore.
     */
    data: XOR<StudentTotalScoreUpdateInput, StudentTotalScoreUncheckedUpdateInput>
    /**
     * Choose, which StudentTotalScore to update.
     */
    where: StudentTotalScoreWhereUniqueInput
  }

  /**
   * StudentTotalScore updateMany
   */
  export type StudentTotalScoreUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update StudentTotalScores.
     */
    data: XOR<StudentTotalScoreUpdateManyMutationInput, StudentTotalScoreUncheckedUpdateManyInput>
    /**
     * Filter which StudentTotalScores to update
     */
    where?: StudentTotalScoreWhereInput
    /**
     * Limit how many StudentTotalScores to update.
     */
    limit?: number
  }

  /**
   * StudentTotalScore upsert
   */
  export type StudentTotalScoreUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * The filter to search for the StudentTotalScore to update in case it exists.
     */
    where: StudentTotalScoreWhereUniqueInput
    /**
     * In case the StudentTotalScore found by the `where` argument doesn't exist, create a new StudentTotalScore with this data.
     */
    create: XOR<StudentTotalScoreCreateInput, StudentTotalScoreUncheckedCreateInput>
    /**
     * In case the StudentTotalScore was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StudentTotalScoreUpdateInput, StudentTotalScoreUncheckedUpdateInput>
  }

  /**
   * StudentTotalScore delete
   */
  export type StudentTotalScoreDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
    /**
     * Filter which StudentTotalScore to delete.
     */
    where: StudentTotalScoreWhereUniqueInput
  }

  /**
   * StudentTotalScore deleteMany
   */
  export type StudentTotalScoreDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentTotalScores to delete
     */
    where?: StudentTotalScoreWhereInput
    /**
     * Limit how many StudentTotalScores to delete.
     */
    limit?: number
  }

  /**
   * StudentTotalScore without action
   */
  export type StudentTotalScoreDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTotalScore
     */
    select?: StudentTotalScoreSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTotalScore
     */
    omit?: StudentTotalScoreOmit<ExtArgs> | null
  }


  /**
   * Model StudentTracking
   */

  export type AggregateStudentTracking = {
    _count: StudentTrackingCountAggregateOutputType | null
    _avg: StudentTrackingAvgAggregateOutputType | null
    _sum: StudentTrackingSumAggregateOutputType | null
    _min: StudentTrackingMinAggregateOutputType | null
    _max: StudentTrackingMaxAggregateOutputType | null
  }

  export type StudentTrackingAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    created_by: number | null
  }

  export type StudentTrackingSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    created_by: number | null
  }

  export type StudentTrackingMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentTrackingMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    student_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type StudentTrackingCountAggregateOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type StudentTrackingAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    created_by?: true
  }

  export type StudentTrackingSumAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    created_by?: true
  }

  export type StudentTrackingMinAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentTrackingMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type StudentTrackingCountAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    student_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type StudentTrackingAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentTracking to aggregate.
     */
    where?: StudentTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTrackings to fetch.
     */
    orderBy?: StudentTrackingOrderByWithRelationInput | StudentTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StudentTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned StudentTrackings
    **/
    _count?: true | StudentTrackingCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StudentTrackingAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StudentTrackingSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StudentTrackingMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StudentTrackingMaxAggregateInputType
  }

  export type GetStudentTrackingAggregateType<T extends StudentTrackingAggregateArgs> = {
        [P in keyof T & keyof AggregateStudentTracking]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateStudentTracking[P]>
      : GetScalarType<T[P], AggregateStudentTracking[P]>
  }




  export type StudentTrackingGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StudentTrackingWhereInput
    orderBy?: StudentTrackingOrderByWithAggregationInput | StudentTrackingOrderByWithAggregationInput[]
    by: StudentTrackingScalarFieldEnum[] | StudentTrackingScalarFieldEnum
    having?: StudentTrackingScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StudentTrackingCountAggregateInputType | true
    _avg?: StudentTrackingAvgAggregateInputType
    _sum?: StudentTrackingSumAggregateInputType
    _min?: StudentTrackingMinAggregateInputType
    _max?: StudentTrackingMaxAggregateInputType
  }

  export type StudentTrackingGroupByOutputType = {
    id: number
    session_class_id: number
    specialization_id: number | null
    group_id: number | null
    student_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: StudentTrackingCountAggregateOutputType | null
    _avg: StudentTrackingAvgAggregateOutputType | null
    _sum: StudentTrackingSumAggregateOutputType | null
    _min: StudentTrackingMinAggregateOutputType | null
    _max: StudentTrackingMaxAggregateOutputType | null
  }

  type GetStudentTrackingGroupByPayload<T extends StudentTrackingGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StudentTrackingGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StudentTrackingGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StudentTrackingGroupByOutputType[P]>
            : GetScalarType<T[P], StudentTrackingGroupByOutputType[P]>
        }
      >
    >


  export type StudentTrackingSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    student_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    student?: boolean | StudentDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["studentTracking"]>



  export type StudentTrackingSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    student_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type StudentTrackingOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "specialization_id" | "group_id" | "student_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["studentTracking"]>
  export type StudentTrackingInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    student?: boolean | StudentDefaultArgs<ExtArgs>
  }

  export type $StudentTrackingPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "StudentTracking"
    objects: {
      student: Prisma.$StudentPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      specialization_id: number | null
      group_id: number | null
      student_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["studentTracking"]>
    composites: {}
  }

  type StudentTrackingGetPayload<S extends boolean | null | undefined | StudentTrackingDefaultArgs> = $Result.GetResult<Prisma.$StudentTrackingPayload, S>

  type StudentTrackingCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StudentTrackingFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StudentTrackingCountAggregateInputType | true
    }

  export interface StudentTrackingDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['StudentTracking'], meta: { name: 'StudentTracking' } }
    /**
     * Find zero or one StudentTracking that matches the filter.
     * @param {StudentTrackingFindUniqueArgs} args - Arguments to find a StudentTracking
     * @example
     * // Get one StudentTracking
     * const studentTracking = await prisma.studentTracking.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StudentTrackingFindUniqueArgs>(args: SelectSubset<T, StudentTrackingFindUniqueArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one StudentTracking that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StudentTrackingFindUniqueOrThrowArgs} args - Arguments to find a StudentTracking
     * @example
     * // Get one StudentTracking
     * const studentTracking = await prisma.studentTracking.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StudentTrackingFindUniqueOrThrowArgs>(args: SelectSubset<T, StudentTrackingFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentTracking that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingFindFirstArgs} args - Arguments to find a StudentTracking
     * @example
     * // Get one StudentTracking
     * const studentTracking = await prisma.studentTracking.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StudentTrackingFindFirstArgs>(args?: SelectSubset<T, StudentTrackingFindFirstArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first StudentTracking that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingFindFirstOrThrowArgs} args - Arguments to find a StudentTracking
     * @example
     * // Get one StudentTracking
     * const studentTracking = await prisma.studentTracking.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StudentTrackingFindFirstOrThrowArgs>(args?: SelectSubset<T, StudentTrackingFindFirstOrThrowArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more StudentTrackings that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all StudentTrackings
     * const studentTrackings = await prisma.studentTracking.findMany()
     * 
     * // Get first 10 StudentTrackings
     * const studentTrackings = await prisma.studentTracking.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const studentTrackingWithIdOnly = await prisma.studentTracking.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StudentTrackingFindManyArgs>(args?: SelectSubset<T, StudentTrackingFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a StudentTracking.
     * @param {StudentTrackingCreateArgs} args - Arguments to create a StudentTracking.
     * @example
     * // Create one StudentTracking
     * const StudentTracking = await prisma.studentTracking.create({
     *   data: {
     *     // ... data to create a StudentTracking
     *   }
     * })
     * 
     */
    create<T extends StudentTrackingCreateArgs>(args: SelectSubset<T, StudentTrackingCreateArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many StudentTrackings.
     * @param {StudentTrackingCreateManyArgs} args - Arguments to create many StudentTrackings.
     * @example
     * // Create many StudentTrackings
     * const studentTracking = await prisma.studentTracking.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StudentTrackingCreateManyArgs>(args?: SelectSubset<T, StudentTrackingCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a StudentTracking.
     * @param {StudentTrackingDeleteArgs} args - Arguments to delete one StudentTracking.
     * @example
     * // Delete one StudentTracking
     * const StudentTracking = await prisma.studentTracking.delete({
     *   where: {
     *     // ... filter to delete one StudentTracking
     *   }
     * })
     * 
     */
    delete<T extends StudentTrackingDeleteArgs>(args: SelectSubset<T, StudentTrackingDeleteArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one StudentTracking.
     * @param {StudentTrackingUpdateArgs} args - Arguments to update one StudentTracking.
     * @example
     * // Update one StudentTracking
     * const studentTracking = await prisma.studentTracking.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StudentTrackingUpdateArgs>(args: SelectSubset<T, StudentTrackingUpdateArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more StudentTrackings.
     * @param {StudentTrackingDeleteManyArgs} args - Arguments to filter StudentTrackings to delete.
     * @example
     * // Delete a few StudentTrackings
     * const { count } = await prisma.studentTracking.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StudentTrackingDeleteManyArgs>(args?: SelectSubset<T, StudentTrackingDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more StudentTrackings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many StudentTrackings
     * const studentTracking = await prisma.studentTracking.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StudentTrackingUpdateManyArgs>(args: SelectSubset<T, StudentTrackingUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one StudentTracking.
     * @param {StudentTrackingUpsertArgs} args - Arguments to update or create a StudentTracking.
     * @example
     * // Update or create a StudentTracking
     * const studentTracking = await prisma.studentTracking.upsert({
     *   create: {
     *     // ... data to create a StudentTracking
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the StudentTracking we want to update
     *   }
     * })
     */
    upsert<T extends StudentTrackingUpsertArgs>(args: SelectSubset<T, StudentTrackingUpsertArgs<ExtArgs>>): Prisma__StudentTrackingClient<$Result.GetResult<Prisma.$StudentTrackingPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of StudentTrackings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingCountArgs} args - Arguments to filter StudentTrackings to count.
     * @example
     * // Count the number of StudentTrackings
     * const count = await prisma.studentTracking.count({
     *   where: {
     *     // ... the filter for the StudentTrackings we want to count
     *   }
     * })
    **/
    count<T extends StudentTrackingCountArgs>(
      args?: Subset<T, StudentTrackingCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StudentTrackingCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a StudentTracking.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StudentTrackingAggregateArgs>(args: Subset<T, StudentTrackingAggregateArgs>): Prisma.PrismaPromise<GetStudentTrackingAggregateType<T>>

    /**
     * Group by StudentTracking.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StudentTrackingGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StudentTrackingGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StudentTrackingGroupByArgs['orderBy'] }
        : { orderBy?: StudentTrackingGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StudentTrackingGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStudentTrackingGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the StudentTracking model
   */
  readonly fields: StudentTrackingFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for StudentTracking.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StudentTrackingClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    student<T extends StudentDefaultArgs<ExtArgs> = {}>(args?: Subset<T, StudentDefaultArgs<ExtArgs>>): Prisma__StudentClient<$Result.GetResult<Prisma.$StudentPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the StudentTracking model
   */
  interface StudentTrackingFieldRefs {
    readonly id: FieldRef<"StudentTracking", 'Int'>
    readonly session_class_id: FieldRef<"StudentTracking", 'Int'>
    readonly specialization_id: FieldRef<"StudentTracking", 'Int'>
    readonly group_id: FieldRef<"StudentTracking", 'Int'>
    readonly student_id: FieldRef<"StudentTracking", 'Int'>
    readonly created_by: FieldRef<"StudentTracking", 'Int'>
    readonly created_at: FieldRef<"StudentTracking", 'DateTime'>
    readonly updated_at: FieldRef<"StudentTracking", 'DateTime'>
    readonly deleted_at: FieldRef<"StudentTracking", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * StudentTracking findUnique
   */
  export type StudentTrackingFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter, which StudentTracking to fetch.
     */
    where: StudentTrackingWhereUniqueInput
  }

  /**
   * StudentTracking findUniqueOrThrow
   */
  export type StudentTrackingFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter, which StudentTracking to fetch.
     */
    where: StudentTrackingWhereUniqueInput
  }

  /**
   * StudentTracking findFirst
   */
  export type StudentTrackingFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter, which StudentTracking to fetch.
     */
    where?: StudentTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTrackings to fetch.
     */
    orderBy?: StudentTrackingOrderByWithRelationInput | StudentTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentTrackings.
     */
    cursor?: StudentTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentTrackings.
     */
    distinct?: StudentTrackingScalarFieldEnum | StudentTrackingScalarFieldEnum[]
  }

  /**
   * StudentTracking findFirstOrThrow
   */
  export type StudentTrackingFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter, which StudentTracking to fetch.
     */
    where?: StudentTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTrackings to fetch.
     */
    orderBy?: StudentTrackingOrderByWithRelationInput | StudentTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for StudentTrackings.
     */
    cursor?: StudentTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTrackings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of StudentTrackings.
     */
    distinct?: StudentTrackingScalarFieldEnum | StudentTrackingScalarFieldEnum[]
  }

  /**
   * StudentTracking findMany
   */
  export type StudentTrackingFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter, which StudentTrackings to fetch.
     */
    where?: StudentTrackingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of StudentTrackings to fetch.
     */
    orderBy?: StudentTrackingOrderByWithRelationInput | StudentTrackingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing StudentTrackings.
     */
    cursor?: StudentTrackingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` StudentTrackings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` StudentTrackings.
     */
    skip?: number
    distinct?: StudentTrackingScalarFieldEnum | StudentTrackingScalarFieldEnum[]
  }

  /**
   * StudentTracking create
   */
  export type StudentTrackingCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * The data needed to create a StudentTracking.
     */
    data: XOR<StudentTrackingCreateInput, StudentTrackingUncheckedCreateInput>
  }

  /**
   * StudentTracking createMany
   */
  export type StudentTrackingCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many StudentTrackings.
     */
    data: StudentTrackingCreateManyInput | StudentTrackingCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * StudentTracking update
   */
  export type StudentTrackingUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * The data needed to update a StudentTracking.
     */
    data: XOR<StudentTrackingUpdateInput, StudentTrackingUncheckedUpdateInput>
    /**
     * Choose, which StudentTracking to update.
     */
    where: StudentTrackingWhereUniqueInput
  }

  /**
   * StudentTracking updateMany
   */
  export type StudentTrackingUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update StudentTrackings.
     */
    data: XOR<StudentTrackingUpdateManyMutationInput, StudentTrackingUncheckedUpdateManyInput>
    /**
     * Filter which StudentTrackings to update
     */
    where?: StudentTrackingWhereInput
    /**
     * Limit how many StudentTrackings to update.
     */
    limit?: number
  }

  /**
   * StudentTracking upsert
   */
  export type StudentTrackingUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * The filter to search for the StudentTracking to update in case it exists.
     */
    where: StudentTrackingWhereUniqueInput
    /**
     * In case the StudentTracking found by the `where` argument doesn't exist, create a new StudentTracking with this data.
     */
    create: XOR<StudentTrackingCreateInput, StudentTrackingUncheckedCreateInput>
    /**
     * In case the StudentTracking was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StudentTrackingUpdateInput, StudentTrackingUncheckedUpdateInput>
  }

  /**
   * StudentTracking delete
   */
  export type StudentTrackingDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
    /**
     * Filter which StudentTracking to delete.
     */
    where: StudentTrackingWhereUniqueInput
  }

  /**
   * StudentTracking deleteMany
   */
  export type StudentTrackingDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which StudentTrackings to delete
     */
    where?: StudentTrackingWhereInput
    /**
     * Limit how many StudentTrackings to delete.
     */
    limit?: number
  }

  /**
   * StudentTracking without action
   */
  export type StudentTrackingDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the StudentTracking
     */
    select?: StudentTrackingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the StudentTracking
     */
    omit?: StudentTrackingOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StudentTrackingInclude<ExtArgs> | null
  }


  /**
   * Model ReportCardSetting
   */

  export type AggregateReportCardSetting = {
    _count: ReportCardSettingCountAggregateOutputType | null
    _avg: ReportCardSettingAvgAggregateOutputType | null
    _sum: ReportCardSettingSumAggregateOutputType | null
    _min: ReportCardSettingMinAggregateOutputType | null
    _max: ReportCardSettingMaxAggregateOutputType | null
  }

  export type ReportCardSettingAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    is_report_generated: number | null
    display_student_position: number | null
    show_previous_terms: number | null
    accumulate_with_previous: number | null
    display_attendance_in_report: number | null
    created_by: number | null
  }

  export type ReportCardSettingSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    is_report_generated: number | null
    display_student_position: number | null
    show_previous_terms: number | null
    accumulate_with_previous: number | null
    display_attendance_in_report: number | null
    created_by: number | null
  }

  export type ReportCardSettingMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    is_report_generated: number | null
    display_student_position: number | null
    show_previous_terms: number | null
    accumulate_with_previous: number | null
    display_attendance_in_report: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ReportCardSettingMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    is_report_generated: number | null
    display_student_position: number | null
    show_previous_terms: number | null
    accumulate_with_previous: number | null
    display_attendance_in_report: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ReportCardSettingCountAggregateOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number
    is_report_generated: number
    display_student_position: number
    show_previous_terms: number
    accumulate_with_previous: number
    display_attendance_in_report: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ReportCardSettingAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    is_report_generated?: true
    display_student_position?: true
    show_previous_terms?: true
    accumulate_with_previous?: true
    display_attendance_in_report?: true
    created_by?: true
  }

  export type ReportCardSettingSumAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    is_report_generated?: true
    display_student_position?: true
    show_previous_terms?: true
    accumulate_with_previous?: true
    display_attendance_in_report?: true
    created_by?: true
  }

  export type ReportCardSettingMinAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    is_report_generated?: true
    display_student_position?: true
    show_previous_terms?: true
    accumulate_with_previous?: true
    display_attendance_in_report?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ReportCardSettingMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    is_report_generated?: true
    display_student_position?: true
    show_previous_terms?: true
    accumulate_with_previous?: true
    display_attendance_in_report?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ReportCardSettingCountAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    is_report_generated?: true
    display_student_position?: true
    show_previous_terms?: true
    accumulate_with_previous?: true
    display_attendance_in_report?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ReportCardSettingAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ReportCardSetting to aggregate.
     */
    where?: ReportCardSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ReportCardSettings to fetch.
     */
    orderBy?: ReportCardSettingOrderByWithRelationInput | ReportCardSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ReportCardSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ReportCardSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ReportCardSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ReportCardSettings
    **/
    _count?: true | ReportCardSettingCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ReportCardSettingAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ReportCardSettingSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ReportCardSettingMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ReportCardSettingMaxAggregateInputType
  }

  export type GetReportCardSettingAggregateType<T extends ReportCardSettingAggregateArgs> = {
        [P in keyof T & keyof AggregateReportCardSetting]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateReportCardSetting[P]>
      : GetScalarType<T[P], AggregateReportCardSetting[P]>
  }




  export type ReportCardSettingGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ReportCardSettingWhereInput
    orderBy?: ReportCardSettingOrderByWithAggregationInput | ReportCardSettingOrderByWithAggregationInput[]
    by: ReportCardSettingScalarFieldEnum[] | ReportCardSettingScalarFieldEnum
    having?: ReportCardSettingScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ReportCardSettingCountAggregateInputType | true
    _avg?: ReportCardSettingAvgAggregateInputType
    _sum?: ReportCardSettingSumAggregateInputType
    _min?: ReportCardSettingMinAggregateInputType
    _max?: ReportCardSettingMaxAggregateInputType
  }

  export type ReportCardSettingGroupByOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number | null
    is_report_generated: number
    display_student_position: number
    show_previous_terms: number
    accumulate_with_previous: number
    display_attendance_in_report: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ReportCardSettingCountAggregateOutputType | null
    _avg: ReportCardSettingAvgAggregateOutputType | null
    _sum: ReportCardSettingSumAggregateOutputType | null
    _min: ReportCardSettingMinAggregateOutputType | null
    _max: ReportCardSettingMaxAggregateOutputType | null
  }

  type GetReportCardSettingGroupByPayload<T extends ReportCardSettingGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ReportCardSettingGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ReportCardSettingGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ReportCardSettingGroupByOutputType[P]>
            : GetScalarType<T[P], ReportCardSettingGroupByOutputType[P]>
        }
      >
    >


  export type ReportCardSettingSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    is_report_generated?: boolean
    display_student_position?: boolean
    show_previous_terms?: boolean
    accumulate_with_previous?: boolean
    display_attendance_in_report?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["reportCardSetting"]>



  export type ReportCardSettingSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    is_report_generated?: boolean
    display_student_position?: boolean
    show_previous_terms?: boolean
    accumulate_with_previous?: boolean
    display_attendance_in_report?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ReportCardSettingOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "specialization_id" | "group_id" | "is_report_generated" | "display_student_position" | "show_previous_terms" | "accumulate_with_previous" | "display_attendance_in_report" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["reportCardSetting"]>

  export type $ReportCardSettingPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ReportCardSetting"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      specialization_id: number
      group_id: number | null
      is_report_generated: number
      display_student_position: number
      show_previous_terms: number
      accumulate_with_previous: number
      display_attendance_in_report: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["reportCardSetting"]>
    composites: {}
  }

  type ReportCardSettingGetPayload<S extends boolean | null | undefined | ReportCardSettingDefaultArgs> = $Result.GetResult<Prisma.$ReportCardSettingPayload, S>

  type ReportCardSettingCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ReportCardSettingFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ReportCardSettingCountAggregateInputType | true
    }

  export interface ReportCardSettingDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ReportCardSetting'], meta: { name: 'ReportCardSetting' } }
    /**
     * Find zero or one ReportCardSetting that matches the filter.
     * @param {ReportCardSettingFindUniqueArgs} args - Arguments to find a ReportCardSetting
     * @example
     * // Get one ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ReportCardSettingFindUniqueArgs>(args: SelectSubset<T, ReportCardSettingFindUniqueArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ReportCardSetting that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ReportCardSettingFindUniqueOrThrowArgs} args - Arguments to find a ReportCardSetting
     * @example
     * // Get one ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ReportCardSettingFindUniqueOrThrowArgs>(args: SelectSubset<T, ReportCardSettingFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ReportCardSetting that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingFindFirstArgs} args - Arguments to find a ReportCardSetting
     * @example
     * // Get one ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ReportCardSettingFindFirstArgs>(args?: SelectSubset<T, ReportCardSettingFindFirstArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ReportCardSetting that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingFindFirstOrThrowArgs} args - Arguments to find a ReportCardSetting
     * @example
     * // Get one ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ReportCardSettingFindFirstOrThrowArgs>(args?: SelectSubset<T, ReportCardSettingFindFirstOrThrowArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ReportCardSettings that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ReportCardSettings
     * const reportCardSettings = await prisma.reportCardSetting.findMany()
     * 
     * // Get first 10 ReportCardSettings
     * const reportCardSettings = await prisma.reportCardSetting.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const reportCardSettingWithIdOnly = await prisma.reportCardSetting.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ReportCardSettingFindManyArgs>(args?: SelectSubset<T, ReportCardSettingFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ReportCardSetting.
     * @param {ReportCardSettingCreateArgs} args - Arguments to create a ReportCardSetting.
     * @example
     * // Create one ReportCardSetting
     * const ReportCardSetting = await prisma.reportCardSetting.create({
     *   data: {
     *     // ... data to create a ReportCardSetting
     *   }
     * })
     * 
     */
    create<T extends ReportCardSettingCreateArgs>(args: SelectSubset<T, ReportCardSettingCreateArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ReportCardSettings.
     * @param {ReportCardSettingCreateManyArgs} args - Arguments to create many ReportCardSettings.
     * @example
     * // Create many ReportCardSettings
     * const reportCardSetting = await prisma.reportCardSetting.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ReportCardSettingCreateManyArgs>(args?: SelectSubset<T, ReportCardSettingCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ReportCardSetting.
     * @param {ReportCardSettingDeleteArgs} args - Arguments to delete one ReportCardSetting.
     * @example
     * // Delete one ReportCardSetting
     * const ReportCardSetting = await prisma.reportCardSetting.delete({
     *   where: {
     *     // ... filter to delete one ReportCardSetting
     *   }
     * })
     * 
     */
    delete<T extends ReportCardSettingDeleteArgs>(args: SelectSubset<T, ReportCardSettingDeleteArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ReportCardSetting.
     * @param {ReportCardSettingUpdateArgs} args - Arguments to update one ReportCardSetting.
     * @example
     * // Update one ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ReportCardSettingUpdateArgs>(args: SelectSubset<T, ReportCardSettingUpdateArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ReportCardSettings.
     * @param {ReportCardSettingDeleteManyArgs} args - Arguments to filter ReportCardSettings to delete.
     * @example
     * // Delete a few ReportCardSettings
     * const { count } = await prisma.reportCardSetting.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ReportCardSettingDeleteManyArgs>(args?: SelectSubset<T, ReportCardSettingDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ReportCardSettings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ReportCardSettings
     * const reportCardSetting = await prisma.reportCardSetting.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ReportCardSettingUpdateManyArgs>(args: SelectSubset<T, ReportCardSettingUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ReportCardSetting.
     * @param {ReportCardSettingUpsertArgs} args - Arguments to update or create a ReportCardSetting.
     * @example
     * // Update or create a ReportCardSetting
     * const reportCardSetting = await prisma.reportCardSetting.upsert({
     *   create: {
     *     // ... data to create a ReportCardSetting
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ReportCardSetting we want to update
     *   }
     * })
     */
    upsert<T extends ReportCardSettingUpsertArgs>(args: SelectSubset<T, ReportCardSettingUpsertArgs<ExtArgs>>): Prisma__ReportCardSettingClient<$Result.GetResult<Prisma.$ReportCardSettingPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ReportCardSettings.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingCountArgs} args - Arguments to filter ReportCardSettings to count.
     * @example
     * // Count the number of ReportCardSettings
     * const count = await prisma.reportCardSetting.count({
     *   where: {
     *     // ... the filter for the ReportCardSettings we want to count
     *   }
     * })
    **/
    count<T extends ReportCardSettingCountArgs>(
      args?: Subset<T, ReportCardSettingCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ReportCardSettingCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ReportCardSetting.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ReportCardSettingAggregateArgs>(args: Subset<T, ReportCardSettingAggregateArgs>): Prisma.PrismaPromise<GetReportCardSettingAggregateType<T>>

    /**
     * Group by ReportCardSetting.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ReportCardSettingGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ReportCardSettingGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ReportCardSettingGroupByArgs['orderBy'] }
        : { orderBy?: ReportCardSettingGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ReportCardSettingGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetReportCardSettingGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ReportCardSetting model
   */
  readonly fields: ReportCardSettingFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ReportCardSetting.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ReportCardSettingClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ReportCardSetting model
   */
  interface ReportCardSettingFieldRefs {
    readonly id: FieldRef<"ReportCardSetting", 'Int'>
    readonly session_class_id: FieldRef<"ReportCardSetting", 'Int'>
    readonly specialization_id: FieldRef<"ReportCardSetting", 'Int'>
    readonly group_id: FieldRef<"ReportCardSetting", 'Int'>
    readonly is_report_generated: FieldRef<"ReportCardSetting", 'Int'>
    readonly display_student_position: FieldRef<"ReportCardSetting", 'Int'>
    readonly show_previous_terms: FieldRef<"ReportCardSetting", 'Int'>
    readonly accumulate_with_previous: FieldRef<"ReportCardSetting", 'Int'>
    readonly display_attendance_in_report: FieldRef<"ReportCardSetting", 'Int'>
    readonly created_by: FieldRef<"ReportCardSetting", 'Int'>
    readonly created_at: FieldRef<"ReportCardSetting", 'DateTime'>
    readonly updated_at: FieldRef<"ReportCardSetting", 'DateTime'>
    readonly deleted_at: FieldRef<"ReportCardSetting", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ReportCardSetting findUnique
   */
  export type ReportCardSettingFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter, which ReportCardSetting to fetch.
     */
    where: ReportCardSettingWhereUniqueInput
  }

  /**
   * ReportCardSetting findUniqueOrThrow
   */
  export type ReportCardSettingFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter, which ReportCardSetting to fetch.
     */
    where: ReportCardSettingWhereUniqueInput
  }

  /**
   * ReportCardSetting findFirst
   */
  export type ReportCardSettingFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter, which ReportCardSetting to fetch.
     */
    where?: ReportCardSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ReportCardSettings to fetch.
     */
    orderBy?: ReportCardSettingOrderByWithRelationInput | ReportCardSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ReportCardSettings.
     */
    cursor?: ReportCardSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ReportCardSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ReportCardSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ReportCardSettings.
     */
    distinct?: ReportCardSettingScalarFieldEnum | ReportCardSettingScalarFieldEnum[]
  }

  /**
   * ReportCardSetting findFirstOrThrow
   */
  export type ReportCardSettingFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter, which ReportCardSetting to fetch.
     */
    where?: ReportCardSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ReportCardSettings to fetch.
     */
    orderBy?: ReportCardSettingOrderByWithRelationInput | ReportCardSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ReportCardSettings.
     */
    cursor?: ReportCardSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ReportCardSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ReportCardSettings.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ReportCardSettings.
     */
    distinct?: ReportCardSettingScalarFieldEnum | ReportCardSettingScalarFieldEnum[]
  }

  /**
   * ReportCardSetting findMany
   */
  export type ReportCardSettingFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter, which ReportCardSettings to fetch.
     */
    where?: ReportCardSettingWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ReportCardSettings to fetch.
     */
    orderBy?: ReportCardSettingOrderByWithRelationInput | ReportCardSettingOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ReportCardSettings.
     */
    cursor?: ReportCardSettingWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ReportCardSettings from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ReportCardSettings.
     */
    skip?: number
    distinct?: ReportCardSettingScalarFieldEnum | ReportCardSettingScalarFieldEnum[]
  }

  /**
   * ReportCardSetting create
   */
  export type ReportCardSettingCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * The data needed to create a ReportCardSetting.
     */
    data: XOR<ReportCardSettingCreateInput, ReportCardSettingUncheckedCreateInput>
  }

  /**
   * ReportCardSetting createMany
   */
  export type ReportCardSettingCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ReportCardSettings.
     */
    data: ReportCardSettingCreateManyInput | ReportCardSettingCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ReportCardSetting update
   */
  export type ReportCardSettingUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * The data needed to update a ReportCardSetting.
     */
    data: XOR<ReportCardSettingUpdateInput, ReportCardSettingUncheckedUpdateInput>
    /**
     * Choose, which ReportCardSetting to update.
     */
    where: ReportCardSettingWhereUniqueInput
  }

  /**
   * ReportCardSetting updateMany
   */
  export type ReportCardSettingUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ReportCardSettings.
     */
    data: XOR<ReportCardSettingUpdateManyMutationInput, ReportCardSettingUncheckedUpdateManyInput>
    /**
     * Filter which ReportCardSettings to update
     */
    where?: ReportCardSettingWhereInput
    /**
     * Limit how many ReportCardSettings to update.
     */
    limit?: number
  }

  /**
   * ReportCardSetting upsert
   */
  export type ReportCardSettingUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * The filter to search for the ReportCardSetting to update in case it exists.
     */
    where: ReportCardSettingWhereUniqueInput
    /**
     * In case the ReportCardSetting found by the `where` argument doesn't exist, create a new ReportCardSetting with this data.
     */
    create: XOR<ReportCardSettingCreateInput, ReportCardSettingUncheckedCreateInput>
    /**
     * In case the ReportCardSetting was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ReportCardSettingUpdateInput, ReportCardSettingUncheckedUpdateInput>
  }

  /**
   * ReportCardSetting delete
   */
  export type ReportCardSettingDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
    /**
     * Filter which ReportCardSetting to delete.
     */
    where: ReportCardSettingWhereUniqueInput
  }

  /**
   * ReportCardSetting deleteMany
   */
  export type ReportCardSettingDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ReportCardSettings to delete
     */
    where?: ReportCardSettingWhereInput
    /**
     * Limit how many ReportCardSettings to delete.
     */
    limit?: number
  }

  /**
   * ReportCardSetting without action
   */
  export type ReportCardSettingDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ReportCardSetting
     */
    select?: ReportCardSettingSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ReportCardSetting
     */
    omit?: ReportCardSettingOmit<ExtArgs> | null
  }


  /**
   * Model ClassScoreSetupTemplate
   */

  export type AggregateClassScoreSetupTemplate = {
    _count: ClassScoreSetupTemplateCountAggregateOutputType | null
    _avg: ClassScoreSetupTemplateAvgAggregateOutputType | null
    _sum: ClassScoreSetupTemplateSumAggregateOutputType | null
    _min: ClassScoreSetupTemplateMinAggregateOutputType | null
    _max: ClassScoreSetupTemplateMaxAggregateOutputType | null
  }

  export type ClassScoreSetupTemplateAvgAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    max_score: number | null
    created_by: number | null
  }

  export type ClassScoreSetupTemplateSumAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    max_score: number | null
    created_by: number | null
  }

  export type ClassScoreSetupTemplateMinAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    display_name: string | null
    max_score: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassScoreSetupTemplateMaxAggregateOutputType = {
    id: number | null
    class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    display_name: string | null
    max_score: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ClassScoreSetupTemplateCountAggregateOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number
    score_type_id: number
    display_type: number
    display_name: number
    max_score: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ClassScoreSetupTemplateAvgAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    max_score?: true
    created_by?: true
  }

  export type ClassScoreSetupTemplateSumAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    max_score?: true
    created_by?: true
  }

  export type ClassScoreSetupTemplateMinAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassScoreSetupTemplateMaxAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ClassScoreSetupTemplateCountAggregateInputType = {
    id?: true
    class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ClassScoreSetupTemplateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassScoreSetupTemplate to aggregate.
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassScoreSetupTemplates to fetch.
     */
    orderBy?: ClassScoreSetupTemplateOrderByWithRelationInput | ClassScoreSetupTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ClassScoreSetupTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassScoreSetupTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassScoreSetupTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ClassScoreSetupTemplates
    **/
    _count?: true | ClassScoreSetupTemplateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ClassScoreSetupTemplateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ClassScoreSetupTemplateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ClassScoreSetupTemplateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ClassScoreSetupTemplateMaxAggregateInputType
  }

  export type GetClassScoreSetupTemplateAggregateType<T extends ClassScoreSetupTemplateAggregateArgs> = {
        [P in keyof T & keyof AggregateClassScoreSetupTemplate]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateClassScoreSetupTemplate[P]>
      : GetScalarType<T[P], AggregateClassScoreSetupTemplate[P]>
  }




  export type ClassScoreSetupTemplateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ClassScoreSetupTemplateWhereInput
    orderBy?: ClassScoreSetupTemplateOrderByWithAggregationInput | ClassScoreSetupTemplateOrderByWithAggregationInput[]
    by: ClassScoreSetupTemplateScalarFieldEnum[] | ClassScoreSetupTemplateScalarFieldEnum
    having?: ClassScoreSetupTemplateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ClassScoreSetupTemplateCountAggregateInputType | true
    _avg?: ClassScoreSetupTemplateAvgAggregateInputType
    _sum?: ClassScoreSetupTemplateSumAggregateInputType
    _min?: ClassScoreSetupTemplateMinAggregateInputType
    _max?: ClassScoreSetupTemplateMaxAggregateInputType
  }

  export type ClassScoreSetupTemplateGroupByOutputType = {
    id: number
    class_id: number
    specialization_id: number
    group_id: number | null
    score_type_id: number
    display_type: number | null
    display_name: string
    max_score: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ClassScoreSetupTemplateCountAggregateOutputType | null
    _avg: ClassScoreSetupTemplateAvgAggregateOutputType | null
    _sum: ClassScoreSetupTemplateSumAggregateOutputType | null
    _min: ClassScoreSetupTemplateMinAggregateOutputType | null
    _max: ClassScoreSetupTemplateMaxAggregateOutputType | null
  }

  type GetClassScoreSetupTemplateGroupByPayload<T extends ClassScoreSetupTemplateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ClassScoreSetupTemplateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ClassScoreSetupTemplateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ClassScoreSetupTemplateGroupByOutputType[P]>
            : GetScalarType<T[P], ClassScoreSetupTemplateGroupByOutputType[P]>
        }
      >
    >


  export type ClassScoreSetupTemplateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    score_type_id?: boolean
    display_type?: boolean
    display_name?: boolean
    max_score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["classScoreSetupTemplate"]>



  export type ClassScoreSetupTemplateSelectScalar = {
    id?: boolean
    class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    score_type_id?: boolean
    display_type?: boolean
    display_name?: boolean
    max_score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ClassScoreSetupTemplateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "class_id" | "specialization_id" | "group_id" | "score_type_id" | "display_type" | "display_name" | "max_score" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["classScoreSetupTemplate"]>

  export type $ClassScoreSetupTemplatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ClassScoreSetupTemplate"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      class_id: number
      specialization_id: number
      group_id: number | null
      score_type_id: number
      display_type: number | null
      display_name: string
      max_score: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["classScoreSetupTemplate"]>
    composites: {}
  }

  type ClassScoreSetupTemplateGetPayload<S extends boolean | null | undefined | ClassScoreSetupTemplateDefaultArgs> = $Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload, S>

  type ClassScoreSetupTemplateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ClassScoreSetupTemplateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ClassScoreSetupTemplateCountAggregateInputType | true
    }

  export interface ClassScoreSetupTemplateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ClassScoreSetupTemplate'], meta: { name: 'ClassScoreSetupTemplate' } }
    /**
     * Find zero or one ClassScoreSetupTemplate that matches the filter.
     * @param {ClassScoreSetupTemplateFindUniqueArgs} args - Arguments to find a ClassScoreSetupTemplate
     * @example
     * // Get one ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ClassScoreSetupTemplateFindUniqueArgs>(args: SelectSubset<T, ClassScoreSetupTemplateFindUniqueArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ClassScoreSetupTemplate that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ClassScoreSetupTemplateFindUniqueOrThrowArgs} args - Arguments to find a ClassScoreSetupTemplate
     * @example
     * // Get one ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ClassScoreSetupTemplateFindUniqueOrThrowArgs>(args: SelectSubset<T, ClassScoreSetupTemplateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassScoreSetupTemplate that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateFindFirstArgs} args - Arguments to find a ClassScoreSetupTemplate
     * @example
     * // Get one ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ClassScoreSetupTemplateFindFirstArgs>(args?: SelectSubset<T, ClassScoreSetupTemplateFindFirstArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ClassScoreSetupTemplate that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateFindFirstOrThrowArgs} args - Arguments to find a ClassScoreSetupTemplate
     * @example
     * // Get one ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ClassScoreSetupTemplateFindFirstOrThrowArgs>(args?: SelectSubset<T, ClassScoreSetupTemplateFindFirstOrThrowArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ClassScoreSetupTemplates that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ClassScoreSetupTemplates
     * const classScoreSetupTemplates = await prisma.classScoreSetupTemplate.findMany()
     * 
     * // Get first 10 ClassScoreSetupTemplates
     * const classScoreSetupTemplates = await prisma.classScoreSetupTemplate.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const classScoreSetupTemplateWithIdOnly = await prisma.classScoreSetupTemplate.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ClassScoreSetupTemplateFindManyArgs>(args?: SelectSubset<T, ClassScoreSetupTemplateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ClassScoreSetupTemplate.
     * @param {ClassScoreSetupTemplateCreateArgs} args - Arguments to create a ClassScoreSetupTemplate.
     * @example
     * // Create one ClassScoreSetupTemplate
     * const ClassScoreSetupTemplate = await prisma.classScoreSetupTemplate.create({
     *   data: {
     *     // ... data to create a ClassScoreSetupTemplate
     *   }
     * })
     * 
     */
    create<T extends ClassScoreSetupTemplateCreateArgs>(args: SelectSubset<T, ClassScoreSetupTemplateCreateArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ClassScoreSetupTemplates.
     * @param {ClassScoreSetupTemplateCreateManyArgs} args - Arguments to create many ClassScoreSetupTemplates.
     * @example
     * // Create many ClassScoreSetupTemplates
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ClassScoreSetupTemplateCreateManyArgs>(args?: SelectSubset<T, ClassScoreSetupTemplateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ClassScoreSetupTemplate.
     * @param {ClassScoreSetupTemplateDeleteArgs} args - Arguments to delete one ClassScoreSetupTemplate.
     * @example
     * // Delete one ClassScoreSetupTemplate
     * const ClassScoreSetupTemplate = await prisma.classScoreSetupTemplate.delete({
     *   where: {
     *     // ... filter to delete one ClassScoreSetupTemplate
     *   }
     * })
     * 
     */
    delete<T extends ClassScoreSetupTemplateDeleteArgs>(args: SelectSubset<T, ClassScoreSetupTemplateDeleteArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ClassScoreSetupTemplate.
     * @param {ClassScoreSetupTemplateUpdateArgs} args - Arguments to update one ClassScoreSetupTemplate.
     * @example
     * // Update one ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ClassScoreSetupTemplateUpdateArgs>(args: SelectSubset<T, ClassScoreSetupTemplateUpdateArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ClassScoreSetupTemplates.
     * @param {ClassScoreSetupTemplateDeleteManyArgs} args - Arguments to filter ClassScoreSetupTemplates to delete.
     * @example
     * // Delete a few ClassScoreSetupTemplates
     * const { count } = await prisma.classScoreSetupTemplate.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ClassScoreSetupTemplateDeleteManyArgs>(args?: SelectSubset<T, ClassScoreSetupTemplateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ClassScoreSetupTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ClassScoreSetupTemplates
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ClassScoreSetupTemplateUpdateManyArgs>(args: SelectSubset<T, ClassScoreSetupTemplateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ClassScoreSetupTemplate.
     * @param {ClassScoreSetupTemplateUpsertArgs} args - Arguments to update or create a ClassScoreSetupTemplate.
     * @example
     * // Update or create a ClassScoreSetupTemplate
     * const classScoreSetupTemplate = await prisma.classScoreSetupTemplate.upsert({
     *   create: {
     *     // ... data to create a ClassScoreSetupTemplate
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ClassScoreSetupTemplate we want to update
     *   }
     * })
     */
    upsert<T extends ClassScoreSetupTemplateUpsertArgs>(args: SelectSubset<T, ClassScoreSetupTemplateUpsertArgs<ExtArgs>>): Prisma__ClassScoreSetupTemplateClient<$Result.GetResult<Prisma.$ClassScoreSetupTemplatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ClassScoreSetupTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateCountArgs} args - Arguments to filter ClassScoreSetupTemplates to count.
     * @example
     * // Count the number of ClassScoreSetupTemplates
     * const count = await prisma.classScoreSetupTemplate.count({
     *   where: {
     *     // ... the filter for the ClassScoreSetupTemplates we want to count
     *   }
     * })
    **/
    count<T extends ClassScoreSetupTemplateCountArgs>(
      args?: Subset<T, ClassScoreSetupTemplateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ClassScoreSetupTemplateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ClassScoreSetupTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ClassScoreSetupTemplateAggregateArgs>(args: Subset<T, ClassScoreSetupTemplateAggregateArgs>): Prisma.PrismaPromise<GetClassScoreSetupTemplateAggregateType<T>>

    /**
     * Group by ClassScoreSetupTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ClassScoreSetupTemplateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ClassScoreSetupTemplateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ClassScoreSetupTemplateGroupByArgs['orderBy'] }
        : { orderBy?: ClassScoreSetupTemplateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ClassScoreSetupTemplateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetClassScoreSetupTemplateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ClassScoreSetupTemplate model
   */
  readonly fields: ClassScoreSetupTemplateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ClassScoreSetupTemplate.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ClassScoreSetupTemplateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ClassScoreSetupTemplate model
   */
  interface ClassScoreSetupTemplateFieldRefs {
    readonly id: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly class_id: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly specialization_id: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly group_id: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly score_type_id: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly display_type: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly display_name: FieldRef<"ClassScoreSetupTemplate", 'String'>
    readonly max_score: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly created_by: FieldRef<"ClassScoreSetupTemplate", 'Int'>
    readonly created_at: FieldRef<"ClassScoreSetupTemplate", 'DateTime'>
    readonly updated_at: FieldRef<"ClassScoreSetupTemplate", 'DateTime'>
    readonly deleted_at: FieldRef<"ClassScoreSetupTemplate", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ClassScoreSetupTemplate findUnique
   */
  export type ClassScoreSetupTemplateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter, which ClassScoreSetupTemplate to fetch.
     */
    where: ClassScoreSetupTemplateWhereUniqueInput
  }

  /**
   * ClassScoreSetupTemplate findUniqueOrThrow
   */
  export type ClassScoreSetupTemplateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter, which ClassScoreSetupTemplate to fetch.
     */
    where: ClassScoreSetupTemplateWhereUniqueInput
  }

  /**
   * ClassScoreSetupTemplate findFirst
   */
  export type ClassScoreSetupTemplateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter, which ClassScoreSetupTemplate to fetch.
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassScoreSetupTemplates to fetch.
     */
    orderBy?: ClassScoreSetupTemplateOrderByWithRelationInput | ClassScoreSetupTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassScoreSetupTemplates.
     */
    cursor?: ClassScoreSetupTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassScoreSetupTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassScoreSetupTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassScoreSetupTemplates.
     */
    distinct?: ClassScoreSetupTemplateScalarFieldEnum | ClassScoreSetupTemplateScalarFieldEnum[]
  }

  /**
   * ClassScoreSetupTemplate findFirstOrThrow
   */
  export type ClassScoreSetupTemplateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter, which ClassScoreSetupTemplate to fetch.
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassScoreSetupTemplates to fetch.
     */
    orderBy?: ClassScoreSetupTemplateOrderByWithRelationInput | ClassScoreSetupTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ClassScoreSetupTemplates.
     */
    cursor?: ClassScoreSetupTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassScoreSetupTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassScoreSetupTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ClassScoreSetupTemplates.
     */
    distinct?: ClassScoreSetupTemplateScalarFieldEnum | ClassScoreSetupTemplateScalarFieldEnum[]
  }

  /**
   * ClassScoreSetupTemplate findMany
   */
  export type ClassScoreSetupTemplateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter, which ClassScoreSetupTemplates to fetch.
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ClassScoreSetupTemplates to fetch.
     */
    orderBy?: ClassScoreSetupTemplateOrderByWithRelationInput | ClassScoreSetupTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ClassScoreSetupTemplates.
     */
    cursor?: ClassScoreSetupTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ClassScoreSetupTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ClassScoreSetupTemplates.
     */
    skip?: number
    distinct?: ClassScoreSetupTemplateScalarFieldEnum | ClassScoreSetupTemplateScalarFieldEnum[]
  }

  /**
   * ClassScoreSetupTemplate create
   */
  export type ClassScoreSetupTemplateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * The data needed to create a ClassScoreSetupTemplate.
     */
    data: XOR<ClassScoreSetupTemplateCreateInput, ClassScoreSetupTemplateUncheckedCreateInput>
  }

  /**
   * ClassScoreSetupTemplate createMany
   */
  export type ClassScoreSetupTemplateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ClassScoreSetupTemplates.
     */
    data: ClassScoreSetupTemplateCreateManyInput | ClassScoreSetupTemplateCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ClassScoreSetupTemplate update
   */
  export type ClassScoreSetupTemplateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * The data needed to update a ClassScoreSetupTemplate.
     */
    data: XOR<ClassScoreSetupTemplateUpdateInput, ClassScoreSetupTemplateUncheckedUpdateInput>
    /**
     * Choose, which ClassScoreSetupTemplate to update.
     */
    where: ClassScoreSetupTemplateWhereUniqueInput
  }

  /**
   * ClassScoreSetupTemplate updateMany
   */
  export type ClassScoreSetupTemplateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ClassScoreSetupTemplates.
     */
    data: XOR<ClassScoreSetupTemplateUpdateManyMutationInput, ClassScoreSetupTemplateUncheckedUpdateManyInput>
    /**
     * Filter which ClassScoreSetupTemplates to update
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * Limit how many ClassScoreSetupTemplates to update.
     */
    limit?: number
  }

  /**
   * ClassScoreSetupTemplate upsert
   */
  export type ClassScoreSetupTemplateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * The filter to search for the ClassScoreSetupTemplate to update in case it exists.
     */
    where: ClassScoreSetupTemplateWhereUniqueInput
    /**
     * In case the ClassScoreSetupTemplate found by the `where` argument doesn't exist, create a new ClassScoreSetupTemplate with this data.
     */
    create: XOR<ClassScoreSetupTemplateCreateInput, ClassScoreSetupTemplateUncheckedCreateInput>
    /**
     * In case the ClassScoreSetupTemplate was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ClassScoreSetupTemplateUpdateInput, ClassScoreSetupTemplateUncheckedUpdateInput>
  }

  /**
   * ClassScoreSetupTemplate delete
   */
  export type ClassScoreSetupTemplateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
    /**
     * Filter which ClassScoreSetupTemplate to delete.
     */
    where: ClassScoreSetupTemplateWhereUniqueInput
  }

  /**
   * ClassScoreSetupTemplate deleteMany
   */
  export type ClassScoreSetupTemplateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ClassScoreSetupTemplates to delete
     */
    where?: ClassScoreSetupTemplateWhereInput
    /**
     * Limit how many ClassScoreSetupTemplates to delete.
     */
    limit?: number
  }

  /**
   * ClassScoreSetupTemplate without action
   */
  export type ClassScoreSetupTemplateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassScoreSetupTemplate
     */
    select?: ClassScoreSetupTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassScoreSetupTemplate
     */
    omit?: ClassScoreSetupTemplateOmit<ExtArgs> | null
  }


  /**
   * Model SessionClassScoreSetup
   */

  export type AggregateSessionClassScoreSetup = {
    _count: SessionClassScoreSetupCountAggregateOutputType | null
    _avg: SessionClassScoreSetupAvgAggregateOutputType | null
    _sum: SessionClassScoreSetupSumAggregateOutputType | null
    _min: SessionClassScoreSetupMinAggregateOutputType | null
    _max: SessionClassScoreSetupMaxAggregateOutputType | null
  }

  export type SessionClassScoreSetupAvgAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    max_score: number | null
    created_by: number | null
  }

  export type SessionClassScoreSetupSumAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    max_score: number | null
    created_by: number | null
  }

  export type SessionClassScoreSetupMinAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    display_name: string | null
    max_score: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassScoreSetupMaxAggregateOutputType = {
    id: number | null
    session_class_id: number | null
    specialization_id: number | null
    group_id: number | null
    score_type_id: number | null
    display_type: number | null
    display_name: string | null
    max_score: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type SessionClassScoreSetupCountAggregateOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number
    score_type_id: number
    display_type: number
    display_name: number
    max_score: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type SessionClassScoreSetupAvgAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    max_score?: true
    created_by?: true
  }

  export type SessionClassScoreSetupSumAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    max_score?: true
    created_by?: true
  }

  export type SessionClassScoreSetupMinAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassScoreSetupMaxAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type SessionClassScoreSetupCountAggregateInputType = {
    id?: true
    session_class_id?: true
    specialization_id?: true
    group_id?: true
    score_type_id?: true
    display_type?: true
    display_name?: true
    max_score?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type SessionClassScoreSetupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassScoreSetup to aggregate.
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassScoreSetups to fetch.
     */
    orderBy?: SessionClassScoreSetupOrderByWithRelationInput | SessionClassScoreSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SessionClassScoreSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassScoreSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassScoreSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SessionClassScoreSetups
    **/
    _count?: true | SessionClassScoreSetupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SessionClassScoreSetupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SessionClassScoreSetupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SessionClassScoreSetupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SessionClassScoreSetupMaxAggregateInputType
  }

  export type GetSessionClassScoreSetupAggregateType<T extends SessionClassScoreSetupAggregateArgs> = {
        [P in keyof T & keyof AggregateSessionClassScoreSetup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSessionClassScoreSetup[P]>
      : GetScalarType<T[P], AggregateSessionClassScoreSetup[P]>
  }




  export type SessionClassScoreSetupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SessionClassScoreSetupWhereInput
    orderBy?: SessionClassScoreSetupOrderByWithAggregationInput | SessionClassScoreSetupOrderByWithAggregationInput[]
    by: SessionClassScoreSetupScalarFieldEnum[] | SessionClassScoreSetupScalarFieldEnum
    having?: SessionClassScoreSetupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SessionClassScoreSetupCountAggregateInputType | true
    _avg?: SessionClassScoreSetupAvgAggregateInputType
    _sum?: SessionClassScoreSetupSumAggregateInputType
    _min?: SessionClassScoreSetupMinAggregateInputType
    _max?: SessionClassScoreSetupMaxAggregateInputType
  }

  export type SessionClassScoreSetupGroupByOutputType = {
    id: number
    session_class_id: number
    specialization_id: number
    group_id: number | null
    score_type_id: number
    display_type: number | null
    display_name: string
    max_score: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: SessionClassScoreSetupCountAggregateOutputType | null
    _avg: SessionClassScoreSetupAvgAggregateOutputType | null
    _sum: SessionClassScoreSetupSumAggregateOutputType | null
    _min: SessionClassScoreSetupMinAggregateOutputType | null
    _max: SessionClassScoreSetupMaxAggregateOutputType | null
  }

  type GetSessionClassScoreSetupGroupByPayload<T extends SessionClassScoreSetupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SessionClassScoreSetupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SessionClassScoreSetupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SessionClassScoreSetupGroupByOutputType[P]>
            : GetScalarType<T[P], SessionClassScoreSetupGroupByOutputType[P]>
        }
      >
    >


  export type SessionClassScoreSetupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    score_type_id?: boolean
    display_type?: boolean
    display_name?: boolean
    max_score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    examscoresetuplink?: boolean | SessionClassScoreSetup$examscoresetuplinkArgs<ExtArgs>
    _count?: boolean | SessionClassScoreSetupCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["sessionClassScoreSetup"]>



  export type SessionClassScoreSetupSelectScalar = {
    id?: boolean
    session_class_id?: boolean
    specialization_id?: boolean
    group_id?: boolean
    score_type_id?: boolean
    display_type?: boolean
    display_name?: boolean
    max_score?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type SessionClassScoreSetupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "session_class_id" | "specialization_id" | "group_id" | "score_type_id" | "display_type" | "display_name" | "max_score" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["sessionClassScoreSetup"]>
  export type SessionClassScoreSetupInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    examscoresetuplink?: boolean | SessionClassScoreSetup$examscoresetuplinkArgs<ExtArgs>
    _count?: boolean | SessionClassScoreSetupCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $SessionClassScoreSetupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SessionClassScoreSetup"
    objects: {
      examscoresetuplink: Prisma.$ExamScoreSetupLinkPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      session_class_id: number
      specialization_id: number
      group_id: number | null
      score_type_id: number
      display_type: number | null
      display_name: string
      max_score: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["sessionClassScoreSetup"]>
    composites: {}
  }

  type SessionClassScoreSetupGetPayload<S extends boolean | null | undefined | SessionClassScoreSetupDefaultArgs> = $Result.GetResult<Prisma.$SessionClassScoreSetupPayload, S>

  type SessionClassScoreSetupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SessionClassScoreSetupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SessionClassScoreSetupCountAggregateInputType | true
    }

  export interface SessionClassScoreSetupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SessionClassScoreSetup'], meta: { name: 'SessionClassScoreSetup' } }
    /**
     * Find zero or one SessionClassScoreSetup that matches the filter.
     * @param {SessionClassScoreSetupFindUniqueArgs} args - Arguments to find a SessionClassScoreSetup
     * @example
     * // Get one SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SessionClassScoreSetupFindUniqueArgs>(args: SelectSubset<T, SessionClassScoreSetupFindUniqueArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SessionClassScoreSetup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SessionClassScoreSetupFindUniqueOrThrowArgs} args - Arguments to find a SessionClassScoreSetup
     * @example
     * // Get one SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SessionClassScoreSetupFindUniqueOrThrowArgs>(args: SelectSubset<T, SessionClassScoreSetupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassScoreSetup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupFindFirstArgs} args - Arguments to find a SessionClassScoreSetup
     * @example
     * // Get one SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SessionClassScoreSetupFindFirstArgs>(args?: SelectSubset<T, SessionClassScoreSetupFindFirstArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SessionClassScoreSetup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupFindFirstOrThrowArgs} args - Arguments to find a SessionClassScoreSetup
     * @example
     * // Get one SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SessionClassScoreSetupFindFirstOrThrowArgs>(args?: SelectSubset<T, SessionClassScoreSetupFindFirstOrThrowArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SessionClassScoreSetups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SessionClassScoreSetups
     * const sessionClassScoreSetups = await prisma.sessionClassScoreSetup.findMany()
     * 
     * // Get first 10 SessionClassScoreSetups
     * const sessionClassScoreSetups = await prisma.sessionClassScoreSetup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const sessionClassScoreSetupWithIdOnly = await prisma.sessionClassScoreSetup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SessionClassScoreSetupFindManyArgs>(args?: SelectSubset<T, SessionClassScoreSetupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SessionClassScoreSetup.
     * @param {SessionClassScoreSetupCreateArgs} args - Arguments to create a SessionClassScoreSetup.
     * @example
     * // Create one SessionClassScoreSetup
     * const SessionClassScoreSetup = await prisma.sessionClassScoreSetup.create({
     *   data: {
     *     // ... data to create a SessionClassScoreSetup
     *   }
     * })
     * 
     */
    create<T extends SessionClassScoreSetupCreateArgs>(args: SelectSubset<T, SessionClassScoreSetupCreateArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SessionClassScoreSetups.
     * @param {SessionClassScoreSetupCreateManyArgs} args - Arguments to create many SessionClassScoreSetups.
     * @example
     * // Create many SessionClassScoreSetups
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SessionClassScoreSetupCreateManyArgs>(args?: SelectSubset<T, SessionClassScoreSetupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SessionClassScoreSetup.
     * @param {SessionClassScoreSetupDeleteArgs} args - Arguments to delete one SessionClassScoreSetup.
     * @example
     * // Delete one SessionClassScoreSetup
     * const SessionClassScoreSetup = await prisma.sessionClassScoreSetup.delete({
     *   where: {
     *     // ... filter to delete one SessionClassScoreSetup
     *   }
     * })
     * 
     */
    delete<T extends SessionClassScoreSetupDeleteArgs>(args: SelectSubset<T, SessionClassScoreSetupDeleteArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SessionClassScoreSetup.
     * @param {SessionClassScoreSetupUpdateArgs} args - Arguments to update one SessionClassScoreSetup.
     * @example
     * // Update one SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SessionClassScoreSetupUpdateArgs>(args: SelectSubset<T, SessionClassScoreSetupUpdateArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SessionClassScoreSetups.
     * @param {SessionClassScoreSetupDeleteManyArgs} args - Arguments to filter SessionClassScoreSetups to delete.
     * @example
     * // Delete a few SessionClassScoreSetups
     * const { count } = await prisma.sessionClassScoreSetup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SessionClassScoreSetupDeleteManyArgs>(args?: SelectSubset<T, SessionClassScoreSetupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SessionClassScoreSetups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SessionClassScoreSetups
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SessionClassScoreSetupUpdateManyArgs>(args: SelectSubset<T, SessionClassScoreSetupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SessionClassScoreSetup.
     * @param {SessionClassScoreSetupUpsertArgs} args - Arguments to update or create a SessionClassScoreSetup.
     * @example
     * // Update or create a SessionClassScoreSetup
     * const sessionClassScoreSetup = await prisma.sessionClassScoreSetup.upsert({
     *   create: {
     *     // ... data to create a SessionClassScoreSetup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SessionClassScoreSetup we want to update
     *   }
     * })
     */
    upsert<T extends SessionClassScoreSetupUpsertArgs>(args: SelectSubset<T, SessionClassScoreSetupUpsertArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SessionClassScoreSetups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupCountArgs} args - Arguments to filter SessionClassScoreSetups to count.
     * @example
     * // Count the number of SessionClassScoreSetups
     * const count = await prisma.sessionClassScoreSetup.count({
     *   where: {
     *     // ... the filter for the SessionClassScoreSetups we want to count
     *   }
     * })
    **/
    count<T extends SessionClassScoreSetupCountArgs>(
      args?: Subset<T, SessionClassScoreSetupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SessionClassScoreSetupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SessionClassScoreSetup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SessionClassScoreSetupAggregateArgs>(args: Subset<T, SessionClassScoreSetupAggregateArgs>): Prisma.PrismaPromise<GetSessionClassScoreSetupAggregateType<T>>

    /**
     * Group by SessionClassScoreSetup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SessionClassScoreSetupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SessionClassScoreSetupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SessionClassScoreSetupGroupByArgs['orderBy'] }
        : { orderBy?: SessionClassScoreSetupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SessionClassScoreSetupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSessionClassScoreSetupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SessionClassScoreSetup model
   */
  readonly fields: SessionClassScoreSetupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SessionClassScoreSetup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SessionClassScoreSetupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    examscoresetuplink<T extends SessionClassScoreSetup$examscoresetuplinkArgs<ExtArgs> = {}>(args?: Subset<T, SessionClassScoreSetup$examscoresetuplinkArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SessionClassScoreSetup model
   */
  interface SessionClassScoreSetupFieldRefs {
    readonly id: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly session_class_id: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly specialization_id: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly group_id: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly score_type_id: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly display_type: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly display_name: FieldRef<"SessionClassScoreSetup", 'String'>
    readonly max_score: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly created_by: FieldRef<"SessionClassScoreSetup", 'Int'>
    readonly created_at: FieldRef<"SessionClassScoreSetup", 'DateTime'>
    readonly updated_at: FieldRef<"SessionClassScoreSetup", 'DateTime'>
    readonly deleted_at: FieldRef<"SessionClassScoreSetup", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SessionClassScoreSetup findUnique
   */
  export type SessionClassScoreSetupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassScoreSetup to fetch.
     */
    where: SessionClassScoreSetupWhereUniqueInput
  }

  /**
   * SessionClassScoreSetup findUniqueOrThrow
   */
  export type SessionClassScoreSetupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassScoreSetup to fetch.
     */
    where: SessionClassScoreSetupWhereUniqueInput
  }

  /**
   * SessionClassScoreSetup findFirst
   */
  export type SessionClassScoreSetupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassScoreSetup to fetch.
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassScoreSetups to fetch.
     */
    orderBy?: SessionClassScoreSetupOrderByWithRelationInput | SessionClassScoreSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassScoreSetups.
     */
    cursor?: SessionClassScoreSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassScoreSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassScoreSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassScoreSetups.
     */
    distinct?: SessionClassScoreSetupScalarFieldEnum | SessionClassScoreSetupScalarFieldEnum[]
  }

  /**
   * SessionClassScoreSetup findFirstOrThrow
   */
  export type SessionClassScoreSetupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassScoreSetup to fetch.
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassScoreSetups to fetch.
     */
    orderBy?: SessionClassScoreSetupOrderByWithRelationInput | SessionClassScoreSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SessionClassScoreSetups.
     */
    cursor?: SessionClassScoreSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassScoreSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassScoreSetups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SessionClassScoreSetups.
     */
    distinct?: SessionClassScoreSetupScalarFieldEnum | SessionClassScoreSetupScalarFieldEnum[]
  }

  /**
   * SessionClassScoreSetup findMany
   */
  export type SessionClassScoreSetupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter, which SessionClassScoreSetups to fetch.
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SessionClassScoreSetups to fetch.
     */
    orderBy?: SessionClassScoreSetupOrderByWithRelationInput | SessionClassScoreSetupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SessionClassScoreSetups.
     */
    cursor?: SessionClassScoreSetupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SessionClassScoreSetups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SessionClassScoreSetups.
     */
    skip?: number
    distinct?: SessionClassScoreSetupScalarFieldEnum | SessionClassScoreSetupScalarFieldEnum[]
  }

  /**
   * SessionClassScoreSetup create
   */
  export type SessionClassScoreSetupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * The data needed to create a SessionClassScoreSetup.
     */
    data: XOR<SessionClassScoreSetupCreateInput, SessionClassScoreSetupUncheckedCreateInput>
  }

  /**
   * SessionClassScoreSetup createMany
   */
  export type SessionClassScoreSetupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SessionClassScoreSetups.
     */
    data: SessionClassScoreSetupCreateManyInput | SessionClassScoreSetupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SessionClassScoreSetup update
   */
  export type SessionClassScoreSetupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * The data needed to update a SessionClassScoreSetup.
     */
    data: XOR<SessionClassScoreSetupUpdateInput, SessionClassScoreSetupUncheckedUpdateInput>
    /**
     * Choose, which SessionClassScoreSetup to update.
     */
    where: SessionClassScoreSetupWhereUniqueInput
  }

  /**
   * SessionClassScoreSetup updateMany
   */
  export type SessionClassScoreSetupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SessionClassScoreSetups.
     */
    data: XOR<SessionClassScoreSetupUpdateManyMutationInput, SessionClassScoreSetupUncheckedUpdateManyInput>
    /**
     * Filter which SessionClassScoreSetups to update
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * Limit how many SessionClassScoreSetups to update.
     */
    limit?: number
  }

  /**
   * SessionClassScoreSetup upsert
   */
  export type SessionClassScoreSetupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * The filter to search for the SessionClassScoreSetup to update in case it exists.
     */
    where: SessionClassScoreSetupWhereUniqueInput
    /**
     * In case the SessionClassScoreSetup found by the `where` argument doesn't exist, create a new SessionClassScoreSetup with this data.
     */
    create: XOR<SessionClassScoreSetupCreateInput, SessionClassScoreSetupUncheckedCreateInput>
    /**
     * In case the SessionClassScoreSetup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SessionClassScoreSetupUpdateInput, SessionClassScoreSetupUncheckedUpdateInput>
  }

  /**
   * SessionClassScoreSetup delete
   */
  export type SessionClassScoreSetupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
    /**
     * Filter which SessionClassScoreSetup to delete.
     */
    where: SessionClassScoreSetupWhereUniqueInput
  }

  /**
   * SessionClassScoreSetup deleteMany
   */
  export type SessionClassScoreSetupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SessionClassScoreSetups to delete
     */
    where?: SessionClassScoreSetupWhereInput
    /**
     * Limit how many SessionClassScoreSetups to delete.
     */
    limit?: number
  }

  /**
   * SessionClassScoreSetup.examscoresetuplink
   */
  export type SessionClassScoreSetup$examscoresetuplinkArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    where?: ExamScoreSetupLinkWhereInput
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScoreSetupLinkScalarFieldEnum | ExamScoreSetupLinkScalarFieldEnum[]
  }

  /**
   * SessionClassScoreSetup without action
   */
  export type SessionClassScoreSetupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SessionClassScoreSetup
     */
    select?: SessionClassScoreSetupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SessionClassScoreSetup
     */
    omit?: SessionClassScoreSetupOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SessionClassScoreSetupInclude<ExtArgs> | null
  }


  /**
   * Model ExamType
   */

  export type AggregateExamType = {
    _count: ExamTypeCountAggregateOutputType | null
    _avg: ExamTypeAvgAggregateOutputType | null
    _sum: ExamTypeSumAggregateOutputType | null
    _min: ExamTypeMinAggregateOutputType | null
    _max: ExamTypeMaxAggregateOutputType | null
  }

  export type ExamTypeAvgAggregateOutputType = {
    id: number | null
    exam_type_active: number | null
    created_by: number | null
  }

  export type ExamTypeSumAggregateOutputType = {
    id: number | null
    exam_type_active: number | null
    created_by: number | null
  }

  export type ExamTypeMinAggregateOutputType = {
    id: number | null
    exam_type_name: string | null
    exam_type_active: number | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamTypeMaxAggregateOutputType = {
    id: number | null
    exam_type_name: string | null
    exam_type_active: number | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamTypeCountAggregateOutputType = {
    id: number
    exam_type_name: number
    exam_type_active: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamTypeAvgAggregateInputType = {
    id?: true
    exam_type_active?: true
    created_by?: true
  }

  export type ExamTypeSumAggregateInputType = {
    id?: true
    exam_type_active?: true
    created_by?: true
  }

  export type ExamTypeMinAggregateInputType = {
    id?: true
    exam_type_name?: true
    exam_type_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamTypeMaxAggregateInputType = {
    id?: true
    exam_type_name?: true
    exam_type_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamTypeCountAggregateInputType = {
    id?: true
    exam_type_name?: true
    exam_type_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamType to aggregate.
     */
    where?: ExamTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamTypes to fetch.
     */
    orderBy?: ExamTypeOrderByWithRelationInput | ExamTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamTypes
    **/
    _count?: true | ExamTypeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamTypeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamTypeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamTypeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamTypeMaxAggregateInputType
  }

  export type GetExamTypeAggregateType<T extends ExamTypeAggregateArgs> = {
        [P in keyof T & keyof AggregateExamType]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamType[P]>
      : GetScalarType<T[P], AggregateExamType[P]>
  }




  export type ExamTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamTypeWhereInput
    orderBy?: ExamTypeOrderByWithAggregationInput | ExamTypeOrderByWithAggregationInput[]
    by: ExamTypeScalarFieldEnum[] | ExamTypeScalarFieldEnum
    having?: ExamTypeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamTypeCountAggregateInputType | true
    _avg?: ExamTypeAvgAggregateInputType
    _sum?: ExamTypeSumAggregateInputType
    _min?: ExamTypeMinAggregateInputType
    _max?: ExamTypeMaxAggregateInputType
  }

  export type ExamTypeGroupByOutputType = {
    id: number
    exam_type_name: string
    exam_type_active: number
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamTypeCountAggregateOutputType | null
    _avg: ExamTypeAvgAggregateOutputType | null
    _sum: ExamTypeSumAggregateOutputType | null
    _min: ExamTypeMinAggregateOutputType | null
    _max: ExamTypeMaxAggregateOutputType | null
  }

  type GetExamTypeGroupByPayload<T extends ExamTypeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamTypeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamTypeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamTypeGroupByOutputType[P]>
            : GetScalarType<T[P], ExamTypeGroupByOutputType[P]>
        }
      >
    >


  export type ExamTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_type_name?: boolean
    exam_type_active?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    exam?: boolean | ExamType$examArgs<ExtArgs>
    _count?: boolean | ExamTypeCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["examType"]>



  export type ExamTypeSelectScalar = {
    id?: boolean
    exam_type_name?: boolean
    exam_type_active?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_type_name" | "exam_type_active" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examType"]>
  export type ExamTypeInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    exam?: boolean | ExamType$examArgs<ExtArgs>
    _count?: boolean | ExamTypeCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $ExamTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamType"
    objects: {
      exam: Prisma.$ExamPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_type_name: string
      exam_type_active: number
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examType"]>
    composites: {}
  }

  type ExamTypeGetPayload<S extends boolean | null | undefined | ExamTypeDefaultArgs> = $Result.GetResult<Prisma.$ExamTypePayload, S>

  type ExamTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamTypeCountAggregateInputType | true
    }

  export interface ExamTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamType'], meta: { name: 'ExamType' } }
    /**
     * Find zero or one ExamType that matches the filter.
     * @param {ExamTypeFindUniqueArgs} args - Arguments to find a ExamType
     * @example
     * // Get one ExamType
     * const examType = await prisma.examType.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamTypeFindUniqueArgs>(args: SelectSubset<T, ExamTypeFindUniqueArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamType that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamTypeFindUniqueOrThrowArgs} args - Arguments to find a ExamType
     * @example
     * // Get one ExamType
     * const examType = await prisma.examType.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamTypeFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamTypeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamType that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeFindFirstArgs} args - Arguments to find a ExamType
     * @example
     * // Get one ExamType
     * const examType = await prisma.examType.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamTypeFindFirstArgs>(args?: SelectSubset<T, ExamTypeFindFirstArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamType that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeFindFirstOrThrowArgs} args - Arguments to find a ExamType
     * @example
     * // Get one ExamType
     * const examType = await prisma.examType.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamTypeFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamTypeFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamTypes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamTypes
     * const examTypes = await prisma.examType.findMany()
     * 
     * // Get first 10 ExamTypes
     * const examTypes = await prisma.examType.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examTypeWithIdOnly = await prisma.examType.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamTypeFindManyArgs>(args?: SelectSubset<T, ExamTypeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamType.
     * @param {ExamTypeCreateArgs} args - Arguments to create a ExamType.
     * @example
     * // Create one ExamType
     * const ExamType = await prisma.examType.create({
     *   data: {
     *     // ... data to create a ExamType
     *   }
     * })
     * 
     */
    create<T extends ExamTypeCreateArgs>(args: SelectSubset<T, ExamTypeCreateArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamTypes.
     * @param {ExamTypeCreateManyArgs} args - Arguments to create many ExamTypes.
     * @example
     * // Create many ExamTypes
     * const examType = await prisma.examType.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamTypeCreateManyArgs>(args?: SelectSubset<T, ExamTypeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamType.
     * @param {ExamTypeDeleteArgs} args - Arguments to delete one ExamType.
     * @example
     * // Delete one ExamType
     * const ExamType = await prisma.examType.delete({
     *   where: {
     *     // ... filter to delete one ExamType
     *   }
     * })
     * 
     */
    delete<T extends ExamTypeDeleteArgs>(args: SelectSubset<T, ExamTypeDeleteArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamType.
     * @param {ExamTypeUpdateArgs} args - Arguments to update one ExamType.
     * @example
     * // Update one ExamType
     * const examType = await prisma.examType.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamTypeUpdateArgs>(args: SelectSubset<T, ExamTypeUpdateArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamTypes.
     * @param {ExamTypeDeleteManyArgs} args - Arguments to filter ExamTypes to delete.
     * @example
     * // Delete a few ExamTypes
     * const { count } = await prisma.examType.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamTypeDeleteManyArgs>(args?: SelectSubset<T, ExamTypeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamTypes
     * const examType = await prisma.examType.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamTypeUpdateManyArgs>(args: SelectSubset<T, ExamTypeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamType.
     * @param {ExamTypeUpsertArgs} args - Arguments to update or create a ExamType.
     * @example
     * // Update or create a ExamType
     * const examType = await prisma.examType.upsert({
     *   create: {
     *     // ... data to create a ExamType
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamType we want to update
     *   }
     * })
     */
    upsert<T extends ExamTypeUpsertArgs>(args: SelectSubset<T, ExamTypeUpsertArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeCountArgs} args - Arguments to filter ExamTypes to count.
     * @example
     * // Count the number of ExamTypes
     * const count = await prisma.examType.count({
     *   where: {
     *     // ... the filter for the ExamTypes we want to count
     *   }
     * })
    **/
    count<T extends ExamTypeCountArgs>(
      args?: Subset<T, ExamTypeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamTypeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamTypeAggregateArgs>(args: Subset<T, ExamTypeAggregateArgs>): Prisma.PrismaPromise<GetExamTypeAggregateType<T>>

    /**
     * Group by ExamType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamTypeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamTypeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamTypeGroupByArgs['orderBy'] }
        : { orderBy?: ExamTypeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamType model
   */
  readonly fields: ExamTypeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamType.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    exam<T extends ExamType$examArgs<ExtArgs> = {}>(args?: Subset<T, ExamType$examArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamType model
   */
  interface ExamTypeFieldRefs {
    readonly id: FieldRef<"ExamType", 'Int'>
    readonly exam_type_name: FieldRef<"ExamType", 'String'>
    readonly exam_type_active: FieldRef<"ExamType", 'Int'>
    readonly desc: FieldRef<"ExamType", 'String'>
    readonly created_by: FieldRef<"ExamType", 'Int'>
    readonly created_at: FieldRef<"ExamType", 'DateTime'>
    readonly updated_at: FieldRef<"ExamType", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamType", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamType findUnique
   */
  export type ExamTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter, which ExamType to fetch.
     */
    where: ExamTypeWhereUniqueInput
  }

  /**
   * ExamType findUniqueOrThrow
   */
  export type ExamTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter, which ExamType to fetch.
     */
    where: ExamTypeWhereUniqueInput
  }

  /**
   * ExamType findFirst
   */
  export type ExamTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter, which ExamType to fetch.
     */
    where?: ExamTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamTypes to fetch.
     */
    orderBy?: ExamTypeOrderByWithRelationInput | ExamTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamTypes.
     */
    cursor?: ExamTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamTypes.
     */
    distinct?: ExamTypeScalarFieldEnum | ExamTypeScalarFieldEnum[]
  }

  /**
   * ExamType findFirstOrThrow
   */
  export type ExamTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter, which ExamType to fetch.
     */
    where?: ExamTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamTypes to fetch.
     */
    orderBy?: ExamTypeOrderByWithRelationInput | ExamTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamTypes.
     */
    cursor?: ExamTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamTypes.
     */
    distinct?: ExamTypeScalarFieldEnum | ExamTypeScalarFieldEnum[]
  }

  /**
   * ExamType findMany
   */
  export type ExamTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter, which ExamTypes to fetch.
     */
    where?: ExamTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamTypes to fetch.
     */
    orderBy?: ExamTypeOrderByWithRelationInput | ExamTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamTypes.
     */
    cursor?: ExamTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamTypes.
     */
    skip?: number
    distinct?: ExamTypeScalarFieldEnum | ExamTypeScalarFieldEnum[]
  }

  /**
   * ExamType create
   */
  export type ExamTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * The data needed to create a ExamType.
     */
    data: XOR<ExamTypeCreateInput, ExamTypeUncheckedCreateInput>
  }

  /**
   * ExamType createMany
   */
  export type ExamTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamTypes.
     */
    data: ExamTypeCreateManyInput | ExamTypeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamType update
   */
  export type ExamTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * The data needed to update a ExamType.
     */
    data: XOR<ExamTypeUpdateInput, ExamTypeUncheckedUpdateInput>
    /**
     * Choose, which ExamType to update.
     */
    where: ExamTypeWhereUniqueInput
  }

  /**
   * ExamType updateMany
   */
  export type ExamTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamTypes.
     */
    data: XOR<ExamTypeUpdateManyMutationInput, ExamTypeUncheckedUpdateManyInput>
    /**
     * Filter which ExamTypes to update
     */
    where?: ExamTypeWhereInput
    /**
     * Limit how many ExamTypes to update.
     */
    limit?: number
  }

  /**
   * ExamType upsert
   */
  export type ExamTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * The filter to search for the ExamType to update in case it exists.
     */
    where: ExamTypeWhereUniqueInput
    /**
     * In case the ExamType found by the `where` argument doesn't exist, create a new ExamType with this data.
     */
    create: XOR<ExamTypeCreateInput, ExamTypeUncheckedCreateInput>
    /**
     * In case the ExamType was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamTypeUpdateInput, ExamTypeUncheckedUpdateInput>
  }

  /**
   * ExamType delete
   */
  export type ExamTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    /**
     * Filter which ExamType to delete.
     */
    where: ExamTypeWhereUniqueInput
  }

  /**
   * ExamType deleteMany
   */
  export type ExamTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamTypes to delete
     */
    where?: ExamTypeWhereInput
    /**
     * Limit how many ExamTypes to delete.
     */
    limit?: number
  }

  /**
   * ExamType.exam
   */
  export type ExamType$examArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    cursor?: ExamWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * ExamType without action
   */
  export type ExamTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
  }


  /**
   * Model ExamCategory
   */

  export type AggregateExamCategory = {
    _count: ExamCategoryCountAggregateOutputType | null
    _avg: ExamCategoryAvgAggregateOutputType | null
    _sum: ExamCategorySumAggregateOutputType | null
    _min: ExamCategoryMinAggregateOutputType | null
    _max: ExamCategoryMaxAggregateOutputType | null
  }

  export type ExamCategoryAvgAggregateOutputType = {
    id: number | null
    exam_category_active: number | null
    created_by: number | null
  }

  export type ExamCategorySumAggregateOutputType = {
    id: number | null
    exam_category_active: number | null
    created_by: number | null
  }

  export type ExamCategoryMinAggregateOutputType = {
    id: number | null
    exam_category_name: string | null
    exam_category_active: number | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamCategoryMaxAggregateOutputType = {
    id: number | null
    exam_category_name: string | null
    exam_category_active: number | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamCategoryCountAggregateOutputType = {
    id: number
    exam_category_name: number
    exam_category_active: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamCategoryAvgAggregateInputType = {
    id?: true
    exam_category_active?: true
    created_by?: true
  }

  export type ExamCategorySumAggregateInputType = {
    id?: true
    exam_category_active?: true
    created_by?: true
  }

  export type ExamCategoryMinAggregateInputType = {
    id?: true
    exam_category_name?: true
    exam_category_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamCategoryMaxAggregateInputType = {
    id?: true
    exam_category_name?: true
    exam_category_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamCategoryCountAggregateInputType = {
    id?: true
    exam_category_name?: true
    exam_category_active?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamCategoryAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamCategory to aggregate.
     */
    where?: ExamCategoryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamCategories to fetch.
     */
    orderBy?: ExamCategoryOrderByWithRelationInput | ExamCategoryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamCategoryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamCategories from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamCategories.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamCategories
    **/
    _count?: true | ExamCategoryCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamCategoryAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamCategorySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamCategoryMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamCategoryMaxAggregateInputType
  }

  export type GetExamCategoryAggregateType<T extends ExamCategoryAggregateArgs> = {
        [P in keyof T & keyof AggregateExamCategory]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamCategory[P]>
      : GetScalarType<T[P], AggregateExamCategory[P]>
  }




  export type ExamCategoryGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamCategoryWhereInput
    orderBy?: ExamCategoryOrderByWithAggregationInput | ExamCategoryOrderByWithAggregationInput[]
    by: ExamCategoryScalarFieldEnum[] | ExamCategoryScalarFieldEnum
    having?: ExamCategoryScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamCategoryCountAggregateInputType | true
    _avg?: ExamCategoryAvgAggregateInputType
    _sum?: ExamCategorySumAggregateInputType
    _min?: ExamCategoryMinAggregateInputType
    _max?: ExamCategoryMaxAggregateInputType
  }

  export type ExamCategoryGroupByOutputType = {
    id: number
    exam_category_name: string
    exam_category_active: number
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamCategoryCountAggregateOutputType | null
    _avg: ExamCategoryAvgAggregateOutputType | null
    _sum: ExamCategorySumAggregateOutputType | null
    _min: ExamCategoryMinAggregateOutputType | null
    _max: ExamCategoryMaxAggregateOutputType | null
  }

  type GetExamCategoryGroupByPayload<T extends ExamCategoryGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamCategoryGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamCategoryGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamCategoryGroupByOutputType[P]>
            : GetScalarType<T[P], ExamCategoryGroupByOutputType[P]>
        }
      >
    >


  export type ExamCategorySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_category_name?: boolean
    exam_category_active?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    exam?: boolean | ExamCategory$examArgs<ExtArgs>
    _count?: boolean | ExamCategoryCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["examCategory"]>



  export type ExamCategorySelectScalar = {
    id?: boolean
    exam_category_name?: boolean
    exam_category_active?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamCategoryOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_category_name" | "exam_category_active" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examCategory"]>
  export type ExamCategoryInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    exam?: boolean | ExamCategory$examArgs<ExtArgs>
    _count?: boolean | ExamCategoryCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $ExamCategoryPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamCategory"
    objects: {
      exam: Prisma.$ExamPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_category_name: string
      exam_category_active: number
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examCategory"]>
    composites: {}
  }

  type ExamCategoryGetPayload<S extends boolean | null | undefined | ExamCategoryDefaultArgs> = $Result.GetResult<Prisma.$ExamCategoryPayload, S>

  type ExamCategoryCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamCategoryFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamCategoryCountAggregateInputType | true
    }

  export interface ExamCategoryDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamCategory'], meta: { name: 'ExamCategory' } }
    /**
     * Find zero or one ExamCategory that matches the filter.
     * @param {ExamCategoryFindUniqueArgs} args - Arguments to find a ExamCategory
     * @example
     * // Get one ExamCategory
     * const examCategory = await prisma.examCategory.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamCategoryFindUniqueArgs>(args: SelectSubset<T, ExamCategoryFindUniqueArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamCategory that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamCategoryFindUniqueOrThrowArgs} args - Arguments to find a ExamCategory
     * @example
     * // Get one ExamCategory
     * const examCategory = await prisma.examCategory.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamCategoryFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamCategoryFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamCategory that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryFindFirstArgs} args - Arguments to find a ExamCategory
     * @example
     * // Get one ExamCategory
     * const examCategory = await prisma.examCategory.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamCategoryFindFirstArgs>(args?: SelectSubset<T, ExamCategoryFindFirstArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamCategory that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryFindFirstOrThrowArgs} args - Arguments to find a ExamCategory
     * @example
     * // Get one ExamCategory
     * const examCategory = await prisma.examCategory.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamCategoryFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamCategoryFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamCategories that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamCategories
     * const examCategories = await prisma.examCategory.findMany()
     * 
     * // Get first 10 ExamCategories
     * const examCategories = await prisma.examCategory.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examCategoryWithIdOnly = await prisma.examCategory.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamCategoryFindManyArgs>(args?: SelectSubset<T, ExamCategoryFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamCategory.
     * @param {ExamCategoryCreateArgs} args - Arguments to create a ExamCategory.
     * @example
     * // Create one ExamCategory
     * const ExamCategory = await prisma.examCategory.create({
     *   data: {
     *     // ... data to create a ExamCategory
     *   }
     * })
     * 
     */
    create<T extends ExamCategoryCreateArgs>(args: SelectSubset<T, ExamCategoryCreateArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamCategories.
     * @param {ExamCategoryCreateManyArgs} args - Arguments to create many ExamCategories.
     * @example
     * // Create many ExamCategories
     * const examCategory = await prisma.examCategory.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamCategoryCreateManyArgs>(args?: SelectSubset<T, ExamCategoryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamCategory.
     * @param {ExamCategoryDeleteArgs} args - Arguments to delete one ExamCategory.
     * @example
     * // Delete one ExamCategory
     * const ExamCategory = await prisma.examCategory.delete({
     *   where: {
     *     // ... filter to delete one ExamCategory
     *   }
     * })
     * 
     */
    delete<T extends ExamCategoryDeleteArgs>(args: SelectSubset<T, ExamCategoryDeleteArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamCategory.
     * @param {ExamCategoryUpdateArgs} args - Arguments to update one ExamCategory.
     * @example
     * // Update one ExamCategory
     * const examCategory = await prisma.examCategory.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamCategoryUpdateArgs>(args: SelectSubset<T, ExamCategoryUpdateArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamCategories.
     * @param {ExamCategoryDeleteManyArgs} args - Arguments to filter ExamCategories to delete.
     * @example
     * // Delete a few ExamCategories
     * const { count } = await prisma.examCategory.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamCategoryDeleteManyArgs>(args?: SelectSubset<T, ExamCategoryDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamCategories.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamCategories
     * const examCategory = await prisma.examCategory.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamCategoryUpdateManyArgs>(args: SelectSubset<T, ExamCategoryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamCategory.
     * @param {ExamCategoryUpsertArgs} args - Arguments to update or create a ExamCategory.
     * @example
     * // Update or create a ExamCategory
     * const examCategory = await prisma.examCategory.upsert({
     *   create: {
     *     // ... data to create a ExamCategory
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamCategory we want to update
     *   }
     * })
     */
    upsert<T extends ExamCategoryUpsertArgs>(args: SelectSubset<T, ExamCategoryUpsertArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamCategories.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryCountArgs} args - Arguments to filter ExamCategories to count.
     * @example
     * // Count the number of ExamCategories
     * const count = await prisma.examCategory.count({
     *   where: {
     *     // ... the filter for the ExamCategories we want to count
     *   }
     * })
    **/
    count<T extends ExamCategoryCountArgs>(
      args?: Subset<T, ExamCategoryCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamCategoryCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamCategory.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamCategoryAggregateArgs>(args: Subset<T, ExamCategoryAggregateArgs>): Prisma.PrismaPromise<GetExamCategoryAggregateType<T>>

    /**
     * Group by ExamCategory.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCategoryGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamCategoryGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamCategoryGroupByArgs['orderBy'] }
        : { orderBy?: ExamCategoryGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamCategoryGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamCategoryGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamCategory model
   */
  readonly fields: ExamCategoryFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamCategory.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamCategoryClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    exam<T extends ExamCategory$examArgs<ExtArgs> = {}>(args?: Subset<T, ExamCategory$examArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamCategory model
   */
  interface ExamCategoryFieldRefs {
    readonly id: FieldRef<"ExamCategory", 'Int'>
    readonly exam_category_name: FieldRef<"ExamCategory", 'String'>
    readonly exam_category_active: FieldRef<"ExamCategory", 'Int'>
    readonly desc: FieldRef<"ExamCategory", 'String'>
    readonly created_by: FieldRef<"ExamCategory", 'Int'>
    readonly created_at: FieldRef<"ExamCategory", 'DateTime'>
    readonly updated_at: FieldRef<"ExamCategory", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamCategory", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamCategory findUnique
   */
  export type ExamCategoryFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter, which ExamCategory to fetch.
     */
    where: ExamCategoryWhereUniqueInput
  }

  /**
   * ExamCategory findUniqueOrThrow
   */
  export type ExamCategoryFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter, which ExamCategory to fetch.
     */
    where: ExamCategoryWhereUniqueInput
  }

  /**
   * ExamCategory findFirst
   */
  export type ExamCategoryFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter, which ExamCategory to fetch.
     */
    where?: ExamCategoryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamCategories to fetch.
     */
    orderBy?: ExamCategoryOrderByWithRelationInput | ExamCategoryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamCategories.
     */
    cursor?: ExamCategoryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamCategories from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamCategories.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamCategories.
     */
    distinct?: ExamCategoryScalarFieldEnum | ExamCategoryScalarFieldEnum[]
  }

  /**
   * ExamCategory findFirstOrThrow
   */
  export type ExamCategoryFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter, which ExamCategory to fetch.
     */
    where?: ExamCategoryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamCategories to fetch.
     */
    orderBy?: ExamCategoryOrderByWithRelationInput | ExamCategoryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamCategories.
     */
    cursor?: ExamCategoryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamCategories from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamCategories.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamCategories.
     */
    distinct?: ExamCategoryScalarFieldEnum | ExamCategoryScalarFieldEnum[]
  }

  /**
   * ExamCategory findMany
   */
  export type ExamCategoryFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter, which ExamCategories to fetch.
     */
    where?: ExamCategoryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamCategories to fetch.
     */
    orderBy?: ExamCategoryOrderByWithRelationInput | ExamCategoryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamCategories.
     */
    cursor?: ExamCategoryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamCategories from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamCategories.
     */
    skip?: number
    distinct?: ExamCategoryScalarFieldEnum | ExamCategoryScalarFieldEnum[]
  }

  /**
   * ExamCategory create
   */
  export type ExamCategoryCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * The data needed to create a ExamCategory.
     */
    data: XOR<ExamCategoryCreateInput, ExamCategoryUncheckedCreateInput>
  }

  /**
   * ExamCategory createMany
   */
  export type ExamCategoryCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamCategories.
     */
    data: ExamCategoryCreateManyInput | ExamCategoryCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamCategory update
   */
  export type ExamCategoryUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * The data needed to update a ExamCategory.
     */
    data: XOR<ExamCategoryUpdateInput, ExamCategoryUncheckedUpdateInput>
    /**
     * Choose, which ExamCategory to update.
     */
    where: ExamCategoryWhereUniqueInput
  }

  /**
   * ExamCategory updateMany
   */
  export type ExamCategoryUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamCategories.
     */
    data: XOR<ExamCategoryUpdateManyMutationInput, ExamCategoryUncheckedUpdateManyInput>
    /**
     * Filter which ExamCategories to update
     */
    where?: ExamCategoryWhereInput
    /**
     * Limit how many ExamCategories to update.
     */
    limit?: number
  }

  /**
   * ExamCategory upsert
   */
  export type ExamCategoryUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * The filter to search for the ExamCategory to update in case it exists.
     */
    where: ExamCategoryWhereUniqueInput
    /**
     * In case the ExamCategory found by the `where` argument doesn't exist, create a new ExamCategory with this data.
     */
    create: XOR<ExamCategoryCreateInput, ExamCategoryUncheckedCreateInput>
    /**
     * In case the ExamCategory was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamCategoryUpdateInput, ExamCategoryUncheckedUpdateInput>
  }

  /**
   * ExamCategory delete
   */
  export type ExamCategoryDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    /**
     * Filter which ExamCategory to delete.
     */
    where: ExamCategoryWhereUniqueInput
  }

  /**
   * ExamCategory deleteMany
   */
  export type ExamCategoryDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamCategories to delete
     */
    where?: ExamCategoryWhereInput
    /**
     * Limit how many ExamCategories to delete.
     */
    limit?: number
  }

  /**
   * ExamCategory.exam
   */
  export type ExamCategory$examArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    cursor?: ExamWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * ExamCategory without action
   */
  export type ExamCategoryDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
  }


  /**
   * Model ExamQuestionMarker
   */

  export type AggregateExamQuestionMarker = {
    _count: ExamQuestionMarkerCountAggregateOutputType | null
    _avg: ExamQuestionMarkerAvgAggregateOutputType | null
    _sum: ExamQuestionMarkerSumAggregateOutputType | null
    _min: ExamQuestionMarkerMinAggregateOutputType | null
    _max: ExamQuestionMarkerMaxAggregateOutputType | null
  }

  export type ExamQuestionMarkerAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ExamQuestionMarkerSumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ExamQuestionMarkerMinAggregateOutputType = {
    id: number | null
    question_marker_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionMarkerMaxAggregateOutputType = {
    id: number | null
    question_marker_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionMarkerCountAggregateOutputType = {
    id: number
    question_marker_name: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamQuestionMarkerAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ExamQuestionMarkerSumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ExamQuestionMarkerMinAggregateInputType = {
    id?: true
    question_marker_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionMarkerMaxAggregateInputType = {
    id?: true
    question_marker_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionMarkerCountAggregateInputType = {
    id?: true
    question_marker_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamQuestionMarkerAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestionMarker to aggregate.
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionMarkers to fetch.
     */
    orderBy?: ExamQuestionMarkerOrderByWithRelationInput | ExamQuestionMarkerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamQuestionMarkerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionMarkers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionMarkers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamQuestionMarkers
    **/
    _count?: true | ExamQuestionMarkerCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamQuestionMarkerAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamQuestionMarkerSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamQuestionMarkerMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamQuestionMarkerMaxAggregateInputType
  }

  export type GetExamQuestionMarkerAggregateType<T extends ExamQuestionMarkerAggregateArgs> = {
        [P in keyof T & keyof AggregateExamQuestionMarker]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamQuestionMarker[P]>
      : GetScalarType<T[P], AggregateExamQuestionMarker[P]>
  }




  export type ExamQuestionMarkerGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamQuestionMarkerWhereInput
    orderBy?: ExamQuestionMarkerOrderByWithAggregationInput | ExamQuestionMarkerOrderByWithAggregationInput[]
    by: ExamQuestionMarkerScalarFieldEnum[] | ExamQuestionMarkerScalarFieldEnum
    having?: ExamQuestionMarkerScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamQuestionMarkerCountAggregateInputType | true
    _avg?: ExamQuestionMarkerAvgAggregateInputType
    _sum?: ExamQuestionMarkerSumAggregateInputType
    _min?: ExamQuestionMarkerMinAggregateInputType
    _max?: ExamQuestionMarkerMaxAggregateInputType
  }

  export type ExamQuestionMarkerGroupByOutputType = {
    id: number
    question_marker_name: string
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamQuestionMarkerCountAggregateOutputType | null
    _avg: ExamQuestionMarkerAvgAggregateOutputType | null
    _sum: ExamQuestionMarkerSumAggregateOutputType | null
    _min: ExamQuestionMarkerMinAggregateOutputType | null
    _max: ExamQuestionMarkerMaxAggregateOutputType | null
  }

  type GetExamQuestionMarkerGroupByPayload<T extends ExamQuestionMarkerGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamQuestionMarkerGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamQuestionMarkerGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamQuestionMarkerGroupByOutputType[P]>
            : GetScalarType<T[P], ExamQuestionMarkerGroupByOutputType[P]>
        }
      >
    >


  export type ExamQuestionMarkerSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    question_marker_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examQuestionMarker"]>



  export type ExamQuestionMarkerSelectScalar = {
    id?: boolean
    question_marker_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamQuestionMarkerOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "question_marker_name" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examQuestionMarker"]>

  export type $ExamQuestionMarkerPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamQuestionMarker"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      question_marker_name: string
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examQuestionMarker"]>
    composites: {}
  }

  type ExamQuestionMarkerGetPayload<S extends boolean | null | undefined | ExamQuestionMarkerDefaultArgs> = $Result.GetResult<Prisma.$ExamQuestionMarkerPayload, S>

  type ExamQuestionMarkerCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamQuestionMarkerFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamQuestionMarkerCountAggregateInputType | true
    }

  export interface ExamQuestionMarkerDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamQuestionMarker'], meta: { name: 'ExamQuestionMarker' } }
    /**
     * Find zero or one ExamQuestionMarker that matches the filter.
     * @param {ExamQuestionMarkerFindUniqueArgs} args - Arguments to find a ExamQuestionMarker
     * @example
     * // Get one ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamQuestionMarkerFindUniqueArgs>(args: SelectSubset<T, ExamQuestionMarkerFindUniqueArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamQuestionMarker that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamQuestionMarkerFindUniqueOrThrowArgs} args - Arguments to find a ExamQuestionMarker
     * @example
     * // Get one ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamQuestionMarkerFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamQuestionMarkerFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestionMarker that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerFindFirstArgs} args - Arguments to find a ExamQuestionMarker
     * @example
     * // Get one ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamQuestionMarkerFindFirstArgs>(args?: SelectSubset<T, ExamQuestionMarkerFindFirstArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestionMarker that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerFindFirstOrThrowArgs} args - Arguments to find a ExamQuestionMarker
     * @example
     * // Get one ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamQuestionMarkerFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamQuestionMarkerFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamQuestionMarkers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamQuestionMarkers
     * const examQuestionMarkers = await prisma.examQuestionMarker.findMany()
     * 
     * // Get first 10 ExamQuestionMarkers
     * const examQuestionMarkers = await prisma.examQuestionMarker.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examQuestionMarkerWithIdOnly = await prisma.examQuestionMarker.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamQuestionMarkerFindManyArgs>(args?: SelectSubset<T, ExamQuestionMarkerFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamQuestionMarker.
     * @param {ExamQuestionMarkerCreateArgs} args - Arguments to create a ExamQuestionMarker.
     * @example
     * // Create one ExamQuestionMarker
     * const ExamQuestionMarker = await prisma.examQuestionMarker.create({
     *   data: {
     *     // ... data to create a ExamQuestionMarker
     *   }
     * })
     * 
     */
    create<T extends ExamQuestionMarkerCreateArgs>(args: SelectSubset<T, ExamQuestionMarkerCreateArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamQuestionMarkers.
     * @param {ExamQuestionMarkerCreateManyArgs} args - Arguments to create many ExamQuestionMarkers.
     * @example
     * // Create many ExamQuestionMarkers
     * const examQuestionMarker = await prisma.examQuestionMarker.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamQuestionMarkerCreateManyArgs>(args?: SelectSubset<T, ExamQuestionMarkerCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamQuestionMarker.
     * @param {ExamQuestionMarkerDeleteArgs} args - Arguments to delete one ExamQuestionMarker.
     * @example
     * // Delete one ExamQuestionMarker
     * const ExamQuestionMarker = await prisma.examQuestionMarker.delete({
     *   where: {
     *     // ... filter to delete one ExamQuestionMarker
     *   }
     * })
     * 
     */
    delete<T extends ExamQuestionMarkerDeleteArgs>(args: SelectSubset<T, ExamQuestionMarkerDeleteArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamQuestionMarker.
     * @param {ExamQuestionMarkerUpdateArgs} args - Arguments to update one ExamQuestionMarker.
     * @example
     * // Update one ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamQuestionMarkerUpdateArgs>(args: SelectSubset<T, ExamQuestionMarkerUpdateArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamQuestionMarkers.
     * @param {ExamQuestionMarkerDeleteManyArgs} args - Arguments to filter ExamQuestionMarkers to delete.
     * @example
     * // Delete a few ExamQuestionMarkers
     * const { count } = await prisma.examQuestionMarker.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamQuestionMarkerDeleteManyArgs>(args?: SelectSubset<T, ExamQuestionMarkerDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamQuestionMarkers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamQuestionMarkers
     * const examQuestionMarker = await prisma.examQuestionMarker.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamQuestionMarkerUpdateManyArgs>(args: SelectSubset<T, ExamQuestionMarkerUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamQuestionMarker.
     * @param {ExamQuestionMarkerUpsertArgs} args - Arguments to update or create a ExamQuestionMarker.
     * @example
     * // Update or create a ExamQuestionMarker
     * const examQuestionMarker = await prisma.examQuestionMarker.upsert({
     *   create: {
     *     // ... data to create a ExamQuestionMarker
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamQuestionMarker we want to update
     *   }
     * })
     */
    upsert<T extends ExamQuestionMarkerUpsertArgs>(args: SelectSubset<T, ExamQuestionMarkerUpsertArgs<ExtArgs>>): Prisma__ExamQuestionMarkerClient<$Result.GetResult<Prisma.$ExamQuestionMarkerPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamQuestionMarkers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerCountArgs} args - Arguments to filter ExamQuestionMarkers to count.
     * @example
     * // Count the number of ExamQuestionMarkers
     * const count = await prisma.examQuestionMarker.count({
     *   where: {
     *     // ... the filter for the ExamQuestionMarkers we want to count
     *   }
     * })
    **/
    count<T extends ExamQuestionMarkerCountArgs>(
      args?: Subset<T, ExamQuestionMarkerCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamQuestionMarkerCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamQuestionMarker.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamQuestionMarkerAggregateArgs>(args: Subset<T, ExamQuestionMarkerAggregateArgs>): Prisma.PrismaPromise<GetExamQuestionMarkerAggregateType<T>>

    /**
     * Group by ExamQuestionMarker.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionMarkerGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamQuestionMarkerGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamQuestionMarkerGroupByArgs['orderBy'] }
        : { orderBy?: ExamQuestionMarkerGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamQuestionMarkerGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamQuestionMarkerGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamQuestionMarker model
   */
  readonly fields: ExamQuestionMarkerFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamQuestionMarker.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamQuestionMarkerClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamQuestionMarker model
   */
  interface ExamQuestionMarkerFieldRefs {
    readonly id: FieldRef<"ExamQuestionMarker", 'Int'>
    readonly question_marker_name: FieldRef<"ExamQuestionMarker", 'String'>
    readonly desc: FieldRef<"ExamQuestionMarker", 'String'>
    readonly created_by: FieldRef<"ExamQuestionMarker", 'Int'>
    readonly created_at: FieldRef<"ExamQuestionMarker", 'DateTime'>
    readonly updated_at: FieldRef<"ExamQuestionMarker", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamQuestionMarker", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamQuestionMarker findUnique
   */
  export type ExamQuestionMarkerFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionMarker to fetch.
     */
    where: ExamQuestionMarkerWhereUniqueInput
  }

  /**
   * ExamQuestionMarker findUniqueOrThrow
   */
  export type ExamQuestionMarkerFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionMarker to fetch.
     */
    where: ExamQuestionMarkerWhereUniqueInput
  }

  /**
   * ExamQuestionMarker findFirst
   */
  export type ExamQuestionMarkerFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionMarker to fetch.
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionMarkers to fetch.
     */
    orderBy?: ExamQuestionMarkerOrderByWithRelationInput | ExamQuestionMarkerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestionMarkers.
     */
    cursor?: ExamQuestionMarkerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionMarkers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionMarkers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestionMarkers.
     */
    distinct?: ExamQuestionMarkerScalarFieldEnum | ExamQuestionMarkerScalarFieldEnum[]
  }

  /**
   * ExamQuestionMarker findFirstOrThrow
   */
  export type ExamQuestionMarkerFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionMarker to fetch.
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionMarkers to fetch.
     */
    orderBy?: ExamQuestionMarkerOrderByWithRelationInput | ExamQuestionMarkerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestionMarkers.
     */
    cursor?: ExamQuestionMarkerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionMarkers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionMarkers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestionMarkers.
     */
    distinct?: ExamQuestionMarkerScalarFieldEnum | ExamQuestionMarkerScalarFieldEnum[]
  }

  /**
   * ExamQuestionMarker findMany
   */
  export type ExamQuestionMarkerFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionMarkers to fetch.
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionMarkers to fetch.
     */
    orderBy?: ExamQuestionMarkerOrderByWithRelationInput | ExamQuestionMarkerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamQuestionMarkers.
     */
    cursor?: ExamQuestionMarkerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionMarkers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionMarkers.
     */
    skip?: number
    distinct?: ExamQuestionMarkerScalarFieldEnum | ExamQuestionMarkerScalarFieldEnum[]
  }

  /**
   * ExamQuestionMarker create
   */
  export type ExamQuestionMarkerCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamQuestionMarker.
     */
    data: XOR<ExamQuestionMarkerCreateInput, ExamQuestionMarkerUncheckedCreateInput>
  }

  /**
   * ExamQuestionMarker createMany
   */
  export type ExamQuestionMarkerCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamQuestionMarkers.
     */
    data: ExamQuestionMarkerCreateManyInput | ExamQuestionMarkerCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamQuestionMarker update
   */
  export type ExamQuestionMarkerUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamQuestionMarker.
     */
    data: XOR<ExamQuestionMarkerUpdateInput, ExamQuestionMarkerUncheckedUpdateInput>
    /**
     * Choose, which ExamQuestionMarker to update.
     */
    where: ExamQuestionMarkerWhereUniqueInput
  }

  /**
   * ExamQuestionMarker updateMany
   */
  export type ExamQuestionMarkerUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamQuestionMarkers.
     */
    data: XOR<ExamQuestionMarkerUpdateManyMutationInput, ExamQuestionMarkerUncheckedUpdateManyInput>
    /**
     * Filter which ExamQuestionMarkers to update
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * Limit how many ExamQuestionMarkers to update.
     */
    limit?: number
  }

  /**
   * ExamQuestionMarker upsert
   */
  export type ExamQuestionMarkerUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamQuestionMarker to update in case it exists.
     */
    where: ExamQuestionMarkerWhereUniqueInput
    /**
     * In case the ExamQuestionMarker found by the `where` argument doesn't exist, create a new ExamQuestionMarker with this data.
     */
    create: XOR<ExamQuestionMarkerCreateInput, ExamQuestionMarkerUncheckedCreateInput>
    /**
     * In case the ExamQuestionMarker was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamQuestionMarkerUpdateInput, ExamQuestionMarkerUncheckedUpdateInput>
  }

  /**
   * ExamQuestionMarker delete
   */
  export type ExamQuestionMarkerDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
    /**
     * Filter which ExamQuestionMarker to delete.
     */
    where: ExamQuestionMarkerWhereUniqueInput
  }

  /**
   * ExamQuestionMarker deleteMany
   */
  export type ExamQuestionMarkerDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestionMarkers to delete
     */
    where?: ExamQuestionMarkerWhereInput
    /**
     * Limit how many ExamQuestionMarkers to delete.
     */
    limit?: number
  }

  /**
   * ExamQuestionMarker without action
   */
  export type ExamQuestionMarkerDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionMarker
     */
    select?: ExamQuestionMarkerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionMarker
     */
    omit?: ExamQuestionMarkerOmit<ExtArgs> | null
  }


  /**
   * Model QuestionTemplate
   */

  export type AggregateQuestionTemplate = {
    _count: QuestionTemplateCountAggregateOutputType | null
    _avg: QuestionTemplateAvgAggregateOutputType | null
    _sum: QuestionTemplateSumAggregateOutputType | null
    _min: QuestionTemplateMinAggregateOutputType | null
    _max: QuestionTemplateMaxAggregateOutputType | null
  }

  export type QuestionTemplateAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    created_by: number | null
  }

  export type QuestionTemplateSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    created_by: number | null
  }

  export type QuestionTemplateMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question: string | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    image_path: string | null
    option_a: string | null
    option_b: string | null
    option_c: string | null
    option_d: string | null
    option_answer: string | null
    theory_answer: string | null
    difficulty_level: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QuestionTemplateMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question: string | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    image_path: string | null
    option_a: string | null
    option_b: string | null
    option_c: string | null
    option_d: string | null
    option_answer: string | null
    theory_answer: string | null
    difficulty_level: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QuestionTemplateCountAggregateOutputType = {
    id: number
    branch_id: number
    class_id: number
    subject_id: number
    question: number
    question_marker: number
    is_objective: number
    is_boolean_question: number
    max_time: number
    image_path: number
    option_a: number
    option_b: number
    option_c: number
    option_d: number
    option_answer: number
    theory_answer: number
    difficulty_level: number
    tag: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type QuestionTemplateAvgAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    created_by?: true
  }

  export type QuestionTemplateSumAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    created_by?: true
  }

  export type QuestionTemplateMinAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QuestionTemplateMaxAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QuestionTemplateCountAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    tag?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type QuestionTemplateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which QuestionTemplate to aggregate.
     */
    where?: QuestionTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of QuestionTemplates to fetch.
     */
    orderBy?: QuestionTemplateOrderByWithRelationInput | QuestionTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: QuestionTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` QuestionTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` QuestionTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned QuestionTemplates
    **/
    _count?: true | QuestionTemplateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: QuestionTemplateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: QuestionTemplateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: QuestionTemplateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: QuestionTemplateMaxAggregateInputType
  }

  export type GetQuestionTemplateAggregateType<T extends QuestionTemplateAggregateArgs> = {
        [P in keyof T & keyof AggregateQuestionTemplate]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateQuestionTemplate[P]>
      : GetScalarType<T[P], AggregateQuestionTemplate[P]>
  }




  export type QuestionTemplateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: QuestionTemplateWhereInput
    orderBy?: QuestionTemplateOrderByWithAggregationInput | QuestionTemplateOrderByWithAggregationInput[]
    by: QuestionTemplateScalarFieldEnum[] | QuestionTemplateScalarFieldEnum
    having?: QuestionTemplateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: QuestionTemplateCountAggregateInputType | true
    _avg?: QuestionTemplateAvgAggregateInputType
    _sum?: QuestionTemplateSumAggregateInputType
    _min?: QuestionTemplateMinAggregateInputType
    _max?: QuestionTemplateMaxAggregateInputType
  }

  export type QuestionTemplateGroupByOutputType = {
    id: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker: number | null
    is_objective: number
    is_boolean_question: number
    max_time: number | null
    image_path: string | null
    option_a: string
    option_b: string
    option_c: string | null
    option_d: string | null
    option_answer: string
    theory_answer: string | null
    difficulty_level: string | null
    tag: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: QuestionTemplateCountAggregateOutputType | null
    _avg: QuestionTemplateAvgAggregateOutputType | null
    _sum: QuestionTemplateSumAggregateOutputType | null
    _min: QuestionTemplateMinAggregateOutputType | null
    _max: QuestionTemplateMaxAggregateOutputType | null
  }

  type GetQuestionTemplateGroupByPayload<T extends QuestionTemplateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<QuestionTemplateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof QuestionTemplateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], QuestionTemplateGroupByOutputType[P]>
            : GetScalarType<T[P], QuestionTemplateGroupByOutputType[P]>
        }
      >
    >


  export type QuestionTemplateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    class_id?: boolean
    subject_id?: boolean
    question?: boolean
    question_marker?: boolean
    is_objective?: boolean
    is_boolean_question?: boolean
    max_time?: boolean
    image_path?: boolean
    option_a?: boolean
    option_b?: boolean
    option_c?: boolean
    option_d?: boolean
    option_answer?: boolean
    theory_answer?: boolean
    difficulty_level?: boolean
    tag?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["questionTemplate"]>



  export type QuestionTemplateSelectScalar = {
    id?: boolean
    branch_id?: boolean
    class_id?: boolean
    subject_id?: boolean
    question?: boolean
    question_marker?: boolean
    is_objective?: boolean
    is_boolean_question?: boolean
    max_time?: boolean
    image_path?: boolean
    option_a?: boolean
    option_b?: boolean
    option_c?: boolean
    option_d?: boolean
    option_answer?: boolean
    theory_answer?: boolean
    difficulty_level?: boolean
    tag?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type QuestionTemplateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "class_id" | "subject_id" | "question" | "question_marker" | "is_objective" | "is_boolean_question" | "max_time" | "image_path" | "option_a" | "option_b" | "option_c" | "option_d" | "option_answer" | "theory_answer" | "difficulty_level" | "tag" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["questionTemplate"]>

  export type $QuestionTemplatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "QuestionTemplate"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      class_id: number
      subject_id: number
      question: string
      question_marker: number | null
      is_objective: number
      is_boolean_question: number
      max_time: number | null
      image_path: string | null
      option_a: string
      option_b: string
      option_c: string | null
      option_d: string | null
      option_answer: string
      theory_answer: string | null
      difficulty_level: string | null
      tag: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["questionTemplate"]>
    composites: {}
  }

  type QuestionTemplateGetPayload<S extends boolean | null | undefined | QuestionTemplateDefaultArgs> = $Result.GetResult<Prisma.$QuestionTemplatePayload, S>

  type QuestionTemplateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<QuestionTemplateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: QuestionTemplateCountAggregateInputType | true
    }

  export interface QuestionTemplateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['QuestionTemplate'], meta: { name: 'QuestionTemplate' } }
    /**
     * Find zero or one QuestionTemplate that matches the filter.
     * @param {QuestionTemplateFindUniqueArgs} args - Arguments to find a QuestionTemplate
     * @example
     * // Get one QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends QuestionTemplateFindUniqueArgs>(args: SelectSubset<T, QuestionTemplateFindUniqueArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one QuestionTemplate that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {QuestionTemplateFindUniqueOrThrowArgs} args - Arguments to find a QuestionTemplate
     * @example
     * // Get one QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends QuestionTemplateFindUniqueOrThrowArgs>(args: SelectSubset<T, QuestionTemplateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first QuestionTemplate that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateFindFirstArgs} args - Arguments to find a QuestionTemplate
     * @example
     * // Get one QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends QuestionTemplateFindFirstArgs>(args?: SelectSubset<T, QuestionTemplateFindFirstArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first QuestionTemplate that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateFindFirstOrThrowArgs} args - Arguments to find a QuestionTemplate
     * @example
     * // Get one QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends QuestionTemplateFindFirstOrThrowArgs>(args?: SelectSubset<T, QuestionTemplateFindFirstOrThrowArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more QuestionTemplates that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all QuestionTemplates
     * const questionTemplates = await prisma.questionTemplate.findMany()
     * 
     * // Get first 10 QuestionTemplates
     * const questionTemplates = await prisma.questionTemplate.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const questionTemplateWithIdOnly = await prisma.questionTemplate.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends QuestionTemplateFindManyArgs>(args?: SelectSubset<T, QuestionTemplateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a QuestionTemplate.
     * @param {QuestionTemplateCreateArgs} args - Arguments to create a QuestionTemplate.
     * @example
     * // Create one QuestionTemplate
     * const QuestionTemplate = await prisma.questionTemplate.create({
     *   data: {
     *     // ... data to create a QuestionTemplate
     *   }
     * })
     * 
     */
    create<T extends QuestionTemplateCreateArgs>(args: SelectSubset<T, QuestionTemplateCreateArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many QuestionTemplates.
     * @param {QuestionTemplateCreateManyArgs} args - Arguments to create many QuestionTemplates.
     * @example
     * // Create many QuestionTemplates
     * const questionTemplate = await prisma.questionTemplate.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends QuestionTemplateCreateManyArgs>(args?: SelectSubset<T, QuestionTemplateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a QuestionTemplate.
     * @param {QuestionTemplateDeleteArgs} args - Arguments to delete one QuestionTemplate.
     * @example
     * // Delete one QuestionTemplate
     * const QuestionTemplate = await prisma.questionTemplate.delete({
     *   where: {
     *     // ... filter to delete one QuestionTemplate
     *   }
     * })
     * 
     */
    delete<T extends QuestionTemplateDeleteArgs>(args: SelectSubset<T, QuestionTemplateDeleteArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one QuestionTemplate.
     * @param {QuestionTemplateUpdateArgs} args - Arguments to update one QuestionTemplate.
     * @example
     * // Update one QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends QuestionTemplateUpdateArgs>(args: SelectSubset<T, QuestionTemplateUpdateArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more QuestionTemplates.
     * @param {QuestionTemplateDeleteManyArgs} args - Arguments to filter QuestionTemplates to delete.
     * @example
     * // Delete a few QuestionTemplates
     * const { count } = await prisma.questionTemplate.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends QuestionTemplateDeleteManyArgs>(args?: SelectSubset<T, QuestionTemplateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more QuestionTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many QuestionTemplates
     * const questionTemplate = await prisma.questionTemplate.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends QuestionTemplateUpdateManyArgs>(args: SelectSubset<T, QuestionTemplateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one QuestionTemplate.
     * @param {QuestionTemplateUpsertArgs} args - Arguments to update or create a QuestionTemplate.
     * @example
     * // Update or create a QuestionTemplate
     * const questionTemplate = await prisma.questionTemplate.upsert({
     *   create: {
     *     // ... data to create a QuestionTemplate
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the QuestionTemplate we want to update
     *   }
     * })
     */
    upsert<T extends QuestionTemplateUpsertArgs>(args: SelectSubset<T, QuestionTemplateUpsertArgs<ExtArgs>>): Prisma__QuestionTemplateClient<$Result.GetResult<Prisma.$QuestionTemplatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of QuestionTemplates.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateCountArgs} args - Arguments to filter QuestionTemplates to count.
     * @example
     * // Count the number of QuestionTemplates
     * const count = await prisma.questionTemplate.count({
     *   where: {
     *     // ... the filter for the QuestionTemplates we want to count
     *   }
     * })
    **/
    count<T extends QuestionTemplateCountArgs>(
      args?: Subset<T, QuestionTemplateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], QuestionTemplateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a QuestionTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends QuestionTemplateAggregateArgs>(args: Subset<T, QuestionTemplateAggregateArgs>): Prisma.PrismaPromise<GetQuestionTemplateAggregateType<T>>

    /**
     * Group by QuestionTemplate.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionTemplateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends QuestionTemplateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: QuestionTemplateGroupByArgs['orderBy'] }
        : { orderBy?: QuestionTemplateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, QuestionTemplateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetQuestionTemplateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the QuestionTemplate model
   */
  readonly fields: QuestionTemplateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for QuestionTemplate.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__QuestionTemplateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the QuestionTemplate model
   */
  interface QuestionTemplateFieldRefs {
    readonly id: FieldRef<"QuestionTemplate", 'Int'>
    readonly branch_id: FieldRef<"QuestionTemplate", 'Int'>
    readonly class_id: FieldRef<"QuestionTemplate", 'Int'>
    readonly subject_id: FieldRef<"QuestionTemplate", 'Int'>
    readonly question: FieldRef<"QuestionTemplate", 'String'>
    readonly question_marker: FieldRef<"QuestionTemplate", 'Int'>
    readonly is_objective: FieldRef<"QuestionTemplate", 'Int'>
    readonly is_boolean_question: FieldRef<"QuestionTemplate", 'Int'>
    readonly max_time: FieldRef<"QuestionTemplate", 'Int'>
    readonly image_path: FieldRef<"QuestionTemplate", 'String'>
    readonly option_a: FieldRef<"QuestionTemplate", 'String'>
    readonly option_b: FieldRef<"QuestionTemplate", 'String'>
    readonly option_c: FieldRef<"QuestionTemplate", 'String'>
    readonly option_d: FieldRef<"QuestionTemplate", 'String'>
    readonly option_answer: FieldRef<"QuestionTemplate", 'String'>
    readonly theory_answer: FieldRef<"QuestionTemplate", 'String'>
    readonly difficulty_level: FieldRef<"QuestionTemplate", 'String'>
    readonly tag: FieldRef<"QuestionTemplate", 'Json'>
    readonly created_by: FieldRef<"QuestionTemplate", 'Int'>
    readonly created_at: FieldRef<"QuestionTemplate", 'DateTime'>
    readonly updated_at: FieldRef<"QuestionTemplate", 'DateTime'>
    readonly deleted_at: FieldRef<"QuestionTemplate", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * QuestionTemplate findUnique
   */
  export type QuestionTemplateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter, which QuestionTemplate to fetch.
     */
    where: QuestionTemplateWhereUniqueInput
  }

  /**
   * QuestionTemplate findUniqueOrThrow
   */
  export type QuestionTemplateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter, which QuestionTemplate to fetch.
     */
    where: QuestionTemplateWhereUniqueInput
  }

  /**
   * QuestionTemplate findFirst
   */
  export type QuestionTemplateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter, which QuestionTemplate to fetch.
     */
    where?: QuestionTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of QuestionTemplates to fetch.
     */
    orderBy?: QuestionTemplateOrderByWithRelationInput | QuestionTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for QuestionTemplates.
     */
    cursor?: QuestionTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` QuestionTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` QuestionTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of QuestionTemplates.
     */
    distinct?: QuestionTemplateScalarFieldEnum | QuestionTemplateScalarFieldEnum[]
  }

  /**
   * QuestionTemplate findFirstOrThrow
   */
  export type QuestionTemplateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter, which QuestionTemplate to fetch.
     */
    where?: QuestionTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of QuestionTemplates to fetch.
     */
    orderBy?: QuestionTemplateOrderByWithRelationInput | QuestionTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for QuestionTemplates.
     */
    cursor?: QuestionTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` QuestionTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` QuestionTemplates.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of QuestionTemplates.
     */
    distinct?: QuestionTemplateScalarFieldEnum | QuestionTemplateScalarFieldEnum[]
  }

  /**
   * QuestionTemplate findMany
   */
  export type QuestionTemplateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter, which QuestionTemplates to fetch.
     */
    where?: QuestionTemplateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of QuestionTemplates to fetch.
     */
    orderBy?: QuestionTemplateOrderByWithRelationInput | QuestionTemplateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing QuestionTemplates.
     */
    cursor?: QuestionTemplateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` QuestionTemplates from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` QuestionTemplates.
     */
    skip?: number
    distinct?: QuestionTemplateScalarFieldEnum | QuestionTemplateScalarFieldEnum[]
  }

  /**
   * QuestionTemplate create
   */
  export type QuestionTemplateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * The data needed to create a QuestionTemplate.
     */
    data: XOR<QuestionTemplateCreateInput, QuestionTemplateUncheckedCreateInput>
  }

  /**
   * QuestionTemplate createMany
   */
  export type QuestionTemplateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many QuestionTemplates.
     */
    data: QuestionTemplateCreateManyInput | QuestionTemplateCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * QuestionTemplate update
   */
  export type QuestionTemplateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * The data needed to update a QuestionTemplate.
     */
    data: XOR<QuestionTemplateUpdateInput, QuestionTemplateUncheckedUpdateInput>
    /**
     * Choose, which QuestionTemplate to update.
     */
    where: QuestionTemplateWhereUniqueInput
  }

  /**
   * QuestionTemplate updateMany
   */
  export type QuestionTemplateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update QuestionTemplates.
     */
    data: XOR<QuestionTemplateUpdateManyMutationInput, QuestionTemplateUncheckedUpdateManyInput>
    /**
     * Filter which QuestionTemplates to update
     */
    where?: QuestionTemplateWhereInput
    /**
     * Limit how many QuestionTemplates to update.
     */
    limit?: number
  }

  /**
   * QuestionTemplate upsert
   */
  export type QuestionTemplateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * The filter to search for the QuestionTemplate to update in case it exists.
     */
    where: QuestionTemplateWhereUniqueInput
    /**
     * In case the QuestionTemplate found by the `where` argument doesn't exist, create a new QuestionTemplate with this data.
     */
    create: XOR<QuestionTemplateCreateInput, QuestionTemplateUncheckedCreateInput>
    /**
     * In case the QuestionTemplate was found with the provided `where` argument, update it with this data.
     */
    update: XOR<QuestionTemplateUpdateInput, QuestionTemplateUncheckedUpdateInput>
  }

  /**
   * QuestionTemplate delete
   */
  export type QuestionTemplateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
    /**
     * Filter which QuestionTemplate to delete.
     */
    where: QuestionTemplateWhereUniqueInput
  }

  /**
   * QuestionTemplate deleteMany
   */
  export type QuestionTemplateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which QuestionTemplates to delete
     */
    where?: QuestionTemplateWhereInput
    /**
     * Limit how many QuestionTemplates to delete.
     */
    limit?: number
  }

  /**
   * QuestionTemplate without action
   */
  export type QuestionTemplateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the QuestionTemplate
     */
    select?: QuestionTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the QuestionTemplate
     */
    omit?: QuestionTemplateOmit<ExtArgs> | null
  }


  /**
   * Model Question
   */

  export type AggregateQuestion = {
    _count: QuestionCountAggregateOutputType | null
    _avg: QuestionAvgAggregateOutputType | null
    _sum: QuestionSumAggregateOutputType | null
    _min: QuestionMinAggregateOutputType | null
    _max: QuestionMaxAggregateOutputType | null
  }

  export type QuestionAvgAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    created_by: number | null
  }

  export type QuestionSumAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    created_by: number | null
  }

  export type QuestionMinAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question: string | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    image_path: string | null
    option_a: string | null
    option_b: string | null
    option_c: string | null
    option_d: string | null
    option_answer: string | null
    theory_answer: string | null
    difficulty_level: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QuestionMaxAggregateOutputType = {
    id: number | null
    branch_id: number | null
    class_id: number | null
    subject_id: number | null
    question: string | null
    question_marker: number | null
    is_objective: number | null
    is_boolean_question: number | null
    max_time: number | null
    image_path: string | null
    option_a: string | null
    option_b: string | null
    option_c: string | null
    option_d: string | null
    option_answer: string | null
    theory_answer: string | null
    difficulty_level: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type QuestionCountAggregateOutputType = {
    id: number
    branch_id: number
    class_id: number
    subject_id: number
    question: number
    question_marker: number
    is_objective: number
    is_boolean_question: number
    max_time: number
    image_path: number
    option_a: number
    option_b: number
    option_c: number
    option_d: number
    option_answer: number
    theory_answer: number
    difficulty_level: number
    tag: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type QuestionAvgAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    created_by?: true
  }

  export type QuestionSumAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    created_by?: true
  }

  export type QuestionMinAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QuestionMaxAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type QuestionCountAggregateInputType = {
    id?: true
    branch_id?: true
    class_id?: true
    subject_id?: true
    question?: true
    question_marker?: true
    is_objective?: true
    is_boolean_question?: true
    max_time?: true
    image_path?: true
    option_a?: true
    option_b?: true
    option_c?: true
    option_d?: true
    option_answer?: true
    theory_answer?: true
    difficulty_level?: true
    tag?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type QuestionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Question to aggregate.
     */
    where?: QuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Questions to fetch.
     */
    orderBy?: QuestionOrderByWithRelationInput | QuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: QuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Questions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Questions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Questions
    **/
    _count?: true | QuestionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: QuestionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: QuestionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: QuestionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: QuestionMaxAggregateInputType
  }

  export type GetQuestionAggregateType<T extends QuestionAggregateArgs> = {
        [P in keyof T & keyof AggregateQuestion]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateQuestion[P]>
      : GetScalarType<T[P], AggregateQuestion[P]>
  }




  export type QuestionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: QuestionWhereInput
    orderBy?: QuestionOrderByWithAggregationInput | QuestionOrderByWithAggregationInput[]
    by: QuestionScalarFieldEnum[] | QuestionScalarFieldEnum
    having?: QuestionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: QuestionCountAggregateInputType | true
    _avg?: QuestionAvgAggregateInputType
    _sum?: QuestionSumAggregateInputType
    _min?: QuestionMinAggregateInputType
    _max?: QuestionMaxAggregateInputType
  }

  export type QuestionGroupByOutputType = {
    id: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker: number | null
    is_objective: number
    is_boolean_question: number
    max_time: number | null
    image_path: string | null
    option_a: string
    option_b: string
    option_c: string | null
    option_d: string | null
    option_answer: string
    theory_answer: string | null
    difficulty_level: string | null
    tag: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: QuestionCountAggregateOutputType | null
    _avg: QuestionAvgAggregateOutputType | null
    _sum: QuestionSumAggregateOutputType | null
    _min: QuestionMinAggregateOutputType | null
    _max: QuestionMaxAggregateOutputType | null
  }

  type GetQuestionGroupByPayload<T extends QuestionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<QuestionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof QuestionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], QuestionGroupByOutputType[P]>
            : GetScalarType<T[P], QuestionGroupByOutputType[P]>
        }
      >
    >


  export type QuestionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    branch_id?: boolean
    class_id?: boolean
    subject_id?: boolean
    question?: boolean
    question_marker?: boolean
    is_objective?: boolean
    is_boolean_question?: boolean
    max_time?: boolean
    image_path?: boolean
    option_a?: boolean
    option_b?: boolean
    option_c?: boolean
    option_d?: boolean
    option_answer?: boolean
    theory_answer?: boolean
    difficulty_level?: boolean
    tag?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["question"]>



  export type QuestionSelectScalar = {
    id?: boolean
    branch_id?: boolean
    class_id?: boolean
    subject_id?: boolean
    question?: boolean
    question_marker?: boolean
    is_objective?: boolean
    is_boolean_question?: boolean
    max_time?: boolean
    image_path?: boolean
    option_a?: boolean
    option_b?: boolean
    option_c?: boolean
    option_d?: boolean
    option_answer?: boolean
    theory_answer?: boolean
    difficulty_level?: boolean
    tag?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type QuestionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "branch_id" | "class_id" | "subject_id" | "question" | "question_marker" | "is_objective" | "is_boolean_question" | "max_time" | "image_path" | "option_a" | "option_b" | "option_c" | "option_d" | "option_answer" | "theory_answer" | "difficulty_level" | "tag" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["question"]>

  export type $QuestionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Question"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      branch_id: number
      class_id: number
      subject_id: number
      question: string
      question_marker: number | null
      is_objective: number
      is_boolean_question: number
      max_time: number | null
      image_path: string | null
      option_a: string
      option_b: string
      option_c: string | null
      option_d: string | null
      option_answer: string
      theory_answer: string | null
      difficulty_level: string | null
      tag: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["question"]>
    composites: {}
  }

  type QuestionGetPayload<S extends boolean | null | undefined | QuestionDefaultArgs> = $Result.GetResult<Prisma.$QuestionPayload, S>

  type QuestionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<QuestionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: QuestionCountAggregateInputType | true
    }

  export interface QuestionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Question'], meta: { name: 'Question' } }
    /**
     * Find zero or one Question that matches the filter.
     * @param {QuestionFindUniqueArgs} args - Arguments to find a Question
     * @example
     * // Get one Question
     * const question = await prisma.question.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends QuestionFindUniqueArgs>(args: SelectSubset<T, QuestionFindUniqueArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Question that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {QuestionFindUniqueOrThrowArgs} args - Arguments to find a Question
     * @example
     * // Get one Question
     * const question = await prisma.question.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends QuestionFindUniqueOrThrowArgs>(args: SelectSubset<T, QuestionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Question that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionFindFirstArgs} args - Arguments to find a Question
     * @example
     * // Get one Question
     * const question = await prisma.question.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends QuestionFindFirstArgs>(args?: SelectSubset<T, QuestionFindFirstArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Question that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionFindFirstOrThrowArgs} args - Arguments to find a Question
     * @example
     * // Get one Question
     * const question = await prisma.question.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends QuestionFindFirstOrThrowArgs>(args?: SelectSubset<T, QuestionFindFirstOrThrowArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Questions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Questions
     * const questions = await prisma.question.findMany()
     * 
     * // Get first 10 Questions
     * const questions = await prisma.question.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const questionWithIdOnly = await prisma.question.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends QuestionFindManyArgs>(args?: SelectSubset<T, QuestionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Question.
     * @param {QuestionCreateArgs} args - Arguments to create a Question.
     * @example
     * // Create one Question
     * const Question = await prisma.question.create({
     *   data: {
     *     // ... data to create a Question
     *   }
     * })
     * 
     */
    create<T extends QuestionCreateArgs>(args: SelectSubset<T, QuestionCreateArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Questions.
     * @param {QuestionCreateManyArgs} args - Arguments to create many Questions.
     * @example
     * // Create many Questions
     * const question = await prisma.question.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends QuestionCreateManyArgs>(args?: SelectSubset<T, QuestionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Question.
     * @param {QuestionDeleteArgs} args - Arguments to delete one Question.
     * @example
     * // Delete one Question
     * const Question = await prisma.question.delete({
     *   where: {
     *     // ... filter to delete one Question
     *   }
     * })
     * 
     */
    delete<T extends QuestionDeleteArgs>(args: SelectSubset<T, QuestionDeleteArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Question.
     * @param {QuestionUpdateArgs} args - Arguments to update one Question.
     * @example
     * // Update one Question
     * const question = await prisma.question.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends QuestionUpdateArgs>(args: SelectSubset<T, QuestionUpdateArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Questions.
     * @param {QuestionDeleteManyArgs} args - Arguments to filter Questions to delete.
     * @example
     * // Delete a few Questions
     * const { count } = await prisma.question.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends QuestionDeleteManyArgs>(args?: SelectSubset<T, QuestionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Questions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Questions
     * const question = await prisma.question.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends QuestionUpdateManyArgs>(args: SelectSubset<T, QuestionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Question.
     * @param {QuestionUpsertArgs} args - Arguments to update or create a Question.
     * @example
     * // Update or create a Question
     * const question = await prisma.question.upsert({
     *   create: {
     *     // ... data to create a Question
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Question we want to update
     *   }
     * })
     */
    upsert<T extends QuestionUpsertArgs>(args: SelectSubset<T, QuestionUpsertArgs<ExtArgs>>): Prisma__QuestionClient<$Result.GetResult<Prisma.$QuestionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Questions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionCountArgs} args - Arguments to filter Questions to count.
     * @example
     * // Count the number of Questions
     * const count = await prisma.question.count({
     *   where: {
     *     // ... the filter for the Questions we want to count
     *   }
     * })
    **/
    count<T extends QuestionCountArgs>(
      args?: Subset<T, QuestionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], QuestionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Question.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends QuestionAggregateArgs>(args: Subset<T, QuestionAggregateArgs>): Prisma.PrismaPromise<GetQuestionAggregateType<T>>

    /**
     * Group by Question.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {QuestionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends QuestionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: QuestionGroupByArgs['orderBy'] }
        : { orderBy?: QuestionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, QuestionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetQuestionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Question model
   */
  readonly fields: QuestionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Question.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__QuestionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Question model
   */
  interface QuestionFieldRefs {
    readonly id: FieldRef<"Question", 'Int'>
    readonly branch_id: FieldRef<"Question", 'Int'>
    readonly class_id: FieldRef<"Question", 'Int'>
    readonly subject_id: FieldRef<"Question", 'Int'>
    readonly question: FieldRef<"Question", 'String'>
    readonly question_marker: FieldRef<"Question", 'Int'>
    readonly is_objective: FieldRef<"Question", 'Int'>
    readonly is_boolean_question: FieldRef<"Question", 'Int'>
    readonly max_time: FieldRef<"Question", 'Int'>
    readonly image_path: FieldRef<"Question", 'String'>
    readonly option_a: FieldRef<"Question", 'String'>
    readonly option_b: FieldRef<"Question", 'String'>
    readonly option_c: FieldRef<"Question", 'String'>
    readonly option_d: FieldRef<"Question", 'String'>
    readonly option_answer: FieldRef<"Question", 'String'>
    readonly theory_answer: FieldRef<"Question", 'String'>
    readonly difficulty_level: FieldRef<"Question", 'String'>
    readonly tag: FieldRef<"Question", 'Json'>
    readonly created_by: FieldRef<"Question", 'Int'>
    readonly created_at: FieldRef<"Question", 'DateTime'>
    readonly updated_at: FieldRef<"Question", 'DateTime'>
    readonly deleted_at: FieldRef<"Question", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Question findUnique
   */
  export type QuestionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter, which Question to fetch.
     */
    where: QuestionWhereUniqueInput
  }

  /**
   * Question findUniqueOrThrow
   */
  export type QuestionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter, which Question to fetch.
     */
    where: QuestionWhereUniqueInput
  }

  /**
   * Question findFirst
   */
  export type QuestionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter, which Question to fetch.
     */
    where?: QuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Questions to fetch.
     */
    orderBy?: QuestionOrderByWithRelationInput | QuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Questions.
     */
    cursor?: QuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Questions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Questions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Questions.
     */
    distinct?: QuestionScalarFieldEnum | QuestionScalarFieldEnum[]
  }

  /**
   * Question findFirstOrThrow
   */
  export type QuestionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter, which Question to fetch.
     */
    where?: QuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Questions to fetch.
     */
    orderBy?: QuestionOrderByWithRelationInput | QuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Questions.
     */
    cursor?: QuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Questions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Questions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Questions.
     */
    distinct?: QuestionScalarFieldEnum | QuestionScalarFieldEnum[]
  }

  /**
   * Question findMany
   */
  export type QuestionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter, which Questions to fetch.
     */
    where?: QuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Questions to fetch.
     */
    orderBy?: QuestionOrderByWithRelationInput | QuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Questions.
     */
    cursor?: QuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Questions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Questions.
     */
    skip?: number
    distinct?: QuestionScalarFieldEnum | QuestionScalarFieldEnum[]
  }

  /**
   * Question create
   */
  export type QuestionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * The data needed to create a Question.
     */
    data: XOR<QuestionCreateInput, QuestionUncheckedCreateInput>
  }

  /**
   * Question createMany
   */
  export type QuestionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Questions.
     */
    data: QuestionCreateManyInput | QuestionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Question update
   */
  export type QuestionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * The data needed to update a Question.
     */
    data: XOR<QuestionUpdateInput, QuestionUncheckedUpdateInput>
    /**
     * Choose, which Question to update.
     */
    where: QuestionWhereUniqueInput
  }

  /**
   * Question updateMany
   */
  export type QuestionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Questions.
     */
    data: XOR<QuestionUpdateManyMutationInput, QuestionUncheckedUpdateManyInput>
    /**
     * Filter which Questions to update
     */
    where?: QuestionWhereInput
    /**
     * Limit how many Questions to update.
     */
    limit?: number
  }

  /**
   * Question upsert
   */
  export type QuestionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * The filter to search for the Question to update in case it exists.
     */
    where: QuestionWhereUniqueInput
    /**
     * In case the Question found by the `where` argument doesn't exist, create a new Question with this data.
     */
    create: XOR<QuestionCreateInput, QuestionUncheckedCreateInput>
    /**
     * In case the Question was found with the provided `where` argument, update it with this data.
     */
    update: XOR<QuestionUpdateInput, QuestionUncheckedUpdateInput>
  }

  /**
   * Question delete
   */
  export type QuestionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
    /**
     * Filter which Question to delete.
     */
    where: QuestionWhereUniqueInput
  }

  /**
   * Question deleteMany
   */
  export type QuestionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Questions to delete
     */
    where?: QuestionWhereInput
    /**
     * Limit how many Questions to delete.
     */
    limit?: number
  }

  /**
   * Question without action
   */
  export type QuestionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Question
     */
    select?: QuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Question
     */
    omit?: QuestionOmit<ExtArgs> | null
  }


  /**
   * Model ExamVisibility
   */

  export type AggregateExamVisibility = {
    _count: ExamVisibilityCountAggregateOutputType | null
    _avg: ExamVisibilityAvgAggregateOutputType | null
    _sum: ExamVisibilitySumAggregateOutputType | null
    _min: ExamVisibilityMinAggregateOutputType | null
    _max: ExamVisibilityMaxAggregateOutputType | null
  }

  export type ExamVisibilityAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ExamVisibilitySumAggregateOutputType = {
    id: number | null
    created_by: number | null
  }

  export type ExamVisibilityMinAggregateOutputType = {
    id: number | null
    exam_visibility_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamVisibilityMaxAggregateOutputType = {
    id: number | null
    exam_visibility_name: string | null
    desc: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamVisibilityCountAggregateOutputType = {
    id: number
    exam_visibility_name: number
    desc: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamVisibilityAvgAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ExamVisibilitySumAggregateInputType = {
    id?: true
    created_by?: true
  }

  export type ExamVisibilityMinAggregateInputType = {
    id?: true
    exam_visibility_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamVisibilityMaxAggregateInputType = {
    id?: true
    exam_visibility_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamVisibilityCountAggregateInputType = {
    id?: true
    exam_visibility_name?: true
    desc?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamVisibilityAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamVisibility to aggregate.
     */
    where?: ExamVisibilityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamVisibilities to fetch.
     */
    orderBy?: ExamVisibilityOrderByWithRelationInput | ExamVisibilityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamVisibilityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamVisibilities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamVisibilities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamVisibilities
    **/
    _count?: true | ExamVisibilityCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamVisibilityAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamVisibilitySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamVisibilityMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamVisibilityMaxAggregateInputType
  }

  export type GetExamVisibilityAggregateType<T extends ExamVisibilityAggregateArgs> = {
        [P in keyof T & keyof AggregateExamVisibility]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamVisibility[P]>
      : GetScalarType<T[P], AggregateExamVisibility[P]>
  }




  export type ExamVisibilityGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamVisibilityWhereInput
    orderBy?: ExamVisibilityOrderByWithAggregationInput | ExamVisibilityOrderByWithAggregationInput[]
    by: ExamVisibilityScalarFieldEnum[] | ExamVisibilityScalarFieldEnum
    having?: ExamVisibilityScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamVisibilityCountAggregateInputType | true
    _avg?: ExamVisibilityAvgAggregateInputType
    _sum?: ExamVisibilitySumAggregateInputType
    _min?: ExamVisibilityMinAggregateInputType
    _max?: ExamVisibilityMaxAggregateInputType
  }

  export type ExamVisibilityGroupByOutputType = {
    id: number
    exam_visibility_name: string
    desc: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamVisibilityCountAggregateOutputType | null
    _avg: ExamVisibilityAvgAggregateOutputType | null
    _sum: ExamVisibilitySumAggregateOutputType | null
    _min: ExamVisibilityMinAggregateOutputType | null
    _max: ExamVisibilityMaxAggregateOutputType | null
  }

  type GetExamVisibilityGroupByPayload<T extends ExamVisibilityGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamVisibilityGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamVisibilityGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamVisibilityGroupByOutputType[P]>
            : GetScalarType<T[P], ExamVisibilityGroupByOutputType[P]>
        }
      >
    >


  export type ExamVisibilitySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_visibility_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examVisibility"]>



  export type ExamVisibilitySelectScalar = {
    id?: boolean
    exam_visibility_name?: boolean
    desc?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamVisibilityOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_visibility_name" | "desc" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examVisibility"]>

  export type $ExamVisibilityPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamVisibility"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_visibility_name: string
      desc: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examVisibility"]>
    composites: {}
  }

  type ExamVisibilityGetPayload<S extends boolean | null | undefined | ExamVisibilityDefaultArgs> = $Result.GetResult<Prisma.$ExamVisibilityPayload, S>

  type ExamVisibilityCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamVisibilityFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamVisibilityCountAggregateInputType | true
    }

  export interface ExamVisibilityDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamVisibility'], meta: { name: 'ExamVisibility' } }
    /**
     * Find zero or one ExamVisibility that matches the filter.
     * @param {ExamVisibilityFindUniqueArgs} args - Arguments to find a ExamVisibility
     * @example
     * // Get one ExamVisibility
     * const examVisibility = await prisma.examVisibility.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamVisibilityFindUniqueArgs>(args: SelectSubset<T, ExamVisibilityFindUniqueArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamVisibility that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamVisibilityFindUniqueOrThrowArgs} args - Arguments to find a ExamVisibility
     * @example
     * // Get one ExamVisibility
     * const examVisibility = await prisma.examVisibility.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamVisibilityFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamVisibilityFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamVisibility that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityFindFirstArgs} args - Arguments to find a ExamVisibility
     * @example
     * // Get one ExamVisibility
     * const examVisibility = await prisma.examVisibility.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamVisibilityFindFirstArgs>(args?: SelectSubset<T, ExamVisibilityFindFirstArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamVisibility that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityFindFirstOrThrowArgs} args - Arguments to find a ExamVisibility
     * @example
     * // Get one ExamVisibility
     * const examVisibility = await prisma.examVisibility.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamVisibilityFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamVisibilityFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamVisibilities that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamVisibilities
     * const examVisibilities = await prisma.examVisibility.findMany()
     * 
     * // Get first 10 ExamVisibilities
     * const examVisibilities = await prisma.examVisibility.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examVisibilityWithIdOnly = await prisma.examVisibility.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamVisibilityFindManyArgs>(args?: SelectSubset<T, ExamVisibilityFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamVisibility.
     * @param {ExamVisibilityCreateArgs} args - Arguments to create a ExamVisibility.
     * @example
     * // Create one ExamVisibility
     * const ExamVisibility = await prisma.examVisibility.create({
     *   data: {
     *     // ... data to create a ExamVisibility
     *   }
     * })
     * 
     */
    create<T extends ExamVisibilityCreateArgs>(args: SelectSubset<T, ExamVisibilityCreateArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamVisibilities.
     * @param {ExamVisibilityCreateManyArgs} args - Arguments to create many ExamVisibilities.
     * @example
     * // Create many ExamVisibilities
     * const examVisibility = await prisma.examVisibility.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamVisibilityCreateManyArgs>(args?: SelectSubset<T, ExamVisibilityCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamVisibility.
     * @param {ExamVisibilityDeleteArgs} args - Arguments to delete one ExamVisibility.
     * @example
     * // Delete one ExamVisibility
     * const ExamVisibility = await prisma.examVisibility.delete({
     *   where: {
     *     // ... filter to delete one ExamVisibility
     *   }
     * })
     * 
     */
    delete<T extends ExamVisibilityDeleteArgs>(args: SelectSubset<T, ExamVisibilityDeleteArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamVisibility.
     * @param {ExamVisibilityUpdateArgs} args - Arguments to update one ExamVisibility.
     * @example
     * // Update one ExamVisibility
     * const examVisibility = await prisma.examVisibility.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamVisibilityUpdateArgs>(args: SelectSubset<T, ExamVisibilityUpdateArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamVisibilities.
     * @param {ExamVisibilityDeleteManyArgs} args - Arguments to filter ExamVisibilities to delete.
     * @example
     * // Delete a few ExamVisibilities
     * const { count } = await prisma.examVisibility.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamVisibilityDeleteManyArgs>(args?: SelectSubset<T, ExamVisibilityDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamVisibilities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamVisibilities
     * const examVisibility = await prisma.examVisibility.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamVisibilityUpdateManyArgs>(args: SelectSubset<T, ExamVisibilityUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamVisibility.
     * @param {ExamVisibilityUpsertArgs} args - Arguments to update or create a ExamVisibility.
     * @example
     * // Update or create a ExamVisibility
     * const examVisibility = await prisma.examVisibility.upsert({
     *   create: {
     *     // ... data to create a ExamVisibility
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamVisibility we want to update
     *   }
     * })
     */
    upsert<T extends ExamVisibilityUpsertArgs>(args: SelectSubset<T, ExamVisibilityUpsertArgs<ExtArgs>>): Prisma__ExamVisibilityClient<$Result.GetResult<Prisma.$ExamVisibilityPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamVisibilities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityCountArgs} args - Arguments to filter ExamVisibilities to count.
     * @example
     * // Count the number of ExamVisibilities
     * const count = await prisma.examVisibility.count({
     *   where: {
     *     // ... the filter for the ExamVisibilities we want to count
     *   }
     * })
    **/
    count<T extends ExamVisibilityCountArgs>(
      args?: Subset<T, ExamVisibilityCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamVisibilityCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamVisibility.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamVisibilityAggregateArgs>(args: Subset<T, ExamVisibilityAggregateArgs>): Prisma.PrismaPromise<GetExamVisibilityAggregateType<T>>

    /**
     * Group by ExamVisibility.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamVisibilityGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamVisibilityGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamVisibilityGroupByArgs['orderBy'] }
        : { orderBy?: ExamVisibilityGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamVisibilityGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamVisibilityGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamVisibility model
   */
  readonly fields: ExamVisibilityFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamVisibility.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamVisibilityClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamVisibility model
   */
  interface ExamVisibilityFieldRefs {
    readonly id: FieldRef<"ExamVisibility", 'Int'>
    readonly exam_visibility_name: FieldRef<"ExamVisibility", 'String'>
    readonly desc: FieldRef<"ExamVisibility", 'String'>
    readonly created_by: FieldRef<"ExamVisibility", 'Int'>
    readonly created_at: FieldRef<"ExamVisibility", 'DateTime'>
    readonly updated_at: FieldRef<"ExamVisibility", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamVisibility", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamVisibility findUnique
   */
  export type ExamVisibilityFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter, which ExamVisibility to fetch.
     */
    where: ExamVisibilityWhereUniqueInput
  }

  /**
   * ExamVisibility findUniqueOrThrow
   */
  export type ExamVisibilityFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter, which ExamVisibility to fetch.
     */
    where: ExamVisibilityWhereUniqueInput
  }

  /**
   * ExamVisibility findFirst
   */
  export type ExamVisibilityFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter, which ExamVisibility to fetch.
     */
    where?: ExamVisibilityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamVisibilities to fetch.
     */
    orderBy?: ExamVisibilityOrderByWithRelationInput | ExamVisibilityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamVisibilities.
     */
    cursor?: ExamVisibilityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamVisibilities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamVisibilities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamVisibilities.
     */
    distinct?: ExamVisibilityScalarFieldEnum | ExamVisibilityScalarFieldEnum[]
  }

  /**
   * ExamVisibility findFirstOrThrow
   */
  export type ExamVisibilityFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter, which ExamVisibility to fetch.
     */
    where?: ExamVisibilityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamVisibilities to fetch.
     */
    orderBy?: ExamVisibilityOrderByWithRelationInput | ExamVisibilityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamVisibilities.
     */
    cursor?: ExamVisibilityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamVisibilities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamVisibilities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamVisibilities.
     */
    distinct?: ExamVisibilityScalarFieldEnum | ExamVisibilityScalarFieldEnum[]
  }

  /**
   * ExamVisibility findMany
   */
  export type ExamVisibilityFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter, which ExamVisibilities to fetch.
     */
    where?: ExamVisibilityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamVisibilities to fetch.
     */
    orderBy?: ExamVisibilityOrderByWithRelationInput | ExamVisibilityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamVisibilities.
     */
    cursor?: ExamVisibilityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamVisibilities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamVisibilities.
     */
    skip?: number
    distinct?: ExamVisibilityScalarFieldEnum | ExamVisibilityScalarFieldEnum[]
  }

  /**
   * ExamVisibility create
   */
  export type ExamVisibilityCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamVisibility.
     */
    data: XOR<ExamVisibilityCreateInput, ExamVisibilityUncheckedCreateInput>
  }

  /**
   * ExamVisibility createMany
   */
  export type ExamVisibilityCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamVisibilities.
     */
    data: ExamVisibilityCreateManyInput | ExamVisibilityCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamVisibility update
   */
  export type ExamVisibilityUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamVisibility.
     */
    data: XOR<ExamVisibilityUpdateInput, ExamVisibilityUncheckedUpdateInput>
    /**
     * Choose, which ExamVisibility to update.
     */
    where: ExamVisibilityWhereUniqueInput
  }

  /**
   * ExamVisibility updateMany
   */
  export type ExamVisibilityUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamVisibilities.
     */
    data: XOR<ExamVisibilityUpdateManyMutationInput, ExamVisibilityUncheckedUpdateManyInput>
    /**
     * Filter which ExamVisibilities to update
     */
    where?: ExamVisibilityWhereInput
    /**
     * Limit how many ExamVisibilities to update.
     */
    limit?: number
  }

  /**
   * ExamVisibility upsert
   */
  export type ExamVisibilityUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamVisibility to update in case it exists.
     */
    where: ExamVisibilityWhereUniqueInput
    /**
     * In case the ExamVisibility found by the `where` argument doesn't exist, create a new ExamVisibility with this data.
     */
    create: XOR<ExamVisibilityCreateInput, ExamVisibilityUncheckedCreateInput>
    /**
     * In case the ExamVisibility was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamVisibilityUpdateInput, ExamVisibilityUncheckedUpdateInput>
  }

  /**
   * ExamVisibility delete
   */
  export type ExamVisibilityDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
    /**
     * Filter which ExamVisibility to delete.
     */
    where: ExamVisibilityWhereUniqueInput
  }

  /**
   * ExamVisibility deleteMany
   */
  export type ExamVisibilityDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamVisibilities to delete
     */
    where?: ExamVisibilityWhereInput
    /**
     * Limit how many ExamVisibilities to delete.
     */
    limit?: number
  }

  /**
   * ExamVisibility without action
   */
  export type ExamVisibilityDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamVisibility
     */
    select?: ExamVisibilitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamVisibility
     */
    omit?: ExamVisibilityOmit<ExtArgs> | null
  }


  /**
   * Model Exam
   */

  export type AggregateExam = {
    _count: ExamCountAggregateOutputType | null
    _avg: ExamAvgAggregateOutputType | null
    _sum: ExamSumAggregateOutputType | null
    _min: ExamMinAggregateOutputType | null
    _max: ExamMaxAggregateOutputType | null
  }

  export type ExamAvgAggregateOutputType = {
    id: number | null
    class_id: number | null
    term_id: number | null
    subject_id: number | null
    exam_type: number | null
    exam_category: number | null
    exam_visibility: number | null
    max_time_allowed: number | null
    no_of_life: number | null
    exam_objective_max_score: number | null
    exam_theory_max_score: number | null
    objective_max_no_of_question: number | null
    theory_max_no_of_question: number | null
    exam_enabled: number | null
    allow_assessment_only_at_specified_time: number | null
    allow_submit_after_time_elapsed: number | null
    is_practise_exam: number | null
    exam_gift_id: number | null
    created_by: number | null
  }

  export type ExamSumAggregateOutputType = {
    id: number | null
    class_id: number | null
    term_id: number | null
    subject_id: number | null
    exam_type: number | null
    exam_category: number | null
    exam_visibility: number | null
    max_time_allowed: number | null
    no_of_life: number | null
    exam_objective_max_score: number | null
    exam_theory_max_score: number | null
    objective_max_no_of_question: number | null
    theory_max_no_of_question: number | null
    exam_enabled: number | null
    allow_assessment_only_at_specified_time: number | null
    allow_submit_after_time_elapsed: number | null
    is_practise_exam: number | null
    exam_gift_id: number | null
    created_by: number | null
  }

  export type ExamMinAggregateOutputType = {
    id: number | null
    class_id: number | null
    term_id: number | null
    subject_id: number | null
    desc: string | null
    exam_date: Date | null
    exam_type: number | null
    exam_category: number | null
    exam_visibility: number | null
    max_time_allowed: number | null
    no_of_life: number | null
    exam_objective_max_score: number | null
    exam_theory_max_score: number | null
    objective_max_no_of_question: number | null
    theory_max_no_of_question: number | null
    exam_enabled: number | null
    allow_assessment_only_at_specified_time: number | null
    allow_submit_after_time_elapsed: number | null
    is_practise_exam: number | null
    exam_gift_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamMaxAggregateOutputType = {
    id: number | null
    class_id: number | null
    term_id: number | null
    subject_id: number | null
    desc: string | null
    exam_date: Date | null
    exam_type: number | null
    exam_category: number | null
    exam_visibility: number | null
    max_time_allowed: number | null
    no_of_life: number | null
    exam_objective_max_score: number | null
    exam_theory_max_score: number | null
    objective_max_no_of_question: number | null
    theory_max_no_of_question: number | null
    exam_enabled: number | null
    allow_assessment_only_at_specified_time: number | null
    allow_submit_after_time_elapsed: number | null
    is_practise_exam: number | null
    exam_gift_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamCountAggregateOutputType = {
    id: number
    class_id: number
    term_id: number
    subject_id: number
    desc: number
    exam_date: number
    exam_type: number
    exam_category: number
    exam_visibility: number
    max_time_allowed: number
    no_of_life: number
    exam_objective_max_score: number
    exam_theory_max_score: number
    objective_max_no_of_question: number
    theory_max_no_of_question: number
    exam_enabled: number
    allow_assessment_only_at_specified_time: number
    allow_submit_after_time_elapsed: number
    is_practise_exam: number
    exam_gift_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamAvgAggregateInputType = {
    id?: true
    class_id?: true
    term_id?: true
    subject_id?: true
    exam_type?: true
    exam_category?: true
    exam_visibility?: true
    max_time_allowed?: true
    no_of_life?: true
    exam_objective_max_score?: true
    exam_theory_max_score?: true
    objective_max_no_of_question?: true
    theory_max_no_of_question?: true
    exam_enabled?: true
    allow_assessment_only_at_specified_time?: true
    allow_submit_after_time_elapsed?: true
    is_practise_exam?: true
    exam_gift_id?: true
    created_by?: true
  }

  export type ExamSumAggregateInputType = {
    id?: true
    class_id?: true
    term_id?: true
    subject_id?: true
    exam_type?: true
    exam_category?: true
    exam_visibility?: true
    max_time_allowed?: true
    no_of_life?: true
    exam_objective_max_score?: true
    exam_theory_max_score?: true
    objective_max_no_of_question?: true
    theory_max_no_of_question?: true
    exam_enabled?: true
    allow_assessment_only_at_specified_time?: true
    allow_submit_after_time_elapsed?: true
    is_practise_exam?: true
    exam_gift_id?: true
    created_by?: true
  }

  export type ExamMinAggregateInputType = {
    id?: true
    class_id?: true
    term_id?: true
    subject_id?: true
    desc?: true
    exam_date?: true
    exam_type?: true
    exam_category?: true
    exam_visibility?: true
    max_time_allowed?: true
    no_of_life?: true
    exam_objective_max_score?: true
    exam_theory_max_score?: true
    objective_max_no_of_question?: true
    theory_max_no_of_question?: true
    exam_enabled?: true
    allow_assessment_only_at_specified_time?: true
    allow_submit_after_time_elapsed?: true
    is_practise_exam?: true
    exam_gift_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamMaxAggregateInputType = {
    id?: true
    class_id?: true
    term_id?: true
    subject_id?: true
    desc?: true
    exam_date?: true
    exam_type?: true
    exam_category?: true
    exam_visibility?: true
    max_time_allowed?: true
    no_of_life?: true
    exam_objective_max_score?: true
    exam_theory_max_score?: true
    objective_max_no_of_question?: true
    theory_max_no_of_question?: true
    exam_enabled?: true
    allow_assessment_only_at_specified_time?: true
    allow_submit_after_time_elapsed?: true
    is_practise_exam?: true
    exam_gift_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamCountAggregateInputType = {
    id?: true
    class_id?: true
    term_id?: true
    subject_id?: true
    desc?: true
    exam_date?: true
    exam_type?: true
    exam_category?: true
    exam_visibility?: true
    max_time_allowed?: true
    no_of_life?: true
    exam_objective_max_score?: true
    exam_theory_max_score?: true
    objective_max_no_of_question?: true
    theory_max_no_of_question?: true
    exam_enabled?: true
    allow_assessment_only_at_specified_time?: true
    allow_submit_after_time_elapsed?: true
    is_practise_exam?: true
    exam_gift_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Exam to aggregate.
     */
    where?: ExamWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Exams to fetch.
     */
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Exams from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Exams.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Exams
    **/
    _count?: true | ExamCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamMaxAggregateInputType
  }

  export type GetExamAggregateType<T extends ExamAggregateArgs> = {
        [P in keyof T & keyof AggregateExam]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExam[P]>
      : GetScalarType<T[P], AggregateExam[P]>
  }




  export type ExamGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamWhereInput
    orderBy?: ExamOrderByWithAggregationInput | ExamOrderByWithAggregationInput[]
    by: ExamScalarFieldEnum[] | ExamScalarFieldEnum
    having?: ExamScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamCountAggregateInputType | true
    _avg?: ExamAvgAggregateInputType
    _sum?: ExamSumAggregateInputType
    _min?: ExamMinAggregateInputType
    _max?: ExamMaxAggregateInputType
  }

  export type ExamGroupByOutputType = {
    id: number
    class_id: number | null
    term_id: number | null
    subject_id: number
    desc: string | null
    exam_date: Date | null
    exam_type: number
    exam_category: number
    exam_visibility: number | null
    max_time_allowed: number
    no_of_life: number | null
    exam_objective_max_score: number | null
    exam_theory_max_score: number | null
    objective_max_no_of_question: number | null
    theory_max_no_of_question: number | null
    exam_enabled: number
    allow_assessment_only_at_specified_time: number | null
    allow_submit_after_time_elapsed: number
    is_practise_exam: number
    exam_gift_id: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamCountAggregateOutputType | null
    _avg: ExamAvgAggregateOutputType | null
    _sum: ExamSumAggregateOutputType | null
    _min: ExamMinAggregateOutputType | null
    _max: ExamMaxAggregateOutputType | null
  }

  type GetExamGroupByPayload<T extends ExamGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamGroupByOutputType[P]>
            : GetScalarType<T[P], ExamGroupByOutputType[P]>
        }
      >
    >


  export type ExamSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    class_id?: boolean
    term_id?: boolean
    subject_id?: boolean
    desc?: boolean
    exam_date?: boolean
    exam_type?: boolean
    exam_category?: boolean
    exam_visibility?: boolean
    max_time_allowed?: boolean
    no_of_life?: boolean
    exam_objective_max_score?: boolean
    exam_theory_max_score?: boolean
    objective_max_no_of_question?: boolean
    theory_max_no_of_question?: boolean
    exam_enabled?: boolean
    allow_assessment_only_at_specified_time?: boolean
    allow_submit_after_time_elapsed?: boolean
    is_practise_exam?: boolean
    exam_gift_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    examscoresetuplink?: boolean | Exam$examscoresetuplinkArgs<ExtArgs>
    term?: boolean | Exam$termArgs<ExtArgs>
    class?: boolean | Exam$classArgs<ExtArgs>
    subject?: boolean | Exam$subjectArgs<ExtArgs>
    examtype?: boolean | Exam$examtypeArgs<ExtArgs>
    examcategory?: boolean | Exam$examcategoryArgs<ExtArgs>
    _count?: boolean | ExamCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["exam"]>



  export type ExamSelectScalar = {
    id?: boolean
    class_id?: boolean
    term_id?: boolean
    subject_id?: boolean
    desc?: boolean
    exam_date?: boolean
    exam_type?: boolean
    exam_category?: boolean
    exam_visibility?: boolean
    max_time_allowed?: boolean
    no_of_life?: boolean
    exam_objective_max_score?: boolean
    exam_theory_max_score?: boolean
    objective_max_no_of_question?: boolean
    theory_max_no_of_question?: boolean
    exam_enabled?: boolean
    allow_assessment_only_at_specified_time?: boolean
    allow_submit_after_time_elapsed?: boolean
    is_practise_exam?: boolean
    exam_gift_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "class_id" | "term_id" | "subject_id" | "desc" | "exam_date" | "exam_type" | "exam_category" | "exam_visibility" | "max_time_allowed" | "no_of_life" | "exam_objective_max_score" | "exam_theory_max_score" | "objective_max_no_of_question" | "theory_max_no_of_question" | "exam_enabled" | "allow_assessment_only_at_specified_time" | "allow_submit_after_time_elapsed" | "is_practise_exam" | "exam_gift_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["exam"]>
  export type ExamInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    examscoresetuplink?: boolean | Exam$examscoresetuplinkArgs<ExtArgs>
    term?: boolean | Exam$termArgs<ExtArgs>
    class?: boolean | Exam$classArgs<ExtArgs>
    subject?: boolean | Exam$subjectArgs<ExtArgs>
    examtype?: boolean | Exam$examtypeArgs<ExtArgs>
    examcategory?: boolean | Exam$examcategoryArgs<ExtArgs>
    _count?: boolean | ExamCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $ExamPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Exam"
    objects: {
      examscoresetuplink: Prisma.$ExamScoreSetupLinkPayload<ExtArgs>[]
      term: Prisma.$TermPayload<ExtArgs> | null
      class: Prisma.$ClassTemplatePayload<ExtArgs> | null
      subject: Prisma.$SchoolSubjectPayload<ExtArgs> | null
      examtype: Prisma.$ExamTypePayload<ExtArgs> | null
      examcategory: Prisma.$ExamCategoryPayload<ExtArgs> | null
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      class_id: number | null
      term_id: number | null
      subject_id: number
      desc: string | null
      exam_date: Date | null
      exam_type: number
      exam_category: number
      exam_visibility: number | null
      max_time_allowed: number
      no_of_life: number | null
      exam_objective_max_score: number | null
      exam_theory_max_score: number | null
      objective_max_no_of_question: number | null
      theory_max_no_of_question: number | null
      exam_enabled: number
      allow_assessment_only_at_specified_time: number | null
      allow_submit_after_time_elapsed: number
      is_practise_exam: number
      exam_gift_id: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["exam"]>
    composites: {}
  }

  type ExamGetPayload<S extends boolean | null | undefined | ExamDefaultArgs> = $Result.GetResult<Prisma.$ExamPayload, S>

  type ExamCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamCountAggregateInputType | true
    }

  export interface ExamDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Exam'], meta: { name: 'Exam' } }
    /**
     * Find zero or one Exam that matches the filter.
     * @param {ExamFindUniqueArgs} args - Arguments to find a Exam
     * @example
     * // Get one Exam
     * const exam = await prisma.exam.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamFindUniqueArgs>(args: SelectSubset<T, ExamFindUniqueArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Exam that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamFindUniqueOrThrowArgs} args - Arguments to find a Exam
     * @example
     * // Get one Exam
     * const exam = await prisma.exam.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Exam that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamFindFirstArgs} args - Arguments to find a Exam
     * @example
     * // Get one Exam
     * const exam = await prisma.exam.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamFindFirstArgs>(args?: SelectSubset<T, ExamFindFirstArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Exam that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamFindFirstOrThrowArgs} args - Arguments to find a Exam
     * @example
     * // Get one Exam
     * const exam = await prisma.exam.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Exams that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Exams
     * const exams = await prisma.exam.findMany()
     * 
     * // Get first 10 Exams
     * const exams = await prisma.exam.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examWithIdOnly = await prisma.exam.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamFindManyArgs>(args?: SelectSubset<T, ExamFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Exam.
     * @param {ExamCreateArgs} args - Arguments to create a Exam.
     * @example
     * // Create one Exam
     * const Exam = await prisma.exam.create({
     *   data: {
     *     // ... data to create a Exam
     *   }
     * })
     * 
     */
    create<T extends ExamCreateArgs>(args: SelectSubset<T, ExamCreateArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Exams.
     * @param {ExamCreateManyArgs} args - Arguments to create many Exams.
     * @example
     * // Create many Exams
     * const exam = await prisma.exam.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamCreateManyArgs>(args?: SelectSubset<T, ExamCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Exam.
     * @param {ExamDeleteArgs} args - Arguments to delete one Exam.
     * @example
     * // Delete one Exam
     * const Exam = await prisma.exam.delete({
     *   where: {
     *     // ... filter to delete one Exam
     *   }
     * })
     * 
     */
    delete<T extends ExamDeleteArgs>(args: SelectSubset<T, ExamDeleteArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Exam.
     * @param {ExamUpdateArgs} args - Arguments to update one Exam.
     * @example
     * // Update one Exam
     * const exam = await prisma.exam.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamUpdateArgs>(args: SelectSubset<T, ExamUpdateArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Exams.
     * @param {ExamDeleteManyArgs} args - Arguments to filter Exams to delete.
     * @example
     * // Delete a few Exams
     * const { count } = await prisma.exam.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamDeleteManyArgs>(args?: SelectSubset<T, ExamDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Exams.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Exams
     * const exam = await prisma.exam.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamUpdateManyArgs>(args: SelectSubset<T, ExamUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Exam.
     * @param {ExamUpsertArgs} args - Arguments to update or create a Exam.
     * @example
     * // Update or create a Exam
     * const exam = await prisma.exam.upsert({
     *   create: {
     *     // ... data to create a Exam
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Exam we want to update
     *   }
     * })
     */
    upsert<T extends ExamUpsertArgs>(args: SelectSubset<T, ExamUpsertArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Exams.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamCountArgs} args - Arguments to filter Exams to count.
     * @example
     * // Count the number of Exams
     * const count = await prisma.exam.count({
     *   where: {
     *     // ... the filter for the Exams we want to count
     *   }
     * })
    **/
    count<T extends ExamCountArgs>(
      args?: Subset<T, ExamCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Exam.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamAggregateArgs>(args: Subset<T, ExamAggregateArgs>): Prisma.PrismaPromise<GetExamAggregateType<T>>

    /**
     * Group by Exam.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamGroupByArgs['orderBy'] }
        : { orderBy?: ExamGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Exam model
   */
  readonly fields: ExamFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Exam.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    examscoresetuplink<T extends Exam$examscoresetuplinkArgs<ExtArgs> = {}>(args?: Subset<T, Exam$examscoresetuplinkArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    term<T extends Exam$termArgs<ExtArgs> = {}>(args?: Subset<T, Exam$termArgs<ExtArgs>>): Prisma__TermClient<$Result.GetResult<Prisma.$TermPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    class<T extends Exam$classArgs<ExtArgs> = {}>(args?: Subset<T, Exam$classArgs<ExtArgs>>): Prisma__ClassTemplateClient<$Result.GetResult<Prisma.$ClassTemplatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    subject<T extends Exam$subjectArgs<ExtArgs> = {}>(args?: Subset<T, Exam$subjectArgs<ExtArgs>>): Prisma__SchoolSubjectClient<$Result.GetResult<Prisma.$SchoolSubjectPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    examtype<T extends Exam$examtypeArgs<ExtArgs> = {}>(args?: Subset<T, Exam$examtypeArgs<ExtArgs>>): Prisma__ExamTypeClient<$Result.GetResult<Prisma.$ExamTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    examcategory<T extends Exam$examcategoryArgs<ExtArgs> = {}>(args?: Subset<T, Exam$examcategoryArgs<ExtArgs>>): Prisma__ExamCategoryClient<$Result.GetResult<Prisma.$ExamCategoryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Exam model
   */
  interface ExamFieldRefs {
    readonly id: FieldRef<"Exam", 'Int'>
    readonly class_id: FieldRef<"Exam", 'Int'>
    readonly term_id: FieldRef<"Exam", 'Int'>
    readonly subject_id: FieldRef<"Exam", 'Int'>
    readonly desc: FieldRef<"Exam", 'String'>
    readonly exam_date: FieldRef<"Exam", 'DateTime'>
    readonly exam_type: FieldRef<"Exam", 'Int'>
    readonly exam_category: FieldRef<"Exam", 'Int'>
    readonly exam_visibility: FieldRef<"Exam", 'Int'>
    readonly max_time_allowed: FieldRef<"Exam", 'Int'>
    readonly no_of_life: FieldRef<"Exam", 'Int'>
    readonly exam_objective_max_score: FieldRef<"Exam", 'Int'>
    readonly exam_theory_max_score: FieldRef<"Exam", 'Int'>
    readonly objective_max_no_of_question: FieldRef<"Exam", 'Int'>
    readonly theory_max_no_of_question: FieldRef<"Exam", 'Int'>
    readonly exam_enabled: FieldRef<"Exam", 'Int'>
    readonly allow_assessment_only_at_specified_time: FieldRef<"Exam", 'Int'>
    readonly allow_submit_after_time_elapsed: FieldRef<"Exam", 'Int'>
    readonly is_practise_exam: FieldRef<"Exam", 'Int'>
    readonly exam_gift_id: FieldRef<"Exam", 'Int'>
    readonly created_by: FieldRef<"Exam", 'Int'>
    readonly created_at: FieldRef<"Exam", 'DateTime'>
    readonly updated_at: FieldRef<"Exam", 'DateTime'>
    readonly deleted_at: FieldRef<"Exam", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Exam findUnique
   */
  export type ExamFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter, which Exam to fetch.
     */
    where: ExamWhereUniqueInput
  }

  /**
   * Exam findUniqueOrThrow
   */
  export type ExamFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter, which Exam to fetch.
     */
    where: ExamWhereUniqueInput
  }

  /**
   * Exam findFirst
   */
  export type ExamFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter, which Exam to fetch.
     */
    where?: ExamWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Exams to fetch.
     */
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Exams.
     */
    cursor?: ExamWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Exams from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Exams.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Exams.
     */
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * Exam findFirstOrThrow
   */
  export type ExamFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter, which Exam to fetch.
     */
    where?: ExamWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Exams to fetch.
     */
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Exams.
     */
    cursor?: ExamWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Exams from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Exams.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Exams.
     */
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * Exam findMany
   */
  export type ExamFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter, which Exams to fetch.
     */
    where?: ExamWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Exams to fetch.
     */
    orderBy?: ExamOrderByWithRelationInput | ExamOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Exams.
     */
    cursor?: ExamWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Exams from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Exams.
     */
    skip?: number
    distinct?: ExamScalarFieldEnum | ExamScalarFieldEnum[]
  }

  /**
   * Exam create
   */
  export type ExamCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * The data needed to create a Exam.
     */
    data: XOR<ExamCreateInput, ExamUncheckedCreateInput>
  }

  /**
   * Exam createMany
   */
  export type ExamCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Exams.
     */
    data: ExamCreateManyInput | ExamCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Exam update
   */
  export type ExamUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * The data needed to update a Exam.
     */
    data: XOR<ExamUpdateInput, ExamUncheckedUpdateInput>
    /**
     * Choose, which Exam to update.
     */
    where: ExamWhereUniqueInput
  }

  /**
   * Exam updateMany
   */
  export type ExamUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Exams.
     */
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyInput>
    /**
     * Filter which Exams to update
     */
    where?: ExamWhereInput
    /**
     * Limit how many Exams to update.
     */
    limit?: number
  }

  /**
   * Exam upsert
   */
  export type ExamUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * The filter to search for the Exam to update in case it exists.
     */
    where: ExamWhereUniqueInput
    /**
     * In case the Exam found by the `where` argument doesn't exist, create a new Exam with this data.
     */
    create: XOR<ExamCreateInput, ExamUncheckedCreateInput>
    /**
     * In case the Exam was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamUpdateInput, ExamUncheckedUpdateInput>
  }

  /**
   * Exam delete
   */
  export type ExamDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
    /**
     * Filter which Exam to delete.
     */
    where: ExamWhereUniqueInput
  }

  /**
   * Exam deleteMany
   */
  export type ExamDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Exams to delete
     */
    where?: ExamWhereInput
    /**
     * Limit how many Exams to delete.
     */
    limit?: number
  }

  /**
   * Exam.examscoresetuplink
   */
  export type Exam$examscoresetuplinkArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    where?: ExamScoreSetupLinkWhereInput
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    take?: number
    skip?: number
    distinct?: ExamScoreSetupLinkScalarFieldEnum | ExamScoreSetupLinkScalarFieldEnum[]
  }

  /**
   * Exam.term
   */
  export type Exam$termArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Term
     */
    select?: TermSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Term
     */
    omit?: TermOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: TermInclude<ExtArgs> | null
    where?: TermWhereInput
  }

  /**
   * Exam.class
   */
  export type Exam$classArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ClassTemplate
     */
    select?: ClassTemplateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ClassTemplate
     */
    omit?: ClassTemplateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ClassTemplateInclude<ExtArgs> | null
    where?: ClassTemplateWhereInput
  }

  /**
   * Exam.subject
   */
  export type Exam$subjectArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolSubject
     */
    select?: SchoolSubjectSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolSubject
     */
    omit?: SchoolSubjectOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SchoolSubjectInclude<ExtArgs> | null
    where?: SchoolSubjectWhereInput
  }

  /**
   * Exam.examtype
   */
  export type Exam$examtypeArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamType
     */
    select?: ExamTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamType
     */
    omit?: ExamTypeOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamTypeInclude<ExtArgs> | null
    where?: ExamTypeWhereInput
  }

  /**
   * Exam.examcategory
   */
  export type Exam$examcategoryArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamCategory
     */
    select?: ExamCategorySelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamCategory
     */
    omit?: ExamCategoryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamCategoryInclude<ExtArgs> | null
    where?: ExamCategoryWhereInput
  }

  /**
   * Exam without action
   */
  export type ExamDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Exam
     */
    select?: ExamSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Exam
     */
    omit?: ExamOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamInclude<ExtArgs> | null
  }


  /**
   * Model ExamQuestion
   */

  export type AggregateExamQuestion = {
    _count: ExamQuestionCountAggregateOutputType | null
    _avg: ExamQuestionAvgAggregateOutputType | null
    _sum: ExamQuestionSumAggregateOutputType | null
    _min: ExamQuestionMinAggregateOutputType | null
    _max: ExamQuestionMaxAggregateOutputType | null
  }

  export type ExamQuestionAvgAggregateOutputType = {
    id: number | null
    exam_id: number | null
    question_id: number | null
    score_attached: number | null
    created_by: number | null
  }

  export type ExamQuestionSumAggregateOutputType = {
    id: number | null
    exam_id: number | null
    question_id: number | null
    score_attached: number | null
    created_by: number | null
  }

  export type ExamQuestionMinAggregateOutputType = {
    id: number | null
    exam_id: number | null
    question_id: number | null
    score_attached: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionMaxAggregateOutputType = {
    id: number | null
    exam_id: number | null
    question_id: number | null
    score_attached: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionCountAggregateOutputType = {
    id: number
    exam_id: number
    question_id: number
    score_attached: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamQuestionAvgAggregateInputType = {
    id?: true
    exam_id?: true
    question_id?: true
    score_attached?: true
    created_by?: true
  }

  export type ExamQuestionSumAggregateInputType = {
    id?: true
    exam_id?: true
    question_id?: true
    score_attached?: true
    created_by?: true
  }

  export type ExamQuestionMinAggregateInputType = {
    id?: true
    exam_id?: true
    question_id?: true
    score_attached?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionMaxAggregateInputType = {
    id?: true
    exam_id?: true
    question_id?: true
    score_attached?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionCountAggregateInputType = {
    id?: true
    exam_id?: true
    question_id?: true
    score_attached?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamQuestionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestion to aggregate.
     */
    where?: ExamQuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestions to fetch.
     */
    orderBy?: ExamQuestionOrderByWithRelationInput | ExamQuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamQuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamQuestions
    **/
    _count?: true | ExamQuestionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamQuestionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamQuestionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamQuestionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamQuestionMaxAggregateInputType
  }

  export type GetExamQuestionAggregateType<T extends ExamQuestionAggregateArgs> = {
        [P in keyof T & keyof AggregateExamQuestion]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamQuestion[P]>
      : GetScalarType<T[P], AggregateExamQuestion[P]>
  }




  export type ExamQuestionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamQuestionWhereInput
    orderBy?: ExamQuestionOrderByWithAggregationInput | ExamQuestionOrderByWithAggregationInput[]
    by: ExamQuestionScalarFieldEnum[] | ExamQuestionScalarFieldEnum
    having?: ExamQuestionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamQuestionCountAggregateInputType | true
    _avg?: ExamQuestionAvgAggregateInputType
    _sum?: ExamQuestionSumAggregateInputType
    _min?: ExamQuestionMinAggregateInputType
    _max?: ExamQuestionMaxAggregateInputType
  }

  export type ExamQuestionGroupByOutputType = {
    id: number
    exam_id: number
    question_id: number
    score_attached: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamQuestionCountAggregateOutputType | null
    _avg: ExamQuestionAvgAggregateOutputType | null
    _sum: ExamQuestionSumAggregateOutputType | null
    _min: ExamQuestionMinAggregateOutputType | null
    _max: ExamQuestionMaxAggregateOutputType | null
  }

  type GetExamQuestionGroupByPayload<T extends ExamQuestionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamQuestionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamQuestionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamQuestionGroupByOutputType[P]>
            : GetScalarType<T[P], ExamQuestionGroupByOutputType[P]>
        }
      >
    >


  export type ExamQuestionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_id?: boolean
    question_id?: boolean
    score_attached?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examQuestion"]>



  export type ExamQuestionSelectScalar = {
    id?: boolean
    exam_id?: boolean
    question_id?: boolean
    score_attached?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamQuestionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_id" | "question_id" | "score_attached" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examQuestion"]>

  export type $ExamQuestionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamQuestion"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_id: number
      question_id: number
      score_attached: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examQuestion"]>
    composites: {}
  }

  type ExamQuestionGetPayload<S extends boolean | null | undefined | ExamQuestionDefaultArgs> = $Result.GetResult<Prisma.$ExamQuestionPayload, S>

  type ExamQuestionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamQuestionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamQuestionCountAggregateInputType | true
    }

  export interface ExamQuestionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamQuestion'], meta: { name: 'ExamQuestion' } }
    /**
     * Find zero or one ExamQuestion that matches the filter.
     * @param {ExamQuestionFindUniqueArgs} args - Arguments to find a ExamQuestion
     * @example
     * // Get one ExamQuestion
     * const examQuestion = await prisma.examQuestion.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamQuestionFindUniqueArgs>(args: SelectSubset<T, ExamQuestionFindUniqueArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamQuestion that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamQuestionFindUniqueOrThrowArgs} args - Arguments to find a ExamQuestion
     * @example
     * // Get one ExamQuestion
     * const examQuestion = await prisma.examQuestion.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamQuestionFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamQuestionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestion that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionFindFirstArgs} args - Arguments to find a ExamQuestion
     * @example
     * // Get one ExamQuestion
     * const examQuestion = await prisma.examQuestion.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamQuestionFindFirstArgs>(args?: SelectSubset<T, ExamQuestionFindFirstArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestion that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionFindFirstOrThrowArgs} args - Arguments to find a ExamQuestion
     * @example
     * // Get one ExamQuestion
     * const examQuestion = await prisma.examQuestion.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamQuestionFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamQuestionFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamQuestions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamQuestions
     * const examQuestions = await prisma.examQuestion.findMany()
     * 
     * // Get first 10 ExamQuestions
     * const examQuestions = await prisma.examQuestion.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examQuestionWithIdOnly = await prisma.examQuestion.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamQuestionFindManyArgs>(args?: SelectSubset<T, ExamQuestionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamQuestion.
     * @param {ExamQuestionCreateArgs} args - Arguments to create a ExamQuestion.
     * @example
     * // Create one ExamQuestion
     * const ExamQuestion = await prisma.examQuestion.create({
     *   data: {
     *     // ... data to create a ExamQuestion
     *   }
     * })
     * 
     */
    create<T extends ExamQuestionCreateArgs>(args: SelectSubset<T, ExamQuestionCreateArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamQuestions.
     * @param {ExamQuestionCreateManyArgs} args - Arguments to create many ExamQuestions.
     * @example
     * // Create many ExamQuestions
     * const examQuestion = await prisma.examQuestion.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamQuestionCreateManyArgs>(args?: SelectSubset<T, ExamQuestionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamQuestion.
     * @param {ExamQuestionDeleteArgs} args - Arguments to delete one ExamQuestion.
     * @example
     * // Delete one ExamQuestion
     * const ExamQuestion = await prisma.examQuestion.delete({
     *   where: {
     *     // ... filter to delete one ExamQuestion
     *   }
     * })
     * 
     */
    delete<T extends ExamQuestionDeleteArgs>(args: SelectSubset<T, ExamQuestionDeleteArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamQuestion.
     * @param {ExamQuestionUpdateArgs} args - Arguments to update one ExamQuestion.
     * @example
     * // Update one ExamQuestion
     * const examQuestion = await prisma.examQuestion.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamQuestionUpdateArgs>(args: SelectSubset<T, ExamQuestionUpdateArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamQuestions.
     * @param {ExamQuestionDeleteManyArgs} args - Arguments to filter ExamQuestions to delete.
     * @example
     * // Delete a few ExamQuestions
     * const { count } = await prisma.examQuestion.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamQuestionDeleteManyArgs>(args?: SelectSubset<T, ExamQuestionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamQuestions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamQuestions
     * const examQuestion = await prisma.examQuestion.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamQuestionUpdateManyArgs>(args: SelectSubset<T, ExamQuestionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamQuestion.
     * @param {ExamQuestionUpsertArgs} args - Arguments to update or create a ExamQuestion.
     * @example
     * // Update or create a ExamQuestion
     * const examQuestion = await prisma.examQuestion.upsert({
     *   create: {
     *     // ... data to create a ExamQuestion
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamQuestion we want to update
     *   }
     * })
     */
    upsert<T extends ExamQuestionUpsertArgs>(args: SelectSubset<T, ExamQuestionUpsertArgs<ExtArgs>>): Prisma__ExamQuestionClient<$Result.GetResult<Prisma.$ExamQuestionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamQuestions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionCountArgs} args - Arguments to filter ExamQuestions to count.
     * @example
     * // Count the number of ExamQuestions
     * const count = await prisma.examQuestion.count({
     *   where: {
     *     // ... the filter for the ExamQuestions we want to count
     *   }
     * })
    **/
    count<T extends ExamQuestionCountArgs>(
      args?: Subset<T, ExamQuestionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamQuestionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamQuestion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamQuestionAggregateArgs>(args: Subset<T, ExamQuestionAggregateArgs>): Prisma.PrismaPromise<GetExamQuestionAggregateType<T>>

    /**
     * Group by ExamQuestion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamQuestionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamQuestionGroupByArgs['orderBy'] }
        : { orderBy?: ExamQuestionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamQuestionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamQuestionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamQuestion model
   */
  readonly fields: ExamQuestionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamQuestion.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamQuestionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamQuestion model
   */
  interface ExamQuestionFieldRefs {
    readonly id: FieldRef<"ExamQuestion", 'Int'>
    readonly exam_id: FieldRef<"ExamQuestion", 'Int'>
    readonly question_id: FieldRef<"ExamQuestion", 'Int'>
    readonly score_attached: FieldRef<"ExamQuestion", 'Float'>
    readonly created_by: FieldRef<"ExamQuestion", 'Int'>
    readonly created_at: FieldRef<"ExamQuestion", 'DateTime'>
    readonly updated_at: FieldRef<"ExamQuestion", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamQuestion", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamQuestion findUnique
   */
  export type ExamQuestionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestion to fetch.
     */
    where: ExamQuestionWhereUniqueInput
  }

  /**
   * ExamQuestion findUniqueOrThrow
   */
  export type ExamQuestionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestion to fetch.
     */
    where: ExamQuestionWhereUniqueInput
  }

  /**
   * ExamQuestion findFirst
   */
  export type ExamQuestionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestion to fetch.
     */
    where?: ExamQuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestions to fetch.
     */
    orderBy?: ExamQuestionOrderByWithRelationInput | ExamQuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestions.
     */
    cursor?: ExamQuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestions.
     */
    distinct?: ExamQuestionScalarFieldEnum | ExamQuestionScalarFieldEnum[]
  }

  /**
   * ExamQuestion findFirstOrThrow
   */
  export type ExamQuestionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestion to fetch.
     */
    where?: ExamQuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestions to fetch.
     */
    orderBy?: ExamQuestionOrderByWithRelationInput | ExamQuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestions.
     */
    cursor?: ExamQuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestions.
     */
    distinct?: ExamQuestionScalarFieldEnum | ExamQuestionScalarFieldEnum[]
  }

  /**
   * ExamQuestion findMany
   */
  export type ExamQuestionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestions to fetch.
     */
    where?: ExamQuestionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestions to fetch.
     */
    orderBy?: ExamQuestionOrderByWithRelationInput | ExamQuestionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamQuestions.
     */
    cursor?: ExamQuestionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestions.
     */
    skip?: number
    distinct?: ExamQuestionScalarFieldEnum | ExamQuestionScalarFieldEnum[]
  }

  /**
   * ExamQuestion create
   */
  export type ExamQuestionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamQuestion.
     */
    data: XOR<ExamQuestionCreateInput, ExamQuestionUncheckedCreateInput>
  }

  /**
   * ExamQuestion createMany
   */
  export type ExamQuestionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamQuestions.
     */
    data: ExamQuestionCreateManyInput | ExamQuestionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamQuestion update
   */
  export type ExamQuestionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamQuestion.
     */
    data: XOR<ExamQuestionUpdateInput, ExamQuestionUncheckedUpdateInput>
    /**
     * Choose, which ExamQuestion to update.
     */
    where: ExamQuestionWhereUniqueInput
  }

  /**
   * ExamQuestion updateMany
   */
  export type ExamQuestionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamQuestions.
     */
    data: XOR<ExamQuestionUpdateManyMutationInput, ExamQuestionUncheckedUpdateManyInput>
    /**
     * Filter which ExamQuestions to update
     */
    where?: ExamQuestionWhereInput
    /**
     * Limit how many ExamQuestions to update.
     */
    limit?: number
  }

  /**
   * ExamQuestion upsert
   */
  export type ExamQuestionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamQuestion to update in case it exists.
     */
    where: ExamQuestionWhereUniqueInput
    /**
     * In case the ExamQuestion found by the `where` argument doesn't exist, create a new ExamQuestion with this data.
     */
    create: XOR<ExamQuestionCreateInput, ExamQuestionUncheckedCreateInput>
    /**
     * In case the ExamQuestion was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamQuestionUpdateInput, ExamQuestionUncheckedUpdateInput>
  }

  /**
   * ExamQuestion delete
   */
  export type ExamQuestionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
    /**
     * Filter which ExamQuestion to delete.
     */
    where: ExamQuestionWhereUniqueInput
  }

  /**
   * ExamQuestion deleteMany
   */
  export type ExamQuestionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestions to delete
     */
    where?: ExamQuestionWhereInput
    /**
     * Limit how many ExamQuestions to delete.
     */
    limit?: number
  }

  /**
   * ExamQuestion without action
   */
  export type ExamQuestionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestion
     */
    select?: ExamQuestionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestion
     */
    omit?: ExamQuestionOmit<ExtArgs> | null
  }


  /**
   * Model ExamScoreSetupLink
   */

  export type AggregateExamScoreSetupLink = {
    _count: ExamScoreSetupLinkCountAggregateOutputType | null
    _avg: ExamScoreSetupLinkAvgAggregateOutputType | null
    _sum: ExamScoreSetupLinkSumAggregateOutputType | null
    _min: ExamScoreSetupLinkMinAggregateOutputType | null
    _max: ExamScoreSetupLinkMaxAggregateOutputType | null
  }

  export type ExamScoreSetupLinkAvgAggregateOutputType = {
    id: number | null
    exam_id: number | null
    score_setup_id: number | null
    created_by: number | null
  }

  export type ExamScoreSetupLinkSumAggregateOutputType = {
    id: number | null
    exam_id: number | null
    score_setup_id: number | null
    created_by: number | null
  }

  export type ExamScoreSetupLinkMinAggregateOutputType = {
    id: number | null
    exam_id: number | null
    score_setup_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamScoreSetupLinkMaxAggregateOutputType = {
    id: number | null
    exam_id: number | null
    score_setup_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamScoreSetupLinkCountAggregateOutputType = {
    id: number
    exam_id: number
    score_setup_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamScoreSetupLinkAvgAggregateInputType = {
    id?: true
    exam_id?: true
    score_setup_id?: true
    created_by?: true
  }

  export type ExamScoreSetupLinkSumAggregateInputType = {
    id?: true
    exam_id?: true
    score_setup_id?: true
    created_by?: true
  }

  export type ExamScoreSetupLinkMinAggregateInputType = {
    id?: true
    exam_id?: true
    score_setup_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamScoreSetupLinkMaxAggregateInputType = {
    id?: true
    exam_id?: true
    score_setup_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamScoreSetupLinkCountAggregateInputType = {
    id?: true
    exam_id?: true
    score_setup_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamScoreSetupLinkAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamScoreSetupLink to aggregate.
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamScoreSetupLinks to fetch.
     */
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamScoreSetupLinks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamScoreSetupLinks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamScoreSetupLinks
    **/
    _count?: true | ExamScoreSetupLinkCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamScoreSetupLinkAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamScoreSetupLinkSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamScoreSetupLinkMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamScoreSetupLinkMaxAggregateInputType
  }

  export type GetExamScoreSetupLinkAggregateType<T extends ExamScoreSetupLinkAggregateArgs> = {
        [P in keyof T & keyof AggregateExamScoreSetupLink]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamScoreSetupLink[P]>
      : GetScalarType<T[P], AggregateExamScoreSetupLink[P]>
  }




  export type ExamScoreSetupLinkGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamScoreSetupLinkWhereInput
    orderBy?: ExamScoreSetupLinkOrderByWithAggregationInput | ExamScoreSetupLinkOrderByWithAggregationInput[]
    by: ExamScoreSetupLinkScalarFieldEnum[] | ExamScoreSetupLinkScalarFieldEnum
    having?: ExamScoreSetupLinkScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamScoreSetupLinkCountAggregateInputType | true
    _avg?: ExamScoreSetupLinkAvgAggregateInputType
    _sum?: ExamScoreSetupLinkSumAggregateInputType
    _min?: ExamScoreSetupLinkMinAggregateInputType
    _max?: ExamScoreSetupLinkMaxAggregateInputType
  }

  export type ExamScoreSetupLinkGroupByOutputType = {
    id: number
    exam_id: number
    score_setup_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamScoreSetupLinkCountAggregateOutputType | null
    _avg: ExamScoreSetupLinkAvgAggregateOutputType | null
    _sum: ExamScoreSetupLinkSumAggregateOutputType | null
    _min: ExamScoreSetupLinkMinAggregateOutputType | null
    _max: ExamScoreSetupLinkMaxAggregateOutputType | null
  }

  type GetExamScoreSetupLinkGroupByPayload<T extends ExamScoreSetupLinkGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamScoreSetupLinkGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamScoreSetupLinkGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamScoreSetupLinkGroupByOutputType[P]>
            : GetScalarType<T[P], ExamScoreSetupLinkGroupByOutputType[P]>
        }
      >
    >


  export type ExamScoreSetupLinkSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_id?: boolean
    score_setup_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    exam?: boolean | ExamDefaultArgs<ExtArgs>
    scoresetup?: boolean | SessionClassScoreSetupDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["examScoreSetupLink"]>



  export type ExamScoreSetupLinkSelectScalar = {
    id?: boolean
    exam_id?: boolean
    score_setup_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamScoreSetupLinkOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_id" | "score_setup_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examScoreSetupLink"]>
  export type ExamScoreSetupLinkInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    exam?: boolean | ExamDefaultArgs<ExtArgs>
    scoresetup?: boolean | SessionClassScoreSetupDefaultArgs<ExtArgs>
  }

  export type $ExamScoreSetupLinkPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamScoreSetupLink"
    objects: {
      exam: Prisma.$ExamPayload<ExtArgs>
      scoresetup: Prisma.$SessionClassScoreSetupPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_id: number
      score_setup_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examScoreSetupLink"]>
    composites: {}
  }

  type ExamScoreSetupLinkGetPayload<S extends boolean | null | undefined | ExamScoreSetupLinkDefaultArgs> = $Result.GetResult<Prisma.$ExamScoreSetupLinkPayload, S>

  type ExamScoreSetupLinkCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamScoreSetupLinkFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamScoreSetupLinkCountAggregateInputType | true
    }

  export interface ExamScoreSetupLinkDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamScoreSetupLink'], meta: { name: 'ExamScoreSetupLink' } }
    /**
     * Find zero or one ExamScoreSetupLink that matches the filter.
     * @param {ExamScoreSetupLinkFindUniqueArgs} args - Arguments to find a ExamScoreSetupLink
     * @example
     * // Get one ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamScoreSetupLinkFindUniqueArgs>(args: SelectSubset<T, ExamScoreSetupLinkFindUniqueArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamScoreSetupLink that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamScoreSetupLinkFindUniqueOrThrowArgs} args - Arguments to find a ExamScoreSetupLink
     * @example
     * // Get one ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamScoreSetupLinkFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamScoreSetupLinkFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamScoreSetupLink that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkFindFirstArgs} args - Arguments to find a ExamScoreSetupLink
     * @example
     * // Get one ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamScoreSetupLinkFindFirstArgs>(args?: SelectSubset<T, ExamScoreSetupLinkFindFirstArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamScoreSetupLink that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkFindFirstOrThrowArgs} args - Arguments to find a ExamScoreSetupLink
     * @example
     * // Get one ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamScoreSetupLinkFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamScoreSetupLinkFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamScoreSetupLinks that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamScoreSetupLinks
     * const examScoreSetupLinks = await prisma.examScoreSetupLink.findMany()
     * 
     * // Get first 10 ExamScoreSetupLinks
     * const examScoreSetupLinks = await prisma.examScoreSetupLink.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examScoreSetupLinkWithIdOnly = await prisma.examScoreSetupLink.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamScoreSetupLinkFindManyArgs>(args?: SelectSubset<T, ExamScoreSetupLinkFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamScoreSetupLink.
     * @param {ExamScoreSetupLinkCreateArgs} args - Arguments to create a ExamScoreSetupLink.
     * @example
     * // Create one ExamScoreSetupLink
     * const ExamScoreSetupLink = await prisma.examScoreSetupLink.create({
     *   data: {
     *     // ... data to create a ExamScoreSetupLink
     *   }
     * })
     * 
     */
    create<T extends ExamScoreSetupLinkCreateArgs>(args: SelectSubset<T, ExamScoreSetupLinkCreateArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamScoreSetupLinks.
     * @param {ExamScoreSetupLinkCreateManyArgs} args - Arguments to create many ExamScoreSetupLinks.
     * @example
     * // Create many ExamScoreSetupLinks
     * const examScoreSetupLink = await prisma.examScoreSetupLink.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamScoreSetupLinkCreateManyArgs>(args?: SelectSubset<T, ExamScoreSetupLinkCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamScoreSetupLink.
     * @param {ExamScoreSetupLinkDeleteArgs} args - Arguments to delete one ExamScoreSetupLink.
     * @example
     * // Delete one ExamScoreSetupLink
     * const ExamScoreSetupLink = await prisma.examScoreSetupLink.delete({
     *   where: {
     *     // ... filter to delete one ExamScoreSetupLink
     *   }
     * })
     * 
     */
    delete<T extends ExamScoreSetupLinkDeleteArgs>(args: SelectSubset<T, ExamScoreSetupLinkDeleteArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamScoreSetupLink.
     * @param {ExamScoreSetupLinkUpdateArgs} args - Arguments to update one ExamScoreSetupLink.
     * @example
     * // Update one ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamScoreSetupLinkUpdateArgs>(args: SelectSubset<T, ExamScoreSetupLinkUpdateArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamScoreSetupLinks.
     * @param {ExamScoreSetupLinkDeleteManyArgs} args - Arguments to filter ExamScoreSetupLinks to delete.
     * @example
     * // Delete a few ExamScoreSetupLinks
     * const { count } = await prisma.examScoreSetupLink.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamScoreSetupLinkDeleteManyArgs>(args?: SelectSubset<T, ExamScoreSetupLinkDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamScoreSetupLinks.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamScoreSetupLinks
     * const examScoreSetupLink = await prisma.examScoreSetupLink.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamScoreSetupLinkUpdateManyArgs>(args: SelectSubset<T, ExamScoreSetupLinkUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamScoreSetupLink.
     * @param {ExamScoreSetupLinkUpsertArgs} args - Arguments to update or create a ExamScoreSetupLink.
     * @example
     * // Update or create a ExamScoreSetupLink
     * const examScoreSetupLink = await prisma.examScoreSetupLink.upsert({
     *   create: {
     *     // ... data to create a ExamScoreSetupLink
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamScoreSetupLink we want to update
     *   }
     * })
     */
    upsert<T extends ExamScoreSetupLinkUpsertArgs>(args: SelectSubset<T, ExamScoreSetupLinkUpsertArgs<ExtArgs>>): Prisma__ExamScoreSetupLinkClient<$Result.GetResult<Prisma.$ExamScoreSetupLinkPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamScoreSetupLinks.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkCountArgs} args - Arguments to filter ExamScoreSetupLinks to count.
     * @example
     * // Count the number of ExamScoreSetupLinks
     * const count = await prisma.examScoreSetupLink.count({
     *   where: {
     *     // ... the filter for the ExamScoreSetupLinks we want to count
     *   }
     * })
    **/
    count<T extends ExamScoreSetupLinkCountArgs>(
      args?: Subset<T, ExamScoreSetupLinkCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamScoreSetupLinkCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamScoreSetupLink.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamScoreSetupLinkAggregateArgs>(args: Subset<T, ExamScoreSetupLinkAggregateArgs>): Prisma.PrismaPromise<GetExamScoreSetupLinkAggregateType<T>>

    /**
     * Group by ExamScoreSetupLink.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamScoreSetupLinkGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamScoreSetupLinkGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamScoreSetupLinkGroupByArgs['orderBy'] }
        : { orderBy?: ExamScoreSetupLinkGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamScoreSetupLinkGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamScoreSetupLinkGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamScoreSetupLink model
   */
  readonly fields: ExamScoreSetupLinkFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamScoreSetupLink.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamScoreSetupLinkClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    exam<T extends ExamDefaultArgs<ExtArgs> = {}>(args?: Subset<T, ExamDefaultArgs<ExtArgs>>): Prisma__ExamClient<$Result.GetResult<Prisma.$ExamPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    scoresetup<T extends SessionClassScoreSetupDefaultArgs<ExtArgs> = {}>(args?: Subset<T, SessionClassScoreSetupDefaultArgs<ExtArgs>>): Prisma__SessionClassScoreSetupClient<$Result.GetResult<Prisma.$SessionClassScoreSetupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamScoreSetupLink model
   */
  interface ExamScoreSetupLinkFieldRefs {
    readonly id: FieldRef<"ExamScoreSetupLink", 'Int'>
    readonly exam_id: FieldRef<"ExamScoreSetupLink", 'Int'>
    readonly score_setup_id: FieldRef<"ExamScoreSetupLink", 'Int'>
    readonly created_by: FieldRef<"ExamScoreSetupLink", 'Int'>
    readonly created_at: FieldRef<"ExamScoreSetupLink", 'DateTime'>
    readonly updated_at: FieldRef<"ExamScoreSetupLink", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamScoreSetupLink", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamScoreSetupLink findUnique
   */
  export type ExamScoreSetupLinkFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter, which ExamScoreSetupLink to fetch.
     */
    where: ExamScoreSetupLinkWhereUniqueInput
  }

  /**
   * ExamScoreSetupLink findUniqueOrThrow
   */
  export type ExamScoreSetupLinkFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter, which ExamScoreSetupLink to fetch.
     */
    where: ExamScoreSetupLinkWhereUniqueInput
  }

  /**
   * ExamScoreSetupLink findFirst
   */
  export type ExamScoreSetupLinkFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter, which ExamScoreSetupLink to fetch.
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamScoreSetupLinks to fetch.
     */
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamScoreSetupLinks.
     */
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamScoreSetupLinks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamScoreSetupLinks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamScoreSetupLinks.
     */
    distinct?: ExamScoreSetupLinkScalarFieldEnum | ExamScoreSetupLinkScalarFieldEnum[]
  }

  /**
   * ExamScoreSetupLink findFirstOrThrow
   */
  export type ExamScoreSetupLinkFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter, which ExamScoreSetupLink to fetch.
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamScoreSetupLinks to fetch.
     */
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamScoreSetupLinks.
     */
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamScoreSetupLinks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamScoreSetupLinks.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamScoreSetupLinks.
     */
    distinct?: ExamScoreSetupLinkScalarFieldEnum | ExamScoreSetupLinkScalarFieldEnum[]
  }

  /**
   * ExamScoreSetupLink findMany
   */
  export type ExamScoreSetupLinkFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter, which ExamScoreSetupLinks to fetch.
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamScoreSetupLinks to fetch.
     */
    orderBy?: ExamScoreSetupLinkOrderByWithRelationInput | ExamScoreSetupLinkOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamScoreSetupLinks.
     */
    cursor?: ExamScoreSetupLinkWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamScoreSetupLinks from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamScoreSetupLinks.
     */
    skip?: number
    distinct?: ExamScoreSetupLinkScalarFieldEnum | ExamScoreSetupLinkScalarFieldEnum[]
  }

  /**
   * ExamScoreSetupLink create
   */
  export type ExamScoreSetupLinkCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * The data needed to create a ExamScoreSetupLink.
     */
    data: XOR<ExamScoreSetupLinkCreateInput, ExamScoreSetupLinkUncheckedCreateInput>
  }

  /**
   * ExamScoreSetupLink createMany
   */
  export type ExamScoreSetupLinkCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamScoreSetupLinks.
     */
    data: ExamScoreSetupLinkCreateManyInput | ExamScoreSetupLinkCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamScoreSetupLink update
   */
  export type ExamScoreSetupLinkUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * The data needed to update a ExamScoreSetupLink.
     */
    data: XOR<ExamScoreSetupLinkUpdateInput, ExamScoreSetupLinkUncheckedUpdateInput>
    /**
     * Choose, which ExamScoreSetupLink to update.
     */
    where: ExamScoreSetupLinkWhereUniqueInput
  }

  /**
   * ExamScoreSetupLink updateMany
   */
  export type ExamScoreSetupLinkUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamScoreSetupLinks.
     */
    data: XOR<ExamScoreSetupLinkUpdateManyMutationInput, ExamScoreSetupLinkUncheckedUpdateManyInput>
    /**
     * Filter which ExamScoreSetupLinks to update
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * Limit how many ExamScoreSetupLinks to update.
     */
    limit?: number
  }

  /**
   * ExamScoreSetupLink upsert
   */
  export type ExamScoreSetupLinkUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * The filter to search for the ExamScoreSetupLink to update in case it exists.
     */
    where: ExamScoreSetupLinkWhereUniqueInput
    /**
     * In case the ExamScoreSetupLink found by the `where` argument doesn't exist, create a new ExamScoreSetupLink with this data.
     */
    create: XOR<ExamScoreSetupLinkCreateInput, ExamScoreSetupLinkUncheckedCreateInput>
    /**
     * In case the ExamScoreSetupLink was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamScoreSetupLinkUpdateInput, ExamScoreSetupLinkUncheckedUpdateInput>
  }

  /**
   * ExamScoreSetupLink delete
   */
  export type ExamScoreSetupLinkDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
    /**
     * Filter which ExamScoreSetupLink to delete.
     */
    where: ExamScoreSetupLinkWhereUniqueInput
  }

  /**
   * ExamScoreSetupLink deleteMany
   */
  export type ExamScoreSetupLinkDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamScoreSetupLinks to delete
     */
    where?: ExamScoreSetupLinkWhereInput
    /**
     * Limit how many ExamScoreSetupLinks to delete.
     */
    limit?: number
  }

  /**
   * ExamScoreSetupLink without action
   */
  export type ExamScoreSetupLinkDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamScoreSetupLink
     */
    select?: ExamScoreSetupLinkSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamScoreSetupLink
     */
    omit?: ExamScoreSetupLinkOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: ExamScoreSetupLinkInclude<ExtArgs> | null
  }


  /**
   * Model ExamAttempt
   */

  export type AggregateExamAttempt = {
    _count: ExamAttemptCountAggregateOutputType | null
    _avg: ExamAttemptAvgAggregateOutputType | null
    _sum: ExamAttemptSumAggregateOutputType | null
    _min: ExamAttemptMinAggregateOutputType | null
    _max: ExamAttemptMaxAggregateOutputType | null
  }

  export type ExamAttemptAvgAggregateOutputType = {
    id: number | null
    exam_id: number | null
    person_id: number | null
    score_obtained: number | null
    created_by: number | null
  }

  export type ExamAttemptSumAggregateOutputType = {
    id: number | null
    exam_id: number | null
    person_id: number | null
    score_obtained: number | null
    created_by: number | null
  }

  export type ExamAttemptMinAggregateOutputType = {
    id: number | null
    exam_id: number | null
    person_id: number | null
    model_name: string | null
    start_at: Date | null
    submitted_at: Date | null
    score_obtained: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamAttemptMaxAggregateOutputType = {
    id: number | null
    exam_id: number | null
    person_id: number | null
    model_name: string | null
    start_at: Date | null
    submitted_at: Date | null
    score_obtained: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamAttemptCountAggregateOutputType = {
    id: number
    exam_id: number
    person_id: number
    model_name: number
    start_at: number
    submitted_at: number
    score_obtained: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamAttemptAvgAggregateInputType = {
    id?: true
    exam_id?: true
    person_id?: true
    score_obtained?: true
    created_by?: true
  }

  export type ExamAttemptSumAggregateInputType = {
    id?: true
    exam_id?: true
    person_id?: true
    score_obtained?: true
    created_by?: true
  }

  export type ExamAttemptMinAggregateInputType = {
    id?: true
    exam_id?: true
    person_id?: true
    model_name?: true
    start_at?: true
    submitted_at?: true
    score_obtained?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamAttemptMaxAggregateInputType = {
    id?: true
    exam_id?: true
    person_id?: true
    model_name?: true
    start_at?: true
    submitted_at?: true
    score_obtained?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamAttemptCountAggregateInputType = {
    id?: true
    exam_id?: true
    person_id?: true
    model_name?: true
    start_at?: true
    submitted_at?: true
    score_obtained?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamAttemptAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamAttempt to aggregate.
     */
    where?: ExamAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamAttempts to fetch.
     */
    orderBy?: ExamAttemptOrderByWithRelationInput | ExamAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamAttempts
    **/
    _count?: true | ExamAttemptCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamAttemptAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamAttemptSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamAttemptMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamAttemptMaxAggregateInputType
  }

  export type GetExamAttemptAggregateType<T extends ExamAttemptAggregateArgs> = {
        [P in keyof T & keyof AggregateExamAttempt]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamAttempt[P]>
      : GetScalarType<T[P], AggregateExamAttempt[P]>
  }




  export type ExamAttemptGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamAttemptWhereInput
    orderBy?: ExamAttemptOrderByWithAggregationInput | ExamAttemptOrderByWithAggregationInput[]
    by: ExamAttemptScalarFieldEnum[] | ExamAttemptScalarFieldEnum
    having?: ExamAttemptScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamAttemptCountAggregateInputType | true
    _avg?: ExamAttemptAvgAggregateInputType
    _sum?: ExamAttemptSumAggregateInputType
    _min?: ExamAttemptMinAggregateInputType
    _max?: ExamAttemptMaxAggregateInputType
  }

  export type ExamAttemptGroupByOutputType = {
    id: number
    exam_id: number
    person_id: number
    model_name: string
    start_at: Date | null
    submitted_at: Date | null
    score_obtained: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamAttemptCountAggregateOutputType | null
    _avg: ExamAttemptAvgAggregateOutputType | null
    _sum: ExamAttemptSumAggregateOutputType | null
    _min: ExamAttemptMinAggregateOutputType | null
    _max: ExamAttemptMaxAggregateOutputType | null
  }

  type GetExamAttemptGroupByPayload<T extends ExamAttemptGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamAttemptGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamAttemptGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamAttemptGroupByOutputType[P]>
            : GetScalarType<T[P], ExamAttemptGroupByOutputType[P]>
        }
      >
    >


  export type ExamAttemptSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_id?: boolean
    person_id?: boolean
    model_name?: boolean
    start_at?: boolean
    submitted_at?: boolean
    score_obtained?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examAttempt"]>



  export type ExamAttemptSelectScalar = {
    id?: boolean
    exam_id?: boolean
    person_id?: boolean
    model_name?: boolean
    start_at?: boolean
    submitted_at?: boolean
    score_obtained?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamAttemptOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_id" | "person_id" | "model_name" | "start_at" | "submitted_at" | "score_obtained" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examAttempt"]>

  export type $ExamAttemptPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamAttempt"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_id: number
      person_id: number
      model_name: string
      start_at: Date | null
      submitted_at: Date | null
      score_obtained: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examAttempt"]>
    composites: {}
  }

  type ExamAttemptGetPayload<S extends boolean | null | undefined | ExamAttemptDefaultArgs> = $Result.GetResult<Prisma.$ExamAttemptPayload, S>

  type ExamAttemptCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamAttemptFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamAttemptCountAggregateInputType | true
    }

  export interface ExamAttemptDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamAttempt'], meta: { name: 'ExamAttempt' } }
    /**
     * Find zero or one ExamAttempt that matches the filter.
     * @param {ExamAttemptFindUniqueArgs} args - Arguments to find a ExamAttempt
     * @example
     * // Get one ExamAttempt
     * const examAttempt = await prisma.examAttempt.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamAttemptFindUniqueArgs>(args: SelectSubset<T, ExamAttemptFindUniqueArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamAttempt that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamAttemptFindUniqueOrThrowArgs} args - Arguments to find a ExamAttempt
     * @example
     * // Get one ExamAttempt
     * const examAttempt = await prisma.examAttempt.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamAttemptFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamAttemptFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamAttempt that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptFindFirstArgs} args - Arguments to find a ExamAttempt
     * @example
     * // Get one ExamAttempt
     * const examAttempt = await prisma.examAttempt.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamAttemptFindFirstArgs>(args?: SelectSubset<T, ExamAttemptFindFirstArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamAttempt that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptFindFirstOrThrowArgs} args - Arguments to find a ExamAttempt
     * @example
     * // Get one ExamAttempt
     * const examAttempt = await prisma.examAttempt.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamAttemptFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamAttemptFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamAttempts that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamAttempts
     * const examAttempts = await prisma.examAttempt.findMany()
     * 
     * // Get first 10 ExamAttempts
     * const examAttempts = await prisma.examAttempt.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examAttemptWithIdOnly = await prisma.examAttempt.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamAttemptFindManyArgs>(args?: SelectSubset<T, ExamAttemptFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamAttempt.
     * @param {ExamAttemptCreateArgs} args - Arguments to create a ExamAttempt.
     * @example
     * // Create one ExamAttempt
     * const ExamAttempt = await prisma.examAttempt.create({
     *   data: {
     *     // ... data to create a ExamAttempt
     *   }
     * })
     * 
     */
    create<T extends ExamAttemptCreateArgs>(args: SelectSubset<T, ExamAttemptCreateArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamAttempts.
     * @param {ExamAttemptCreateManyArgs} args - Arguments to create many ExamAttempts.
     * @example
     * // Create many ExamAttempts
     * const examAttempt = await prisma.examAttempt.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamAttemptCreateManyArgs>(args?: SelectSubset<T, ExamAttemptCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamAttempt.
     * @param {ExamAttemptDeleteArgs} args - Arguments to delete one ExamAttempt.
     * @example
     * // Delete one ExamAttempt
     * const ExamAttempt = await prisma.examAttempt.delete({
     *   where: {
     *     // ... filter to delete one ExamAttempt
     *   }
     * })
     * 
     */
    delete<T extends ExamAttemptDeleteArgs>(args: SelectSubset<T, ExamAttemptDeleteArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamAttempt.
     * @param {ExamAttemptUpdateArgs} args - Arguments to update one ExamAttempt.
     * @example
     * // Update one ExamAttempt
     * const examAttempt = await prisma.examAttempt.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamAttemptUpdateArgs>(args: SelectSubset<T, ExamAttemptUpdateArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamAttempts.
     * @param {ExamAttemptDeleteManyArgs} args - Arguments to filter ExamAttempts to delete.
     * @example
     * // Delete a few ExamAttempts
     * const { count } = await prisma.examAttempt.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamAttemptDeleteManyArgs>(args?: SelectSubset<T, ExamAttemptDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamAttempts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamAttempts
     * const examAttempt = await prisma.examAttempt.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamAttemptUpdateManyArgs>(args: SelectSubset<T, ExamAttemptUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamAttempt.
     * @param {ExamAttemptUpsertArgs} args - Arguments to update or create a ExamAttempt.
     * @example
     * // Update or create a ExamAttempt
     * const examAttempt = await prisma.examAttempt.upsert({
     *   create: {
     *     // ... data to create a ExamAttempt
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamAttempt we want to update
     *   }
     * })
     */
    upsert<T extends ExamAttemptUpsertArgs>(args: SelectSubset<T, ExamAttemptUpsertArgs<ExtArgs>>): Prisma__ExamAttemptClient<$Result.GetResult<Prisma.$ExamAttemptPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamAttempts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptCountArgs} args - Arguments to filter ExamAttempts to count.
     * @example
     * // Count the number of ExamAttempts
     * const count = await prisma.examAttempt.count({
     *   where: {
     *     // ... the filter for the ExamAttempts we want to count
     *   }
     * })
    **/
    count<T extends ExamAttemptCountArgs>(
      args?: Subset<T, ExamAttemptCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamAttemptCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamAttempt.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamAttemptAggregateArgs>(args: Subset<T, ExamAttemptAggregateArgs>): Prisma.PrismaPromise<GetExamAttemptAggregateType<T>>

    /**
     * Group by ExamAttempt.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamAttemptGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamAttemptGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamAttemptGroupByArgs['orderBy'] }
        : { orderBy?: ExamAttemptGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamAttemptGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamAttemptGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamAttempt model
   */
  readonly fields: ExamAttemptFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamAttempt.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamAttemptClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamAttempt model
   */
  interface ExamAttemptFieldRefs {
    readonly id: FieldRef<"ExamAttempt", 'Int'>
    readonly exam_id: FieldRef<"ExamAttempt", 'Int'>
    readonly person_id: FieldRef<"ExamAttempt", 'Int'>
    readonly model_name: FieldRef<"ExamAttempt", 'String'>
    readonly start_at: FieldRef<"ExamAttempt", 'DateTime'>
    readonly submitted_at: FieldRef<"ExamAttempt", 'DateTime'>
    readonly score_obtained: FieldRef<"ExamAttempt", 'Float'>
    readonly created_by: FieldRef<"ExamAttempt", 'Int'>
    readonly created_at: FieldRef<"ExamAttempt", 'DateTime'>
    readonly updated_at: FieldRef<"ExamAttempt", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamAttempt", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamAttempt findUnique
   */
  export type ExamAttemptFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter, which ExamAttempt to fetch.
     */
    where: ExamAttemptWhereUniqueInput
  }

  /**
   * ExamAttempt findUniqueOrThrow
   */
  export type ExamAttemptFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter, which ExamAttempt to fetch.
     */
    where: ExamAttemptWhereUniqueInput
  }

  /**
   * ExamAttempt findFirst
   */
  export type ExamAttemptFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter, which ExamAttempt to fetch.
     */
    where?: ExamAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamAttempts to fetch.
     */
    orderBy?: ExamAttemptOrderByWithRelationInput | ExamAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamAttempts.
     */
    cursor?: ExamAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamAttempts.
     */
    distinct?: ExamAttemptScalarFieldEnum | ExamAttemptScalarFieldEnum[]
  }

  /**
   * ExamAttempt findFirstOrThrow
   */
  export type ExamAttemptFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter, which ExamAttempt to fetch.
     */
    where?: ExamAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamAttempts to fetch.
     */
    orderBy?: ExamAttemptOrderByWithRelationInput | ExamAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamAttempts.
     */
    cursor?: ExamAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamAttempts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamAttempts.
     */
    distinct?: ExamAttemptScalarFieldEnum | ExamAttemptScalarFieldEnum[]
  }

  /**
   * ExamAttempt findMany
   */
  export type ExamAttemptFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter, which ExamAttempts to fetch.
     */
    where?: ExamAttemptWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamAttempts to fetch.
     */
    orderBy?: ExamAttemptOrderByWithRelationInput | ExamAttemptOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamAttempts.
     */
    cursor?: ExamAttemptWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamAttempts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamAttempts.
     */
    skip?: number
    distinct?: ExamAttemptScalarFieldEnum | ExamAttemptScalarFieldEnum[]
  }

  /**
   * ExamAttempt create
   */
  export type ExamAttemptCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamAttempt.
     */
    data: XOR<ExamAttemptCreateInput, ExamAttemptUncheckedCreateInput>
  }

  /**
   * ExamAttempt createMany
   */
  export type ExamAttemptCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamAttempts.
     */
    data: ExamAttemptCreateManyInput | ExamAttemptCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamAttempt update
   */
  export type ExamAttemptUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamAttempt.
     */
    data: XOR<ExamAttemptUpdateInput, ExamAttemptUncheckedUpdateInput>
    /**
     * Choose, which ExamAttempt to update.
     */
    where: ExamAttemptWhereUniqueInput
  }

  /**
   * ExamAttempt updateMany
   */
  export type ExamAttemptUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamAttempts.
     */
    data: XOR<ExamAttemptUpdateManyMutationInput, ExamAttemptUncheckedUpdateManyInput>
    /**
     * Filter which ExamAttempts to update
     */
    where?: ExamAttemptWhereInput
    /**
     * Limit how many ExamAttempts to update.
     */
    limit?: number
  }

  /**
   * ExamAttempt upsert
   */
  export type ExamAttemptUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamAttempt to update in case it exists.
     */
    where: ExamAttemptWhereUniqueInput
    /**
     * In case the ExamAttempt found by the `where` argument doesn't exist, create a new ExamAttempt with this data.
     */
    create: XOR<ExamAttemptCreateInput, ExamAttemptUncheckedCreateInput>
    /**
     * In case the ExamAttempt was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamAttemptUpdateInput, ExamAttemptUncheckedUpdateInput>
  }

  /**
   * ExamAttempt delete
   */
  export type ExamAttemptDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
    /**
     * Filter which ExamAttempt to delete.
     */
    where: ExamAttemptWhereUniqueInput
  }

  /**
   * ExamAttempt deleteMany
   */
  export type ExamAttemptDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamAttempts to delete
     */
    where?: ExamAttemptWhereInput
    /**
     * Limit how many ExamAttempts to delete.
     */
    limit?: number
  }

  /**
   * ExamAttempt without action
   */
  export type ExamAttemptDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamAttempt
     */
    select?: ExamAttemptSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamAttempt
     */
    omit?: ExamAttemptOmit<ExtArgs> | null
  }


  /**
   * Model ExamQuestionAnswer
   */

  export type AggregateExamQuestionAnswer = {
    _count: ExamQuestionAnswerCountAggregateOutputType | null
    _avg: ExamQuestionAnswerAvgAggregateOutputType | null
    _sum: ExamQuestionAnswerSumAggregateOutputType | null
    _min: ExamQuestionAnswerMinAggregateOutputType | null
    _max: ExamQuestionAnswerMaxAggregateOutputType | null
  }

  export type ExamQuestionAnswerAvgAggregateOutputType = {
    id: number | null
    attempt_id: number | null
    exam_id: number | null
    question_id: number | null
    person_id: number | null
    score_obtained: number | null
    marked_by: number | null
    time_taken: number | null
    created_by: number | null
  }

  export type ExamQuestionAnswerSumAggregateOutputType = {
    id: number | null
    attempt_id: number | null
    exam_id: number | null
    question_id: number | null
    person_id: number | null
    score_obtained: number | null
    marked_by: number | null
    time_taken: number | null
    created_by: number | null
  }

  export type ExamQuestionAnswerMinAggregateOutputType = {
    id: number | null
    attempt_id: number | null
    exam_id: number | null
    question_id: number | null
    model_name: string | null
    person_id: number | null
    user_objective_answer: string | null
    user_theory_answer: string | null
    score_obtained: number | null
    marked_by: number | null
    time_taken: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionAnswerMaxAggregateOutputType = {
    id: number | null
    attempt_id: number | null
    exam_id: number | null
    question_id: number | null
    model_name: string | null
    person_id: number | null
    user_objective_answer: string | null
    user_theory_answer: string | null
    score_obtained: number | null
    marked_by: number | null
    time_taken: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamQuestionAnswerCountAggregateOutputType = {
    id: number
    attempt_id: number
    exam_id: number
    question_id: number
    model_name: number
    person_id: number
    user_objective_answer: number
    user_theory_answer: number
    score_obtained: number
    marked_by: number
    time_taken: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamQuestionAnswerAvgAggregateInputType = {
    id?: true
    attempt_id?: true
    exam_id?: true
    question_id?: true
    person_id?: true
    score_obtained?: true
    marked_by?: true
    time_taken?: true
    created_by?: true
  }

  export type ExamQuestionAnswerSumAggregateInputType = {
    id?: true
    attempt_id?: true
    exam_id?: true
    question_id?: true
    person_id?: true
    score_obtained?: true
    marked_by?: true
    time_taken?: true
    created_by?: true
  }

  export type ExamQuestionAnswerMinAggregateInputType = {
    id?: true
    attempt_id?: true
    exam_id?: true
    question_id?: true
    model_name?: true
    person_id?: true
    user_objective_answer?: true
    user_theory_answer?: true
    score_obtained?: true
    marked_by?: true
    time_taken?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionAnswerMaxAggregateInputType = {
    id?: true
    attempt_id?: true
    exam_id?: true
    question_id?: true
    model_name?: true
    person_id?: true
    user_objective_answer?: true
    user_theory_answer?: true
    score_obtained?: true
    marked_by?: true
    time_taken?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamQuestionAnswerCountAggregateInputType = {
    id?: true
    attempt_id?: true
    exam_id?: true
    question_id?: true
    model_name?: true
    person_id?: true
    user_objective_answer?: true
    user_theory_answer?: true
    score_obtained?: true
    marked_by?: true
    time_taken?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamQuestionAnswerAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestionAnswer to aggregate.
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionAnswers to fetch.
     */
    orderBy?: ExamQuestionAnswerOrderByWithRelationInput | ExamQuestionAnswerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamQuestionAnswerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionAnswers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionAnswers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamQuestionAnswers
    **/
    _count?: true | ExamQuestionAnswerCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamQuestionAnswerAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamQuestionAnswerSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamQuestionAnswerMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamQuestionAnswerMaxAggregateInputType
  }

  export type GetExamQuestionAnswerAggregateType<T extends ExamQuestionAnswerAggregateArgs> = {
        [P in keyof T & keyof AggregateExamQuestionAnswer]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamQuestionAnswer[P]>
      : GetScalarType<T[P], AggregateExamQuestionAnswer[P]>
  }




  export type ExamQuestionAnswerGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamQuestionAnswerWhereInput
    orderBy?: ExamQuestionAnswerOrderByWithAggregationInput | ExamQuestionAnswerOrderByWithAggregationInput[]
    by: ExamQuestionAnswerScalarFieldEnum[] | ExamQuestionAnswerScalarFieldEnum
    having?: ExamQuestionAnswerScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamQuestionAnswerCountAggregateInputType | true
    _avg?: ExamQuestionAnswerAvgAggregateInputType
    _sum?: ExamQuestionAnswerSumAggregateInputType
    _min?: ExamQuestionAnswerMinAggregateInputType
    _max?: ExamQuestionAnswerMaxAggregateInputType
  }

  export type ExamQuestionAnswerGroupByOutputType = {
    id: number
    attempt_id: number | null
    exam_id: number
    question_id: number
    model_name: string
    person_id: number
    user_objective_answer: string
    user_theory_answer: string
    score_obtained: number
    marked_by: number
    time_taken: number | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamQuestionAnswerCountAggregateOutputType | null
    _avg: ExamQuestionAnswerAvgAggregateOutputType | null
    _sum: ExamQuestionAnswerSumAggregateOutputType | null
    _min: ExamQuestionAnswerMinAggregateOutputType | null
    _max: ExamQuestionAnswerMaxAggregateOutputType | null
  }

  type GetExamQuestionAnswerGroupByPayload<T extends ExamQuestionAnswerGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamQuestionAnswerGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamQuestionAnswerGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamQuestionAnswerGroupByOutputType[P]>
            : GetScalarType<T[P], ExamQuestionAnswerGroupByOutputType[P]>
        }
      >
    >


  export type ExamQuestionAnswerSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    attempt_id?: boolean
    exam_id?: boolean
    question_id?: boolean
    model_name?: boolean
    person_id?: boolean
    user_objective_answer?: boolean
    user_theory_answer?: boolean
    score_obtained?: boolean
    marked_by?: boolean
    time_taken?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examQuestionAnswer"]>



  export type ExamQuestionAnswerSelectScalar = {
    id?: boolean
    attempt_id?: boolean
    exam_id?: boolean
    question_id?: boolean
    model_name?: boolean
    person_id?: boolean
    user_objective_answer?: boolean
    user_theory_answer?: boolean
    score_obtained?: boolean
    marked_by?: boolean
    time_taken?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamQuestionAnswerOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "attempt_id" | "exam_id" | "question_id" | "model_name" | "person_id" | "user_objective_answer" | "user_theory_answer" | "score_obtained" | "marked_by" | "time_taken" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examQuestionAnswer"]>

  export type $ExamQuestionAnswerPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamQuestionAnswer"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      attempt_id: number | null
      exam_id: number
      question_id: number
      model_name: string
      person_id: number
      user_objective_answer: string
      user_theory_answer: string
      score_obtained: number
      marked_by: number
      time_taken: number | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examQuestionAnswer"]>
    composites: {}
  }

  type ExamQuestionAnswerGetPayload<S extends boolean | null | undefined | ExamQuestionAnswerDefaultArgs> = $Result.GetResult<Prisma.$ExamQuestionAnswerPayload, S>

  type ExamQuestionAnswerCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamQuestionAnswerFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamQuestionAnswerCountAggregateInputType | true
    }

  export interface ExamQuestionAnswerDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamQuestionAnswer'], meta: { name: 'ExamQuestionAnswer' } }
    /**
     * Find zero or one ExamQuestionAnswer that matches the filter.
     * @param {ExamQuestionAnswerFindUniqueArgs} args - Arguments to find a ExamQuestionAnswer
     * @example
     * // Get one ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamQuestionAnswerFindUniqueArgs>(args: SelectSubset<T, ExamQuestionAnswerFindUniqueArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamQuestionAnswer that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamQuestionAnswerFindUniqueOrThrowArgs} args - Arguments to find a ExamQuestionAnswer
     * @example
     * // Get one ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamQuestionAnswerFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamQuestionAnswerFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestionAnswer that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerFindFirstArgs} args - Arguments to find a ExamQuestionAnswer
     * @example
     * // Get one ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamQuestionAnswerFindFirstArgs>(args?: SelectSubset<T, ExamQuestionAnswerFindFirstArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamQuestionAnswer that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerFindFirstOrThrowArgs} args - Arguments to find a ExamQuestionAnswer
     * @example
     * // Get one ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamQuestionAnswerFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamQuestionAnswerFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamQuestionAnswers that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamQuestionAnswers
     * const examQuestionAnswers = await prisma.examQuestionAnswer.findMany()
     * 
     * // Get first 10 ExamQuestionAnswers
     * const examQuestionAnswers = await prisma.examQuestionAnswer.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examQuestionAnswerWithIdOnly = await prisma.examQuestionAnswer.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamQuestionAnswerFindManyArgs>(args?: SelectSubset<T, ExamQuestionAnswerFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamQuestionAnswer.
     * @param {ExamQuestionAnswerCreateArgs} args - Arguments to create a ExamQuestionAnswer.
     * @example
     * // Create one ExamQuestionAnswer
     * const ExamQuestionAnswer = await prisma.examQuestionAnswer.create({
     *   data: {
     *     // ... data to create a ExamQuestionAnswer
     *   }
     * })
     * 
     */
    create<T extends ExamQuestionAnswerCreateArgs>(args: SelectSubset<T, ExamQuestionAnswerCreateArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamQuestionAnswers.
     * @param {ExamQuestionAnswerCreateManyArgs} args - Arguments to create many ExamQuestionAnswers.
     * @example
     * // Create many ExamQuestionAnswers
     * const examQuestionAnswer = await prisma.examQuestionAnswer.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamQuestionAnswerCreateManyArgs>(args?: SelectSubset<T, ExamQuestionAnswerCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamQuestionAnswer.
     * @param {ExamQuestionAnswerDeleteArgs} args - Arguments to delete one ExamQuestionAnswer.
     * @example
     * // Delete one ExamQuestionAnswer
     * const ExamQuestionAnswer = await prisma.examQuestionAnswer.delete({
     *   where: {
     *     // ... filter to delete one ExamQuestionAnswer
     *   }
     * })
     * 
     */
    delete<T extends ExamQuestionAnswerDeleteArgs>(args: SelectSubset<T, ExamQuestionAnswerDeleteArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamQuestionAnswer.
     * @param {ExamQuestionAnswerUpdateArgs} args - Arguments to update one ExamQuestionAnswer.
     * @example
     * // Update one ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamQuestionAnswerUpdateArgs>(args: SelectSubset<T, ExamQuestionAnswerUpdateArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamQuestionAnswers.
     * @param {ExamQuestionAnswerDeleteManyArgs} args - Arguments to filter ExamQuestionAnswers to delete.
     * @example
     * // Delete a few ExamQuestionAnswers
     * const { count } = await prisma.examQuestionAnswer.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamQuestionAnswerDeleteManyArgs>(args?: SelectSubset<T, ExamQuestionAnswerDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamQuestionAnswers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamQuestionAnswers
     * const examQuestionAnswer = await prisma.examQuestionAnswer.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamQuestionAnswerUpdateManyArgs>(args: SelectSubset<T, ExamQuestionAnswerUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamQuestionAnswer.
     * @param {ExamQuestionAnswerUpsertArgs} args - Arguments to update or create a ExamQuestionAnswer.
     * @example
     * // Update or create a ExamQuestionAnswer
     * const examQuestionAnswer = await prisma.examQuestionAnswer.upsert({
     *   create: {
     *     // ... data to create a ExamQuestionAnswer
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamQuestionAnswer we want to update
     *   }
     * })
     */
    upsert<T extends ExamQuestionAnswerUpsertArgs>(args: SelectSubset<T, ExamQuestionAnswerUpsertArgs<ExtArgs>>): Prisma__ExamQuestionAnswerClient<$Result.GetResult<Prisma.$ExamQuestionAnswerPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamQuestionAnswers.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerCountArgs} args - Arguments to filter ExamQuestionAnswers to count.
     * @example
     * // Count the number of ExamQuestionAnswers
     * const count = await prisma.examQuestionAnswer.count({
     *   where: {
     *     // ... the filter for the ExamQuestionAnswers we want to count
     *   }
     * })
    **/
    count<T extends ExamQuestionAnswerCountArgs>(
      args?: Subset<T, ExamQuestionAnswerCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamQuestionAnswerCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamQuestionAnswer.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamQuestionAnswerAggregateArgs>(args: Subset<T, ExamQuestionAnswerAggregateArgs>): Prisma.PrismaPromise<GetExamQuestionAnswerAggregateType<T>>

    /**
     * Group by ExamQuestionAnswer.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamQuestionAnswerGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamQuestionAnswerGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamQuestionAnswerGroupByArgs['orderBy'] }
        : { orderBy?: ExamQuestionAnswerGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamQuestionAnswerGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamQuestionAnswerGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamQuestionAnswer model
   */
  readonly fields: ExamQuestionAnswerFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamQuestionAnswer.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamQuestionAnswerClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamQuestionAnswer model
   */
  interface ExamQuestionAnswerFieldRefs {
    readonly id: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly attempt_id: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly exam_id: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly question_id: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly model_name: FieldRef<"ExamQuestionAnswer", 'String'>
    readonly person_id: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly user_objective_answer: FieldRef<"ExamQuestionAnswer", 'String'>
    readonly user_theory_answer: FieldRef<"ExamQuestionAnswer", 'String'>
    readonly score_obtained: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly marked_by: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly time_taken: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly created_by: FieldRef<"ExamQuestionAnswer", 'Int'>
    readonly created_at: FieldRef<"ExamQuestionAnswer", 'DateTime'>
    readonly updated_at: FieldRef<"ExamQuestionAnswer", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamQuestionAnswer", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamQuestionAnswer findUnique
   */
  export type ExamQuestionAnswerFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionAnswer to fetch.
     */
    where: ExamQuestionAnswerWhereUniqueInput
  }

  /**
   * ExamQuestionAnswer findUniqueOrThrow
   */
  export type ExamQuestionAnswerFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionAnswer to fetch.
     */
    where: ExamQuestionAnswerWhereUniqueInput
  }

  /**
   * ExamQuestionAnswer findFirst
   */
  export type ExamQuestionAnswerFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionAnswer to fetch.
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionAnswers to fetch.
     */
    orderBy?: ExamQuestionAnswerOrderByWithRelationInput | ExamQuestionAnswerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestionAnswers.
     */
    cursor?: ExamQuestionAnswerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionAnswers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionAnswers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestionAnswers.
     */
    distinct?: ExamQuestionAnswerScalarFieldEnum | ExamQuestionAnswerScalarFieldEnum[]
  }

  /**
   * ExamQuestionAnswer findFirstOrThrow
   */
  export type ExamQuestionAnswerFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionAnswer to fetch.
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionAnswers to fetch.
     */
    orderBy?: ExamQuestionAnswerOrderByWithRelationInput | ExamQuestionAnswerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamQuestionAnswers.
     */
    cursor?: ExamQuestionAnswerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionAnswers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionAnswers.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamQuestionAnswers.
     */
    distinct?: ExamQuestionAnswerScalarFieldEnum | ExamQuestionAnswerScalarFieldEnum[]
  }

  /**
   * ExamQuestionAnswer findMany
   */
  export type ExamQuestionAnswerFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter, which ExamQuestionAnswers to fetch.
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamQuestionAnswers to fetch.
     */
    orderBy?: ExamQuestionAnswerOrderByWithRelationInput | ExamQuestionAnswerOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamQuestionAnswers.
     */
    cursor?: ExamQuestionAnswerWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamQuestionAnswers from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamQuestionAnswers.
     */
    skip?: number
    distinct?: ExamQuestionAnswerScalarFieldEnum | ExamQuestionAnswerScalarFieldEnum[]
  }

  /**
   * ExamQuestionAnswer create
   */
  export type ExamQuestionAnswerCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamQuestionAnswer.
     */
    data: XOR<ExamQuestionAnswerCreateInput, ExamQuestionAnswerUncheckedCreateInput>
  }

  /**
   * ExamQuestionAnswer createMany
   */
  export type ExamQuestionAnswerCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamQuestionAnswers.
     */
    data: ExamQuestionAnswerCreateManyInput | ExamQuestionAnswerCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamQuestionAnswer update
   */
  export type ExamQuestionAnswerUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamQuestionAnswer.
     */
    data: XOR<ExamQuestionAnswerUpdateInput, ExamQuestionAnswerUncheckedUpdateInput>
    /**
     * Choose, which ExamQuestionAnswer to update.
     */
    where: ExamQuestionAnswerWhereUniqueInput
  }

  /**
   * ExamQuestionAnswer updateMany
   */
  export type ExamQuestionAnswerUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamQuestionAnswers.
     */
    data: XOR<ExamQuestionAnswerUpdateManyMutationInput, ExamQuestionAnswerUncheckedUpdateManyInput>
    /**
     * Filter which ExamQuestionAnswers to update
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * Limit how many ExamQuestionAnswers to update.
     */
    limit?: number
  }

  /**
   * ExamQuestionAnswer upsert
   */
  export type ExamQuestionAnswerUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamQuestionAnswer to update in case it exists.
     */
    where: ExamQuestionAnswerWhereUniqueInput
    /**
     * In case the ExamQuestionAnswer found by the `where` argument doesn't exist, create a new ExamQuestionAnswer with this data.
     */
    create: XOR<ExamQuestionAnswerCreateInput, ExamQuestionAnswerUncheckedCreateInput>
    /**
     * In case the ExamQuestionAnswer was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamQuestionAnswerUpdateInput, ExamQuestionAnswerUncheckedUpdateInput>
  }

  /**
   * ExamQuestionAnswer delete
   */
  export type ExamQuestionAnswerDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
    /**
     * Filter which ExamQuestionAnswer to delete.
     */
    where: ExamQuestionAnswerWhereUniqueInput
  }

  /**
   * ExamQuestionAnswer deleteMany
   */
  export type ExamQuestionAnswerDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamQuestionAnswers to delete
     */
    where?: ExamQuestionAnswerWhereInput
    /**
     * Limit how many ExamQuestionAnswers to delete.
     */
    limit?: number
  }

  /**
   * ExamQuestionAnswer without action
   */
  export type ExamQuestionAnswerDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamQuestionAnswer
     */
    select?: ExamQuestionAnswerSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamQuestionAnswer
     */
    omit?: ExamQuestionAnswerOmit<ExtArgs> | null
  }


  /**
   * Model ExamGift
   */

  export type AggregateExamGift = {
    _count: ExamGiftCountAggregateOutputType | null
    _avg: ExamGiftAvgAggregateOutputType | null
    _sum: ExamGiftSumAggregateOutputType | null
    _min: ExamGiftMinAggregateOutputType | null
    _max: ExamGiftMaxAggregateOutputType | null
  }

  export type ExamGiftAvgAggregateOutputType = {
    id: number | null
    exam_id: number | null
    created_by: number | null
  }

  export type ExamGiftSumAggregateOutputType = {
    id: number | null
    exam_id: number | null
    created_by: number | null
  }

  export type ExamGiftMinAggregateOutputType = {
    id: number | null
    exam_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamGiftMaxAggregateOutputType = {
    id: number | null
    exam_id: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
  }

  export type ExamGiftCountAggregateOutputType = {
    id: number
    exam_id: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    _all: number
  }


  export type ExamGiftAvgAggregateInputType = {
    id?: true
    exam_id?: true
    created_by?: true
  }

  export type ExamGiftSumAggregateInputType = {
    id?: true
    exam_id?: true
    created_by?: true
  }

  export type ExamGiftMinAggregateInputType = {
    id?: true
    exam_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamGiftMaxAggregateInputType = {
    id?: true
    exam_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
  }

  export type ExamGiftCountAggregateInputType = {
    id?: true
    exam_id?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    _all?: true
  }

  export type ExamGiftAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamGift to aggregate.
     */
    where?: ExamGiftWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamGifts to fetch.
     */
    orderBy?: ExamGiftOrderByWithRelationInput | ExamGiftOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ExamGiftWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamGifts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamGifts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ExamGifts
    **/
    _count?: true | ExamGiftCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ExamGiftAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ExamGiftSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ExamGiftMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ExamGiftMaxAggregateInputType
  }

  export type GetExamGiftAggregateType<T extends ExamGiftAggregateArgs> = {
        [P in keyof T & keyof AggregateExamGift]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateExamGift[P]>
      : GetScalarType<T[P], AggregateExamGift[P]>
  }




  export type ExamGiftGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ExamGiftWhereInput
    orderBy?: ExamGiftOrderByWithAggregationInput | ExamGiftOrderByWithAggregationInput[]
    by: ExamGiftScalarFieldEnum[] | ExamGiftScalarFieldEnum
    having?: ExamGiftScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ExamGiftCountAggregateInputType | true
    _avg?: ExamGiftAvgAggregateInputType
    _sum?: ExamGiftSumAggregateInputType
    _min?: ExamGiftMinAggregateInputType
    _max?: ExamGiftMaxAggregateInputType
  }

  export type ExamGiftGroupByOutputType = {
    id: number
    exam_id: number
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    _count: ExamGiftCountAggregateOutputType | null
    _avg: ExamGiftAvgAggregateOutputType | null
    _sum: ExamGiftSumAggregateOutputType | null
    _min: ExamGiftMinAggregateOutputType | null
    _max: ExamGiftMaxAggregateOutputType | null
  }

  type GetExamGiftGroupByPayload<T extends ExamGiftGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ExamGiftGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ExamGiftGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ExamGiftGroupByOutputType[P]>
            : GetScalarType<T[P], ExamGiftGroupByOutputType[P]>
        }
      >
    >


  export type ExamGiftSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    exam_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }, ExtArgs["result"]["examGift"]>



  export type ExamGiftSelectScalar = {
    id?: boolean
    exam_id?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
  }

  export type ExamGiftOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "exam_id" | "created_by" | "created_at" | "updated_at" | "deleted_at", ExtArgs["result"]["examGift"]>

  export type $ExamGiftPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ExamGift"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      exam_id: number
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
    }, ExtArgs["result"]["examGift"]>
    composites: {}
  }

  type ExamGiftGetPayload<S extends boolean | null | undefined | ExamGiftDefaultArgs> = $Result.GetResult<Prisma.$ExamGiftPayload, S>

  type ExamGiftCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ExamGiftFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ExamGiftCountAggregateInputType | true
    }

  export interface ExamGiftDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ExamGift'], meta: { name: 'ExamGift' } }
    /**
     * Find zero or one ExamGift that matches the filter.
     * @param {ExamGiftFindUniqueArgs} args - Arguments to find a ExamGift
     * @example
     * // Get one ExamGift
     * const examGift = await prisma.examGift.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ExamGiftFindUniqueArgs>(args: SelectSubset<T, ExamGiftFindUniqueArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ExamGift that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ExamGiftFindUniqueOrThrowArgs} args - Arguments to find a ExamGift
     * @example
     * // Get one ExamGift
     * const examGift = await prisma.examGift.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ExamGiftFindUniqueOrThrowArgs>(args: SelectSubset<T, ExamGiftFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamGift that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftFindFirstArgs} args - Arguments to find a ExamGift
     * @example
     * // Get one ExamGift
     * const examGift = await prisma.examGift.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ExamGiftFindFirstArgs>(args?: SelectSubset<T, ExamGiftFindFirstArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ExamGift that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftFindFirstOrThrowArgs} args - Arguments to find a ExamGift
     * @example
     * // Get one ExamGift
     * const examGift = await prisma.examGift.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ExamGiftFindFirstOrThrowArgs>(args?: SelectSubset<T, ExamGiftFindFirstOrThrowArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ExamGifts that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ExamGifts
     * const examGifts = await prisma.examGift.findMany()
     * 
     * // Get first 10 ExamGifts
     * const examGifts = await prisma.examGift.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const examGiftWithIdOnly = await prisma.examGift.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ExamGiftFindManyArgs>(args?: SelectSubset<T, ExamGiftFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ExamGift.
     * @param {ExamGiftCreateArgs} args - Arguments to create a ExamGift.
     * @example
     * // Create one ExamGift
     * const ExamGift = await prisma.examGift.create({
     *   data: {
     *     // ... data to create a ExamGift
     *   }
     * })
     * 
     */
    create<T extends ExamGiftCreateArgs>(args: SelectSubset<T, ExamGiftCreateArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ExamGifts.
     * @param {ExamGiftCreateManyArgs} args - Arguments to create many ExamGifts.
     * @example
     * // Create many ExamGifts
     * const examGift = await prisma.examGift.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ExamGiftCreateManyArgs>(args?: SelectSubset<T, ExamGiftCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ExamGift.
     * @param {ExamGiftDeleteArgs} args - Arguments to delete one ExamGift.
     * @example
     * // Delete one ExamGift
     * const ExamGift = await prisma.examGift.delete({
     *   where: {
     *     // ... filter to delete one ExamGift
     *   }
     * })
     * 
     */
    delete<T extends ExamGiftDeleteArgs>(args: SelectSubset<T, ExamGiftDeleteArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ExamGift.
     * @param {ExamGiftUpdateArgs} args - Arguments to update one ExamGift.
     * @example
     * // Update one ExamGift
     * const examGift = await prisma.examGift.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ExamGiftUpdateArgs>(args: SelectSubset<T, ExamGiftUpdateArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ExamGifts.
     * @param {ExamGiftDeleteManyArgs} args - Arguments to filter ExamGifts to delete.
     * @example
     * // Delete a few ExamGifts
     * const { count } = await prisma.examGift.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ExamGiftDeleteManyArgs>(args?: SelectSubset<T, ExamGiftDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ExamGifts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ExamGifts
     * const examGift = await prisma.examGift.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ExamGiftUpdateManyArgs>(args: SelectSubset<T, ExamGiftUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ExamGift.
     * @param {ExamGiftUpsertArgs} args - Arguments to update or create a ExamGift.
     * @example
     * // Update or create a ExamGift
     * const examGift = await prisma.examGift.upsert({
     *   create: {
     *     // ... data to create a ExamGift
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ExamGift we want to update
     *   }
     * })
     */
    upsert<T extends ExamGiftUpsertArgs>(args: SelectSubset<T, ExamGiftUpsertArgs<ExtArgs>>): Prisma__ExamGiftClient<$Result.GetResult<Prisma.$ExamGiftPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ExamGifts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftCountArgs} args - Arguments to filter ExamGifts to count.
     * @example
     * // Count the number of ExamGifts
     * const count = await prisma.examGift.count({
     *   where: {
     *     // ... the filter for the ExamGifts we want to count
     *   }
     * })
    **/
    count<T extends ExamGiftCountArgs>(
      args?: Subset<T, ExamGiftCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ExamGiftCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ExamGift.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ExamGiftAggregateArgs>(args: Subset<T, ExamGiftAggregateArgs>): Prisma.PrismaPromise<GetExamGiftAggregateType<T>>

    /**
     * Group by ExamGift.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ExamGiftGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ExamGiftGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ExamGiftGroupByArgs['orderBy'] }
        : { orderBy?: ExamGiftGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ExamGiftGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetExamGiftGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ExamGift model
   */
  readonly fields: ExamGiftFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ExamGift.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ExamGiftClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ExamGift model
   */
  interface ExamGiftFieldRefs {
    readonly id: FieldRef<"ExamGift", 'Int'>
    readonly exam_id: FieldRef<"ExamGift", 'Int'>
    readonly created_by: FieldRef<"ExamGift", 'Int'>
    readonly created_at: FieldRef<"ExamGift", 'DateTime'>
    readonly updated_at: FieldRef<"ExamGift", 'DateTime'>
    readonly deleted_at: FieldRef<"ExamGift", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * ExamGift findUnique
   */
  export type ExamGiftFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter, which ExamGift to fetch.
     */
    where: ExamGiftWhereUniqueInput
  }

  /**
   * ExamGift findUniqueOrThrow
   */
  export type ExamGiftFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter, which ExamGift to fetch.
     */
    where: ExamGiftWhereUniqueInput
  }

  /**
   * ExamGift findFirst
   */
  export type ExamGiftFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter, which ExamGift to fetch.
     */
    where?: ExamGiftWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamGifts to fetch.
     */
    orderBy?: ExamGiftOrderByWithRelationInput | ExamGiftOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamGifts.
     */
    cursor?: ExamGiftWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamGifts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamGifts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamGifts.
     */
    distinct?: ExamGiftScalarFieldEnum | ExamGiftScalarFieldEnum[]
  }

  /**
   * ExamGift findFirstOrThrow
   */
  export type ExamGiftFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter, which ExamGift to fetch.
     */
    where?: ExamGiftWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamGifts to fetch.
     */
    orderBy?: ExamGiftOrderByWithRelationInput | ExamGiftOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ExamGifts.
     */
    cursor?: ExamGiftWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamGifts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamGifts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ExamGifts.
     */
    distinct?: ExamGiftScalarFieldEnum | ExamGiftScalarFieldEnum[]
  }

  /**
   * ExamGift findMany
   */
  export type ExamGiftFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter, which ExamGifts to fetch.
     */
    where?: ExamGiftWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ExamGifts to fetch.
     */
    orderBy?: ExamGiftOrderByWithRelationInput | ExamGiftOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ExamGifts.
     */
    cursor?: ExamGiftWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ExamGifts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ExamGifts.
     */
    skip?: number
    distinct?: ExamGiftScalarFieldEnum | ExamGiftScalarFieldEnum[]
  }

  /**
   * ExamGift create
   */
  export type ExamGiftCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * The data needed to create a ExamGift.
     */
    data: XOR<ExamGiftCreateInput, ExamGiftUncheckedCreateInput>
  }

  /**
   * ExamGift createMany
   */
  export type ExamGiftCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ExamGifts.
     */
    data: ExamGiftCreateManyInput | ExamGiftCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ExamGift update
   */
  export type ExamGiftUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * The data needed to update a ExamGift.
     */
    data: XOR<ExamGiftUpdateInput, ExamGiftUncheckedUpdateInput>
    /**
     * Choose, which ExamGift to update.
     */
    where: ExamGiftWhereUniqueInput
  }

  /**
   * ExamGift updateMany
   */
  export type ExamGiftUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ExamGifts.
     */
    data: XOR<ExamGiftUpdateManyMutationInput, ExamGiftUncheckedUpdateManyInput>
    /**
     * Filter which ExamGifts to update
     */
    where?: ExamGiftWhereInput
    /**
     * Limit how many ExamGifts to update.
     */
    limit?: number
  }

  /**
   * ExamGift upsert
   */
  export type ExamGiftUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * The filter to search for the ExamGift to update in case it exists.
     */
    where: ExamGiftWhereUniqueInput
    /**
     * In case the ExamGift found by the `where` argument doesn't exist, create a new ExamGift with this data.
     */
    create: XOR<ExamGiftCreateInput, ExamGiftUncheckedCreateInput>
    /**
     * In case the ExamGift was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ExamGiftUpdateInput, ExamGiftUncheckedUpdateInput>
  }

  /**
   * ExamGift delete
   */
  export type ExamGiftDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
    /**
     * Filter which ExamGift to delete.
     */
    where: ExamGiftWhereUniqueInput
  }

  /**
   * ExamGift deleteMany
   */
  export type ExamGiftDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ExamGifts to delete
     */
    where?: ExamGiftWhereInput
    /**
     * Limit how many ExamGifts to delete.
     */
    limit?: number
  }

  /**
   * ExamGift without action
   */
  export type ExamGiftDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ExamGift
     */
    select?: ExamGiftSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ExamGift
     */
    omit?: ExamGiftOmit<ExtArgs> | null
  }


  /**
   * Model SchoolRecord
   */

  export type AggregateSchoolRecord = {
    _count: SchoolRecordCountAggregateOutputType | null
    _avg: SchoolRecordAvgAggregateOutputType | null
    _sum: SchoolRecordSumAggregateOutputType | null
    _min: SchoolRecordMinAggregateOutputType | null
    _max: SchoolRecordMaxAggregateOutputType | null
  }

  export type SchoolRecordAvgAggregateOutputType = {
    id: number | null
    school_code: number | null
    school_active: number | null
    school_approved: number | null
    created_by: number | null
  }

  export type SchoolRecordSumAggregateOutputType = {
    id: number | null
    school_code: number | null
    school_active: number | null
    school_approved: number | null
    created_by: number | null
  }

  export type SchoolRecordMinAggregateOutputType = {
    id: number | null
    school_name: string | null
    school_code: number | null
    school_databasename: string | null
    school_active: number | null
    school_approved: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
  }

  export type SchoolRecordMaxAggregateOutputType = {
    id: number | null
    school_name: string | null
    school_code: number | null
    school_databasename: string | null
    school_active: number | null
    school_approved: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
  }

  export type SchoolRecordCountAggregateOutputType = {
    id: number
    school_name: number
    school_code: number
    school_databasename: number
    school_active: number
    school_approved: number
    created_by: number
    created_at: number
    updated_at: number
    _all: number
  }


  export type SchoolRecordAvgAggregateInputType = {
    id?: true
    school_code?: true
    school_active?: true
    school_approved?: true
    created_by?: true
  }

  export type SchoolRecordSumAggregateInputType = {
    id?: true
    school_code?: true
    school_active?: true
    school_approved?: true
    created_by?: true
  }

  export type SchoolRecordMinAggregateInputType = {
    id?: true
    school_name?: true
    school_code?: true
    school_databasename?: true
    school_active?: true
    school_approved?: true
    created_by?: true
    created_at?: true
    updated_at?: true
  }

  export type SchoolRecordMaxAggregateInputType = {
    id?: true
    school_name?: true
    school_code?: true
    school_databasename?: true
    school_active?: true
    school_approved?: true
    created_by?: true
    created_at?: true
    updated_at?: true
  }

  export type SchoolRecordCountAggregateInputType = {
    id?: true
    school_name?: true
    school_code?: true
    school_databasename?: true
    school_active?: true
    school_approved?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    _all?: true
  }

  export type SchoolRecordAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolRecord to aggregate.
     */
    where?: SchoolRecordWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolRecords to fetch.
     */
    orderBy?: SchoolRecordOrderByWithRelationInput | SchoolRecordOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SchoolRecordWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolRecords from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolRecords.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SchoolRecords
    **/
    _count?: true | SchoolRecordCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SchoolRecordAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SchoolRecordSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SchoolRecordMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SchoolRecordMaxAggregateInputType
  }

  export type GetSchoolRecordAggregateType<T extends SchoolRecordAggregateArgs> = {
        [P in keyof T & keyof AggregateSchoolRecord]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSchoolRecord[P]>
      : GetScalarType<T[P], AggregateSchoolRecord[P]>
  }




  export type SchoolRecordGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SchoolRecordWhereInput
    orderBy?: SchoolRecordOrderByWithAggregationInput | SchoolRecordOrderByWithAggregationInput[]
    by: SchoolRecordScalarFieldEnum[] | SchoolRecordScalarFieldEnum
    having?: SchoolRecordScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SchoolRecordCountAggregateInputType | true
    _avg?: SchoolRecordAvgAggregateInputType
    _sum?: SchoolRecordSumAggregateInputType
    _min?: SchoolRecordMinAggregateInputType
    _max?: SchoolRecordMaxAggregateInputType
  }

  export type SchoolRecordGroupByOutputType = {
    id: number
    school_name: string
    school_code: number
    school_databasename: string
    school_active: number | null
    school_approved: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    _count: SchoolRecordCountAggregateOutputType | null
    _avg: SchoolRecordAvgAggregateOutputType | null
    _sum: SchoolRecordSumAggregateOutputType | null
    _min: SchoolRecordMinAggregateOutputType | null
    _max: SchoolRecordMaxAggregateOutputType | null
  }

  type GetSchoolRecordGroupByPayload<T extends SchoolRecordGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SchoolRecordGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SchoolRecordGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SchoolRecordGroupByOutputType[P]>
            : GetScalarType<T[P], SchoolRecordGroupByOutputType[P]>
        }
      >
    >


  export type SchoolRecordSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    school_name?: boolean
    school_code?: boolean
    school_databasename?: boolean
    school_active?: boolean
    school_approved?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
  }, ExtArgs["result"]["schoolRecord"]>



  export type SchoolRecordSelectScalar = {
    id?: boolean
    school_name?: boolean
    school_code?: boolean
    school_databasename?: boolean
    school_active?: boolean
    school_approved?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
  }

  export type SchoolRecordOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "school_name" | "school_code" | "school_databasename" | "school_active" | "school_approved" | "created_by" | "created_at" | "updated_at", ExtArgs["result"]["schoolRecord"]>

  export type $SchoolRecordPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SchoolRecord"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      school_name: string
      school_code: number
      school_databasename: string
      school_active: number | null
      school_approved: number | null
      created_by: number | null
      created_at: Date | null
      updated_at: Date | null
    }, ExtArgs["result"]["schoolRecord"]>
    composites: {}
  }

  type SchoolRecordGetPayload<S extends boolean | null | undefined | SchoolRecordDefaultArgs> = $Result.GetResult<Prisma.$SchoolRecordPayload, S>

  type SchoolRecordCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SchoolRecordFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SchoolRecordCountAggregateInputType | true
    }

  export interface SchoolRecordDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SchoolRecord'], meta: { name: 'SchoolRecord' } }
    /**
     * Find zero or one SchoolRecord that matches the filter.
     * @param {SchoolRecordFindUniqueArgs} args - Arguments to find a SchoolRecord
     * @example
     * // Get one SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SchoolRecordFindUniqueArgs>(args: SelectSubset<T, SchoolRecordFindUniqueArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SchoolRecord that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SchoolRecordFindUniqueOrThrowArgs} args - Arguments to find a SchoolRecord
     * @example
     * // Get one SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SchoolRecordFindUniqueOrThrowArgs>(args: SelectSubset<T, SchoolRecordFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolRecord that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordFindFirstArgs} args - Arguments to find a SchoolRecord
     * @example
     * // Get one SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SchoolRecordFindFirstArgs>(args?: SelectSubset<T, SchoolRecordFindFirstArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SchoolRecord that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordFindFirstOrThrowArgs} args - Arguments to find a SchoolRecord
     * @example
     * // Get one SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SchoolRecordFindFirstOrThrowArgs>(args?: SelectSubset<T, SchoolRecordFindFirstOrThrowArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SchoolRecords that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SchoolRecords
     * const schoolRecords = await prisma.schoolRecord.findMany()
     * 
     * // Get first 10 SchoolRecords
     * const schoolRecords = await prisma.schoolRecord.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const schoolRecordWithIdOnly = await prisma.schoolRecord.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SchoolRecordFindManyArgs>(args?: SelectSubset<T, SchoolRecordFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SchoolRecord.
     * @param {SchoolRecordCreateArgs} args - Arguments to create a SchoolRecord.
     * @example
     * // Create one SchoolRecord
     * const SchoolRecord = await prisma.schoolRecord.create({
     *   data: {
     *     // ... data to create a SchoolRecord
     *   }
     * })
     * 
     */
    create<T extends SchoolRecordCreateArgs>(args: SelectSubset<T, SchoolRecordCreateArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SchoolRecords.
     * @param {SchoolRecordCreateManyArgs} args - Arguments to create many SchoolRecords.
     * @example
     * // Create many SchoolRecords
     * const schoolRecord = await prisma.schoolRecord.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SchoolRecordCreateManyArgs>(args?: SelectSubset<T, SchoolRecordCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SchoolRecord.
     * @param {SchoolRecordDeleteArgs} args - Arguments to delete one SchoolRecord.
     * @example
     * // Delete one SchoolRecord
     * const SchoolRecord = await prisma.schoolRecord.delete({
     *   where: {
     *     // ... filter to delete one SchoolRecord
     *   }
     * })
     * 
     */
    delete<T extends SchoolRecordDeleteArgs>(args: SelectSubset<T, SchoolRecordDeleteArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SchoolRecord.
     * @param {SchoolRecordUpdateArgs} args - Arguments to update one SchoolRecord.
     * @example
     * // Update one SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SchoolRecordUpdateArgs>(args: SelectSubset<T, SchoolRecordUpdateArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SchoolRecords.
     * @param {SchoolRecordDeleteManyArgs} args - Arguments to filter SchoolRecords to delete.
     * @example
     * // Delete a few SchoolRecords
     * const { count } = await prisma.schoolRecord.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SchoolRecordDeleteManyArgs>(args?: SelectSubset<T, SchoolRecordDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SchoolRecords.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SchoolRecords
     * const schoolRecord = await prisma.schoolRecord.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SchoolRecordUpdateManyArgs>(args: SelectSubset<T, SchoolRecordUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SchoolRecord.
     * @param {SchoolRecordUpsertArgs} args - Arguments to update or create a SchoolRecord.
     * @example
     * // Update or create a SchoolRecord
     * const schoolRecord = await prisma.schoolRecord.upsert({
     *   create: {
     *     // ... data to create a SchoolRecord
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SchoolRecord we want to update
     *   }
     * })
     */
    upsert<T extends SchoolRecordUpsertArgs>(args: SelectSubset<T, SchoolRecordUpsertArgs<ExtArgs>>): Prisma__SchoolRecordClient<$Result.GetResult<Prisma.$SchoolRecordPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SchoolRecords.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordCountArgs} args - Arguments to filter SchoolRecords to count.
     * @example
     * // Count the number of SchoolRecords
     * const count = await prisma.schoolRecord.count({
     *   where: {
     *     // ... the filter for the SchoolRecords we want to count
     *   }
     * })
    **/
    count<T extends SchoolRecordCountArgs>(
      args?: Subset<T, SchoolRecordCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SchoolRecordCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SchoolRecord.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SchoolRecordAggregateArgs>(args: Subset<T, SchoolRecordAggregateArgs>): Prisma.PrismaPromise<GetSchoolRecordAggregateType<T>>

    /**
     * Group by SchoolRecord.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SchoolRecordGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SchoolRecordGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SchoolRecordGroupByArgs['orderBy'] }
        : { orderBy?: SchoolRecordGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SchoolRecordGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSchoolRecordGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SchoolRecord model
   */
  readonly fields: SchoolRecordFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SchoolRecord.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SchoolRecordClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SchoolRecord model
   */
  interface SchoolRecordFieldRefs {
    readonly id: FieldRef<"SchoolRecord", 'Int'>
    readonly school_name: FieldRef<"SchoolRecord", 'String'>
    readonly school_code: FieldRef<"SchoolRecord", 'Int'>
    readonly school_databasename: FieldRef<"SchoolRecord", 'String'>
    readonly school_active: FieldRef<"SchoolRecord", 'Int'>
    readonly school_approved: FieldRef<"SchoolRecord", 'Int'>
    readonly created_by: FieldRef<"SchoolRecord", 'Int'>
    readonly created_at: FieldRef<"SchoolRecord", 'DateTime'>
    readonly updated_at: FieldRef<"SchoolRecord", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * SchoolRecord findUnique
   */
  export type SchoolRecordFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter, which SchoolRecord to fetch.
     */
    where: SchoolRecordWhereUniqueInput
  }

  /**
   * SchoolRecord findUniqueOrThrow
   */
  export type SchoolRecordFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter, which SchoolRecord to fetch.
     */
    where: SchoolRecordWhereUniqueInput
  }

  /**
   * SchoolRecord findFirst
   */
  export type SchoolRecordFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter, which SchoolRecord to fetch.
     */
    where?: SchoolRecordWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolRecords to fetch.
     */
    orderBy?: SchoolRecordOrderByWithRelationInput | SchoolRecordOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolRecords.
     */
    cursor?: SchoolRecordWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolRecords from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolRecords.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolRecords.
     */
    distinct?: SchoolRecordScalarFieldEnum | SchoolRecordScalarFieldEnum[]
  }

  /**
   * SchoolRecord findFirstOrThrow
   */
  export type SchoolRecordFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter, which SchoolRecord to fetch.
     */
    where?: SchoolRecordWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolRecords to fetch.
     */
    orderBy?: SchoolRecordOrderByWithRelationInput | SchoolRecordOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SchoolRecords.
     */
    cursor?: SchoolRecordWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolRecords from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolRecords.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SchoolRecords.
     */
    distinct?: SchoolRecordScalarFieldEnum | SchoolRecordScalarFieldEnum[]
  }

  /**
   * SchoolRecord findMany
   */
  export type SchoolRecordFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter, which SchoolRecords to fetch.
     */
    where?: SchoolRecordWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SchoolRecords to fetch.
     */
    orderBy?: SchoolRecordOrderByWithRelationInput | SchoolRecordOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SchoolRecords.
     */
    cursor?: SchoolRecordWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SchoolRecords from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SchoolRecords.
     */
    skip?: number
    distinct?: SchoolRecordScalarFieldEnum | SchoolRecordScalarFieldEnum[]
  }

  /**
   * SchoolRecord create
   */
  export type SchoolRecordCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * The data needed to create a SchoolRecord.
     */
    data: XOR<SchoolRecordCreateInput, SchoolRecordUncheckedCreateInput>
  }

  /**
   * SchoolRecord createMany
   */
  export type SchoolRecordCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SchoolRecords.
     */
    data: SchoolRecordCreateManyInput | SchoolRecordCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SchoolRecord update
   */
  export type SchoolRecordUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * The data needed to update a SchoolRecord.
     */
    data: XOR<SchoolRecordUpdateInput, SchoolRecordUncheckedUpdateInput>
    /**
     * Choose, which SchoolRecord to update.
     */
    where: SchoolRecordWhereUniqueInput
  }

  /**
   * SchoolRecord updateMany
   */
  export type SchoolRecordUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SchoolRecords.
     */
    data: XOR<SchoolRecordUpdateManyMutationInput, SchoolRecordUncheckedUpdateManyInput>
    /**
     * Filter which SchoolRecords to update
     */
    where?: SchoolRecordWhereInput
    /**
     * Limit how many SchoolRecords to update.
     */
    limit?: number
  }

  /**
   * SchoolRecord upsert
   */
  export type SchoolRecordUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * The filter to search for the SchoolRecord to update in case it exists.
     */
    where: SchoolRecordWhereUniqueInput
    /**
     * In case the SchoolRecord found by the `where` argument doesn't exist, create a new SchoolRecord with this data.
     */
    create: XOR<SchoolRecordCreateInput, SchoolRecordUncheckedCreateInput>
    /**
     * In case the SchoolRecord was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SchoolRecordUpdateInput, SchoolRecordUncheckedUpdateInput>
  }

  /**
   * SchoolRecord delete
   */
  export type SchoolRecordDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
    /**
     * Filter which SchoolRecord to delete.
     */
    where: SchoolRecordWhereUniqueInput
  }

  /**
   * SchoolRecord deleteMany
   */
  export type SchoolRecordDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SchoolRecords to delete
     */
    where?: SchoolRecordWhereInput
    /**
     * Limit how many SchoolRecords to delete.
     */
    limit?: number
  }

  /**
   * SchoolRecord without action
   */
  export type SchoolRecordDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SchoolRecord
     */
    select?: SchoolRecordSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SchoolRecord
     */
    omit?: SchoolRecordOmit<ExtArgs> | null
  }


  /**
   * Model ComponentGroup
   */

  export type AggregateComponentGroup = {
    _count: ComponentGroupCountAggregateOutputType | null
    _avg: ComponentGroupAvgAggregateOutputType | null
    _sum: ComponentGroupSumAggregateOutputType | null
    _min: ComponentGroupMinAggregateOutputType | null
    _max: ComponentGroupMaxAggregateOutputType | null
  }

  export type ComponentGroupAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type ComponentGroupSumAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type ComponentGroupMinAggregateOutputType = {
    id: number | null
    component_group_name: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type ComponentGroupMaxAggregateOutputType = {
    id: number | null
    component_group_name: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type ComponentGroupCountAggregateOutputType = {
    id: number
    component_group_name: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type ComponentGroupAvgAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type ComponentGroupSumAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type ComponentGroupMinAggregateInputType = {
    id?: true
    component_group_name?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type ComponentGroupMaxAggregateInputType = {
    id?: true
    component_group_name?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type ComponentGroupCountAggregateInputType = {
    id?: true
    component_group_name?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type ComponentGroupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ComponentGroup to aggregate.
     */
    where?: ComponentGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComponentGroups to fetch.
     */
    orderBy?: ComponentGroupOrderByWithRelationInput | ComponentGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ComponentGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComponentGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComponentGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned ComponentGroups
    **/
    _count?: true | ComponentGroupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ComponentGroupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ComponentGroupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ComponentGroupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ComponentGroupMaxAggregateInputType
  }

  export type GetComponentGroupAggregateType<T extends ComponentGroupAggregateArgs> = {
        [P in keyof T & keyof AggregateComponentGroup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateComponentGroup[P]>
      : GetScalarType<T[P], AggregateComponentGroup[P]>
  }




  export type ComponentGroupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ComponentGroupWhereInput
    orderBy?: ComponentGroupOrderByWithAggregationInput | ComponentGroupOrderByWithAggregationInput[]
    by: ComponentGroupScalarFieldEnum[] | ComponentGroupScalarFieldEnum
    having?: ComponentGroupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ComponentGroupCountAggregateInputType | true
    _avg?: ComponentGroupAvgAggregateInputType
    _sum?: ComponentGroupSumAggregateInputType
    _min?: ComponentGroupMinAggregateInputType
    _max?: ComponentGroupMaxAggregateInputType
  }

  export type ComponentGroupGroupByOutputType = {
    id: number
    component_group_name: string
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: ComponentGroupCountAggregateOutputType | null
    _avg: ComponentGroupAvgAggregateOutputType | null
    _sum: ComponentGroupSumAggregateOutputType | null
    _min: ComponentGroupMinAggregateOutputType | null
    _max: ComponentGroupMaxAggregateOutputType | null
  }

  type GetComponentGroupGroupByPayload<T extends ComponentGroupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ComponentGroupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ComponentGroupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ComponentGroupGroupByOutputType[P]>
            : GetScalarType<T[P], ComponentGroupGroupByOutputType[P]>
        }
      >
    >


  export type ComponentGroupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    component_group_name?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["componentGroup"]>



  export type ComponentGroupSelectScalar = {
    id?: boolean
    component_group_name?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type ComponentGroupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "component_group_name" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["componentGroup"]>

  export type $ComponentGroupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "ComponentGroup"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      component_group_name: string
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["componentGroup"]>
    composites: {}
  }

  type ComponentGroupGetPayload<S extends boolean | null | undefined | ComponentGroupDefaultArgs> = $Result.GetResult<Prisma.$ComponentGroupPayload, S>

  type ComponentGroupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ComponentGroupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ComponentGroupCountAggregateInputType | true
    }

  export interface ComponentGroupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['ComponentGroup'], meta: { name: 'ComponentGroup' } }
    /**
     * Find zero or one ComponentGroup that matches the filter.
     * @param {ComponentGroupFindUniqueArgs} args - Arguments to find a ComponentGroup
     * @example
     * // Get one ComponentGroup
     * const componentGroup = await prisma.componentGroup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ComponentGroupFindUniqueArgs>(args: SelectSubset<T, ComponentGroupFindUniqueArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one ComponentGroup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ComponentGroupFindUniqueOrThrowArgs} args - Arguments to find a ComponentGroup
     * @example
     * // Get one ComponentGroup
     * const componentGroup = await prisma.componentGroup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ComponentGroupFindUniqueOrThrowArgs>(args: SelectSubset<T, ComponentGroupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ComponentGroup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupFindFirstArgs} args - Arguments to find a ComponentGroup
     * @example
     * // Get one ComponentGroup
     * const componentGroup = await prisma.componentGroup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ComponentGroupFindFirstArgs>(args?: SelectSubset<T, ComponentGroupFindFirstArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first ComponentGroup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupFindFirstOrThrowArgs} args - Arguments to find a ComponentGroup
     * @example
     * // Get one ComponentGroup
     * const componentGroup = await prisma.componentGroup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ComponentGroupFindFirstOrThrowArgs>(args?: SelectSubset<T, ComponentGroupFindFirstOrThrowArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more ComponentGroups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all ComponentGroups
     * const componentGroups = await prisma.componentGroup.findMany()
     * 
     * // Get first 10 ComponentGroups
     * const componentGroups = await prisma.componentGroup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const componentGroupWithIdOnly = await prisma.componentGroup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ComponentGroupFindManyArgs>(args?: SelectSubset<T, ComponentGroupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a ComponentGroup.
     * @param {ComponentGroupCreateArgs} args - Arguments to create a ComponentGroup.
     * @example
     * // Create one ComponentGroup
     * const ComponentGroup = await prisma.componentGroup.create({
     *   data: {
     *     // ... data to create a ComponentGroup
     *   }
     * })
     * 
     */
    create<T extends ComponentGroupCreateArgs>(args: SelectSubset<T, ComponentGroupCreateArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many ComponentGroups.
     * @param {ComponentGroupCreateManyArgs} args - Arguments to create many ComponentGroups.
     * @example
     * // Create many ComponentGroups
     * const componentGroup = await prisma.componentGroup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ComponentGroupCreateManyArgs>(args?: SelectSubset<T, ComponentGroupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a ComponentGroup.
     * @param {ComponentGroupDeleteArgs} args - Arguments to delete one ComponentGroup.
     * @example
     * // Delete one ComponentGroup
     * const ComponentGroup = await prisma.componentGroup.delete({
     *   where: {
     *     // ... filter to delete one ComponentGroup
     *   }
     * })
     * 
     */
    delete<T extends ComponentGroupDeleteArgs>(args: SelectSubset<T, ComponentGroupDeleteArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one ComponentGroup.
     * @param {ComponentGroupUpdateArgs} args - Arguments to update one ComponentGroup.
     * @example
     * // Update one ComponentGroup
     * const componentGroup = await prisma.componentGroup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ComponentGroupUpdateArgs>(args: SelectSubset<T, ComponentGroupUpdateArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more ComponentGroups.
     * @param {ComponentGroupDeleteManyArgs} args - Arguments to filter ComponentGroups to delete.
     * @example
     * // Delete a few ComponentGroups
     * const { count } = await prisma.componentGroup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ComponentGroupDeleteManyArgs>(args?: SelectSubset<T, ComponentGroupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more ComponentGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many ComponentGroups
     * const componentGroup = await prisma.componentGroup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ComponentGroupUpdateManyArgs>(args: SelectSubset<T, ComponentGroupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one ComponentGroup.
     * @param {ComponentGroupUpsertArgs} args - Arguments to update or create a ComponentGroup.
     * @example
     * // Update or create a ComponentGroup
     * const componentGroup = await prisma.componentGroup.upsert({
     *   create: {
     *     // ... data to create a ComponentGroup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the ComponentGroup we want to update
     *   }
     * })
     */
    upsert<T extends ComponentGroupUpsertArgs>(args: SelectSubset<T, ComponentGroupUpsertArgs<ExtArgs>>): Prisma__ComponentGroupClient<$Result.GetResult<Prisma.$ComponentGroupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of ComponentGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupCountArgs} args - Arguments to filter ComponentGroups to count.
     * @example
     * // Count the number of ComponentGroups
     * const count = await prisma.componentGroup.count({
     *   where: {
     *     // ... the filter for the ComponentGroups we want to count
     *   }
     * })
    **/
    count<T extends ComponentGroupCountArgs>(
      args?: Subset<T, ComponentGroupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ComponentGroupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a ComponentGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ComponentGroupAggregateArgs>(args: Subset<T, ComponentGroupAggregateArgs>): Prisma.PrismaPromise<GetComponentGroupAggregateType<T>>

    /**
     * Group by ComponentGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ComponentGroupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ComponentGroupGroupByArgs['orderBy'] }
        : { orderBy?: ComponentGroupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ComponentGroupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetComponentGroupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the ComponentGroup model
   */
  readonly fields: ComponentGroupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for ComponentGroup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ComponentGroupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the ComponentGroup model
   */
  interface ComponentGroupFieldRefs {
    readonly id: FieldRef<"ComponentGroup", 'Int'>
    readonly component_group_name: FieldRef<"ComponentGroup", 'String'>
    readonly created_at: FieldRef<"ComponentGroup", 'DateTime'>
    readonly created_by: FieldRef<"ComponentGroup", 'Int'>
    readonly updated_at: FieldRef<"ComponentGroup", 'DateTime'>
    readonly updated_by: FieldRef<"ComponentGroup", 'Int'>
    readonly deleted_at: FieldRef<"ComponentGroup", 'DateTime'>
    readonly deleted_by: FieldRef<"ComponentGroup", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * ComponentGroup findUnique
   */
  export type ComponentGroupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter, which ComponentGroup to fetch.
     */
    where: ComponentGroupWhereUniqueInput
  }

  /**
   * ComponentGroup findUniqueOrThrow
   */
  export type ComponentGroupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter, which ComponentGroup to fetch.
     */
    where: ComponentGroupWhereUniqueInput
  }

  /**
   * ComponentGroup findFirst
   */
  export type ComponentGroupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter, which ComponentGroup to fetch.
     */
    where?: ComponentGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComponentGroups to fetch.
     */
    orderBy?: ComponentGroupOrderByWithRelationInput | ComponentGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ComponentGroups.
     */
    cursor?: ComponentGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComponentGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComponentGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ComponentGroups.
     */
    distinct?: ComponentGroupScalarFieldEnum | ComponentGroupScalarFieldEnum[]
  }

  /**
   * ComponentGroup findFirstOrThrow
   */
  export type ComponentGroupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter, which ComponentGroup to fetch.
     */
    where?: ComponentGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComponentGroups to fetch.
     */
    orderBy?: ComponentGroupOrderByWithRelationInput | ComponentGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for ComponentGroups.
     */
    cursor?: ComponentGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComponentGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComponentGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of ComponentGroups.
     */
    distinct?: ComponentGroupScalarFieldEnum | ComponentGroupScalarFieldEnum[]
  }

  /**
   * ComponentGroup findMany
   */
  export type ComponentGroupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter, which ComponentGroups to fetch.
     */
    where?: ComponentGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of ComponentGroups to fetch.
     */
    orderBy?: ComponentGroupOrderByWithRelationInput | ComponentGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing ComponentGroups.
     */
    cursor?: ComponentGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` ComponentGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` ComponentGroups.
     */
    skip?: number
    distinct?: ComponentGroupScalarFieldEnum | ComponentGroupScalarFieldEnum[]
  }

  /**
   * ComponentGroup create
   */
  export type ComponentGroupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * The data needed to create a ComponentGroup.
     */
    data: XOR<ComponentGroupCreateInput, ComponentGroupUncheckedCreateInput>
  }

  /**
   * ComponentGroup createMany
   */
  export type ComponentGroupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many ComponentGroups.
     */
    data: ComponentGroupCreateManyInput | ComponentGroupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * ComponentGroup update
   */
  export type ComponentGroupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * The data needed to update a ComponentGroup.
     */
    data: XOR<ComponentGroupUpdateInput, ComponentGroupUncheckedUpdateInput>
    /**
     * Choose, which ComponentGroup to update.
     */
    where: ComponentGroupWhereUniqueInput
  }

  /**
   * ComponentGroup updateMany
   */
  export type ComponentGroupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update ComponentGroups.
     */
    data: XOR<ComponentGroupUpdateManyMutationInput, ComponentGroupUncheckedUpdateManyInput>
    /**
     * Filter which ComponentGroups to update
     */
    where?: ComponentGroupWhereInput
    /**
     * Limit how many ComponentGroups to update.
     */
    limit?: number
  }

  /**
   * ComponentGroup upsert
   */
  export type ComponentGroupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * The filter to search for the ComponentGroup to update in case it exists.
     */
    where: ComponentGroupWhereUniqueInput
    /**
     * In case the ComponentGroup found by the `where` argument doesn't exist, create a new ComponentGroup with this data.
     */
    create: XOR<ComponentGroupCreateInput, ComponentGroupUncheckedCreateInput>
    /**
     * In case the ComponentGroup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ComponentGroupUpdateInput, ComponentGroupUncheckedUpdateInput>
  }

  /**
   * ComponentGroup delete
   */
  export type ComponentGroupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
    /**
     * Filter which ComponentGroup to delete.
     */
    where: ComponentGroupWhereUniqueInput
  }

  /**
   * ComponentGroup deleteMany
   */
  export type ComponentGroupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which ComponentGroups to delete
     */
    where?: ComponentGroupWhereInput
    /**
     * Limit how many ComponentGroups to delete.
     */
    limit?: number
  }

  /**
   * ComponentGroup without action
   */
  export type ComponentGroupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the ComponentGroup
     */
    select?: ComponentGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the ComponentGroup
     */
    omit?: ComponentGroupOmit<ExtArgs> | null
  }


  /**
   * Model Component
   */

  export type AggregateComponent = {
    _count: ComponentCountAggregateOutputType | null
    _avg: ComponentAvgAggregateOutputType | null
    _sum: ComponentSumAggregateOutputType | null
    _min: ComponentMinAggregateOutputType | null
    _max: ComponentMaxAggregateOutputType | null
  }

  export type ComponentAvgAggregateOutputType = {
    id: number | null
    component_group_id: number | null
    is_native: number | null
    is_enabled: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type ComponentSumAggregateOutputType = {
    id: number | null
    component_group_id: number | null
    is_native: number | null
    is_enabled: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type ComponentMinAggregateOutputType = {
    id: number | null
    component_group_id: number | null
    component_name: string | null
    component_displayname: string | null
    component_desc: string | null
    component_image_url: string | null
    component_file_name: string | null
    is_native: number | null
    is_enabled: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type ComponentMaxAggregateOutputType = {
    id: number | null
    component_group_id: number | null
    component_name: string | null
    component_displayname: string | null
    component_desc: string | null
    component_image_url: string | null
    component_file_name: string | null
    is_native: number | null
    is_enabled: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type ComponentCountAggregateOutputType = {
    id: number
    component_group_id: number
    component_name: number
    component_displayname: number
    component_desc: number
    component_image_url: number
    component_file_name: number
    is_native: number
    is_enabled: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type ComponentAvgAggregateInputType = {
    id?: true
    component_group_id?: true
    is_native?: true
    is_enabled?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type ComponentSumAggregateInputType = {
    id?: true
    component_group_id?: true
    is_native?: true
    is_enabled?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type ComponentMinAggregateInputType = {
    id?: true
    component_group_id?: true
    component_name?: true
    component_displayname?: true
    component_desc?: true
    component_image_url?: true
    component_file_name?: true
    is_native?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type ComponentMaxAggregateInputType = {
    id?: true
    component_group_id?: true
    component_name?: true
    component_displayname?: true
    component_desc?: true
    component_image_url?: true
    component_file_name?: true
    is_native?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type ComponentCountAggregateInputType = {
    id?: true
    component_group_id?: true
    component_name?: true
    component_displayname?: true
    component_desc?: true
    component_image_url?: true
    component_file_name?: true
    is_native?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type ComponentAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Component to aggregate.
     */
    where?: ComponentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Components to fetch.
     */
    orderBy?: ComponentOrderByWithRelationInput | ComponentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: ComponentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Components from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Components.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Components
    **/
    _count?: true | ComponentCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: ComponentAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: ComponentSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: ComponentMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: ComponentMaxAggregateInputType
  }

  export type GetComponentAggregateType<T extends ComponentAggregateArgs> = {
        [P in keyof T & keyof AggregateComponent]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateComponent[P]>
      : GetScalarType<T[P], AggregateComponent[P]>
  }




  export type ComponentGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: ComponentWhereInput
    orderBy?: ComponentOrderByWithAggregationInput | ComponentOrderByWithAggregationInput[]
    by: ComponentScalarFieldEnum[] | ComponentScalarFieldEnum
    having?: ComponentScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: ComponentCountAggregateInputType | true
    _avg?: ComponentAvgAggregateInputType
    _sum?: ComponentSumAggregateInputType
    _min?: ComponentMinAggregateInputType
    _max?: ComponentMaxAggregateInputType
  }

  export type ComponentGroupByOutputType = {
    id: number
    component_group_id: number
    component_name: string
    component_displayname: string
    component_desc: string | null
    component_image_url: string | null
    component_file_name: string | null
    is_native: number
    is_enabled: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: ComponentCountAggregateOutputType | null
    _avg: ComponentAvgAggregateOutputType | null
    _sum: ComponentSumAggregateOutputType | null
    _min: ComponentMinAggregateOutputType | null
    _max: ComponentMaxAggregateOutputType | null
  }

  type GetComponentGroupByPayload<T extends ComponentGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<ComponentGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof ComponentGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], ComponentGroupByOutputType[P]>
            : GetScalarType<T[P], ComponentGroupByOutputType[P]>
        }
      >
    >


  export type ComponentSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    component_group_id?: boolean
    component_name?: boolean
    component_displayname?: boolean
    component_desc?: boolean
    component_image_url?: boolean
    component_file_name?: boolean
    is_native?: boolean
    is_enabled?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["component"]>



  export type ComponentSelectScalar = {
    id?: boolean
    component_group_id?: boolean
    component_name?: boolean
    component_displayname?: boolean
    component_desc?: boolean
    component_image_url?: boolean
    component_file_name?: boolean
    is_native?: boolean
    is_enabled?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type ComponentOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "component_group_id" | "component_name" | "component_displayname" | "component_desc" | "component_image_url" | "component_file_name" | "is_native" | "is_enabled" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["component"]>

  export type $ComponentPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Component"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      component_group_id: number
      component_name: string
      component_displayname: string
      component_desc: string | null
      component_image_url: string | null
      component_file_name: string | null
      is_native: number
      is_enabled: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["component"]>
    composites: {}
  }

  type ComponentGetPayload<S extends boolean | null | undefined | ComponentDefaultArgs> = $Result.GetResult<Prisma.$ComponentPayload, S>

  type ComponentCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<ComponentFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: ComponentCountAggregateInputType | true
    }

  export interface ComponentDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Component'], meta: { name: 'Component' } }
    /**
     * Find zero or one Component that matches the filter.
     * @param {ComponentFindUniqueArgs} args - Arguments to find a Component
     * @example
     * // Get one Component
     * const component = await prisma.component.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends ComponentFindUniqueArgs>(args: SelectSubset<T, ComponentFindUniqueArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Component that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {ComponentFindUniqueOrThrowArgs} args - Arguments to find a Component
     * @example
     * // Get one Component
     * const component = await prisma.component.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends ComponentFindUniqueOrThrowArgs>(args: SelectSubset<T, ComponentFindUniqueOrThrowArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Component that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentFindFirstArgs} args - Arguments to find a Component
     * @example
     * // Get one Component
     * const component = await prisma.component.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends ComponentFindFirstArgs>(args?: SelectSubset<T, ComponentFindFirstArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Component that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentFindFirstOrThrowArgs} args - Arguments to find a Component
     * @example
     * // Get one Component
     * const component = await prisma.component.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends ComponentFindFirstOrThrowArgs>(args?: SelectSubset<T, ComponentFindFirstOrThrowArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Components that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Components
     * const components = await prisma.component.findMany()
     * 
     * // Get first 10 Components
     * const components = await prisma.component.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const componentWithIdOnly = await prisma.component.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends ComponentFindManyArgs>(args?: SelectSubset<T, ComponentFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Component.
     * @param {ComponentCreateArgs} args - Arguments to create a Component.
     * @example
     * // Create one Component
     * const Component = await prisma.component.create({
     *   data: {
     *     // ... data to create a Component
     *   }
     * })
     * 
     */
    create<T extends ComponentCreateArgs>(args: SelectSubset<T, ComponentCreateArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Components.
     * @param {ComponentCreateManyArgs} args - Arguments to create many Components.
     * @example
     * // Create many Components
     * const component = await prisma.component.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends ComponentCreateManyArgs>(args?: SelectSubset<T, ComponentCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Component.
     * @param {ComponentDeleteArgs} args - Arguments to delete one Component.
     * @example
     * // Delete one Component
     * const Component = await prisma.component.delete({
     *   where: {
     *     // ... filter to delete one Component
     *   }
     * })
     * 
     */
    delete<T extends ComponentDeleteArgs>(args: SelectSubset<T, ComponentDeleteArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Component.
     * @param {ComponentUpdateArgs} args - Arguments to update one Component.
     * @example
     * // Update one Component
     * const component = await prisma.component.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends ComponentUpdateArgs>(args: SelectSubset<T, ComponentUpdateArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Components.
     * @param {ComponentDeleteManyArgs} args - Arguments to filter Components to delete.
     * @example
     * // Delete a few Components
     * const { count } = await prisma.component.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends ComponentDeleteManyArgs>(args?: SelectSubset<T, ComponentDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Components.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Components
     * const component = await prisma.component.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends ComponentUpdateManyArgs>(args: SelectSubset<T, ComponentUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Component.
     * @param {ComponentUpsertArgs} args - Arguments to update or create a Component.
     * @example
     * // Update or create a Component
     * const component = await prisma.component.upsert({
     *   create: {
     *     // ... data to create a Component
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Component we want to update
     *   }
     * })
     */
    upsert<T extends ComponentUpsertArgs>(args: SelectSubset<T, ComponentUpsertArgs<ExtArgs>>): Prisma__ComponentClient<$Result.GetResult<Prisma.$ComponentPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Components.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentCountArgs} args - Arguments to filter Components to count.
     * @example
     * // Count the number of Components
     * const count = await prisma.component.count({
     *   where: {
     *     // ... the filter for the Components we want to count
     *   }
     * })
    **/
    count<T extends ComponentCountArgs>(
      args?: Subset<T, ComponentCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], ComponentCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Component.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends ComponentAggregateArgs>(args: Subset<T, ComponentAggregateArgs>): Prisma.PrismaPromise<GetComponentAggregateType<T>>

    /**
     * Group by Component.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {ComponentGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends ComponentGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: ComponentGroupByArgs['orderBy'] }
        : { orderBy?: ComponentGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, ComponentGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetComponentGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Component model
   */
  readonly fields: ComponentFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Component.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__ComponentClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Component model
   */
  interface ComponentFieldRefs {
    readonly id: FieldRef<"Component", 'Int'>
    readonly component_group_id: FieldRef<"Component", 'Int'>
    readonly component_name: FieldRef<"Component", 'String'>
    readonly component_displayname: FieldRef<"Component", 'String'>
    readonly component_desc: FieldRef<"Component", 'String'>
    readonly component_image_url: FieldRef<"Component", 'String'>
    readonly component_file_name: FieldRef<"Component", 'String'>
    readonly is_native: FieldRef<"Component", 'Int'>
    readonly is_enabled: FieldRef<"Component", 'Int'>
    readonly created_at: FieldRef<"Component", 'DateTime'>
    readonly created_by: FieldRef<"Component", 'Int'>
    readonly updated_at: FieldRef<"Component", 'DateTime'>
    readonly updated_by: FieldRef<"Component", 'Int'>
    readonly deleted_at: FieldRef<"Component", 'DateTime'>
    readonly deleted_by: FieldRef<"Component", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * Component findUnique
   */
  export type ComponentFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter, which Component to fetch.
     */
    where: ComponentWhereUniqueInput
  }

  /**
   * Component findUniqueOrThrow
   */
  export type ComponentFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter, which Component to fetch.
     */
    where: ComponentWhereUniqueInput
  }

  /**
   * Component findFirst
   */
  export type ComponentFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter, which Component to fetch.
     */
    where?: ComponentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Components to fetch.
     */
    orderBy?: ComponentOrderByWithRelationInput | ComponentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Components.
     */
    cursor?: ComponentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Components from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Components.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Components.
     */
    distinct?: ComponentScalarFieldEnum | ComponentScalarFieldEnum[]
  }

  /**
   * Component findFirstOrThrow
   */
  export type ComponentFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter, which Component to fetch.
     */
    where?: ComponentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Components to fetch.
     */
    orderBy?: ComponentOrderByWithRelationInput | ComponentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Components.
     */
    cursor?: ComponentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Components from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Components.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Components.
     */
    distinct?: ComponentScalarFieldEnum | ComponentScalarFieldEnum[]
  }

  /**
   * Component findMany
   */
  export type ComponentFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter, which Components to fetch.
     */
    where?: ComponentWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Components to fetch.
     */
    orderBy?: ComponentOrderByWithRelationInput | ComponentOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Components.
     */
    cursor?: ComponentWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Components from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Components.
     */
    skip?: number
    distinct?: ComponentScalarFieldEnum | ComponentScalarFieldEnum[]
  }

  /**
   * Component create
   */
  export type ComponentCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * The data needed to create a Component.
     */
    data: XOR<ComponentCreateInput, ComponentUncheckedCreateInput>
  }

  /**
   * Component createMany
   */
  export type ComponentCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Components.
     */
    data: ComponentCreateManyInput | ComponentCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Component update
   */
  export type ComponentUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * The data needed to update a Component.
     */
    data: XOR<ComponentUpdateInput, ComponentUncheckedUpdateInput>
    /**
     * Choose, which Component to update.
     */
    where: ComponentWhereUniqueInput
  }

  /**
   * Component updateMany
   */
  export type ComponentUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Components.
     */
    data: XOR<ComponentUpdateManyMutationInput, ComponentUncheckedUpdateManyInput>
    /**
     * Filter which Components to update
     */
    where?: ComponentWhereInput
    /**
     * Limit how many Components to update.
     */
    limit?: number
  }

  /**
   * Component upsert
   */
  export type ComponentUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * The filter to search for the Component to update in case it exists.
     */
    where: ComponentWhereUniqueInput
    /**
     * In case the Component found by the `where` argument doesn't exist, create a new Component with this data.
     */
    create: XOR<ComponentCreateInput, ComponentUncheckedCreateInput>
    /**
     * In case the Component was found with the provided `where` argument, update it with this data.
     */
    update: XOR<ComponentUpdateInput, ComponentUncheckedUpdateInput>
  }

  /**
   * Component delete
   */
  export type ComponentDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
    /**
     * Filter which Component to delete.
     */
    where: ComponentWhereUniqueInput
  }

  /**
   * Component deleteMany
   */
  export type ComponentDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Components to delete
     */
    where?: ComponentWhereInput
    /**
     * Limit how many Components to delete.
     */
    limit?: number
  }

  /**
   * Component without action
   */
  export type ComponentDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Component
     */
    select?: ComponentSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Component
     */
    omit?: ComponentOmit<ExtArgs> | null
  }


  /**
   * Model CrudPage
   */

  export type AggregateCrudPage = {
    _count: CrudPageCountAggregateOutputType | null
    _avg: CrudPageAvgAggregateOutputType | null
    _sum: CrudPageSumAggregateOutputType | null
    _min: CrudPageMinAggregateOutputType | null
    _max: CrudPageMaxAggregateOutputType | null
  }

  export type CrudPageAvgAggregateOutputType = {
    id: number | null
    is_enabled: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type CrudPageSumAggregateOutputType = {
    id: number | null
    is_enabled: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type CrudPageMinAggregateOutputType = {
    id: number | null
    name: string | null
    is_enabled: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudPageMaxAggregateOutputType = {
    id: number | null
    name: string | null
    is_enabled: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudPageCountAggregateOutputType = {
    id: number
    name: number
    schema: number
    is_enabled: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type CrudPageAvgAggregateInputType = {
    id?: true
    is_enabled?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type CrudPageSumAggregateInputType = {
    id?: true
    is_enabled?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type CrudPageMinAggregateInputType = {
    id?: true
    name?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudPageMaxAggregateInputType = {
    id?: true
    name?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudPageCountAggregateInputType = {
    id?: true
    name?: true
    schema?: true
    is_enabled?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type CrudPageAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudPage to aggregate.
     */
    where?: CrudPageWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudPages to fetch.
     */
    orderBy?: CrudPageOrderByWithRelationInput | CrudPageOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CrudPageWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudPages from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudPages.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned CrudPages
    **/
    _count?: true | CrudPageCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CrudPageAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CrudPageSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CrudPageMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CrudPageMaxAggregateInputType
  }

  export type GetCrudPageAggregateType<T extends CrudPageAggregateArgs> = {
        [P in keyof T & keyof AggregateCrudPage]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCrudPage[P]>
      : GetScalarType<T[P], AggregateCrudPage[P]>
  }




  export type CrudPageGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CrudPageWhereInput
    orderBy?: CrudPageOrderByWithAggregationInput | CrudPageOrderByWithAggregationInput[]
    by: CrudPageScalarFieldEnum[] | CrudPageScalarFieldEnum
    having?: CrudPageScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CrudPageCountAggregateInputType | true
    _avg?: CrudPageAvgAggregateInputType
    _sum?: CrudPageSumAggregateInputType
    _min?: CrudPageMinAggregateInputType
    _max?: CrudPageMaxAggregateInputType
  }

  export type CrudPageGroupByOutputType = {
    id: number
    name: string
    schema: JsonValue
    is_enabled: number
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: CrudPageCountAggregateOutputType | null
    _avg: CrudPageAvgAggregateOutputType | null
    _sum: CrudPageSumAggregateOutputType | null
    _min: CrudPageMinAggregateOutputType | null
    _max: CrudPageMaxAggregateOutputType | null
  }

  type GetCrudPageGroupByPayload<T extends CrudPageGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CrudPageGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CrudPageGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CrudPageGroupByOutputType[P]>
            : GetScalarType<T[P], CrudPageGroupByOutputType[P]>
        }
      >
    >


  export type CrudPageSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    schema?: boolean
    is_enabled?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["crudPage"]>



  export type CrudPageSelectScalar = {
    id?: boolean
    name?: boolean
    schema?: boolean
    is_enabled?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type CrudPageOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "schema" | "is_enabled" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["crudPage"]>

  export type $CrudPagePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "CrudPage"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      schema: Prisma.JsonValue
      is_enabled: number
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["crudPage"]>
    composites: {}
  }

  type CrudPageGetPayload<S extends boolean | null | undefined | CrudPageDefaultArgs> = $Result.GetResult<Prisma.$CrudPagePayload, S>

  type CrudPageCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CrudPageFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CrudPageCountAggregateInputType | true
    }

  export interface CrudPageDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['CrudPage'], meta: { name: 'CrudPage' } }
    /**
     * Find zero or one CrudPage that matches the filter.
     * @param {CrudPageFindUniqueArgs} args - Arguments to find a CrudPage
     * @example
     * // Get one CrudPage
     * const crudPage = await prisma.crudPage.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CrudPageFindUniqueArgs>(args: SelectSubset<T, CrudPageFindUniqueArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one CrudPage that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CrudPageFindUniqueOrThrowArgs} args - Arguments to find a CrudPage
     * @example
     * // Get one CrudPage
     * const crudPage = await prisma.crudPage.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CrudPageFindUniqueOrThrowArgs>(args: SelectSubset<T, CrudPageFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudPage that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageFindFirstArgs} args - Arguments to find a CrudPage
     * @example
     * // Get one CrudPage
     * const crudPage = await prisma.crudPage.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CrudPageFindFirstArgs>(args?: SelectSubset<T, CrudPageFindFirstArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudPage that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageFindFirstOrThrowArgs} args - Arguments to find a CrudPage
     * @example
     * // Get one CrudPage
     * const crudPage = await prisma.crudPage.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CrudPageFindFirstOrThrowArgs>(args?: SelectSubset<T, CrudPageFindFirstOrThrowArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more CrudPages that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all CrudPages
     * const crudPages = await prisma.crudPage.findMany()
     * 
     * // Get first 10 CrudPages
     * const crudPages = await prisma.crudPage.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const crudPageWithIdOnly = await prisma.crudPage.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CrudPageFindManyArgs>(args?: SelectSubset<T, CrudPageFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a CrudPage.
     * @param {CrudPageCreateArgs} args - Arguments to create a CrudPage.
     * @example
     * // Create one CrudPage
     * const CrudPage = await prisma.crudPage.create({
     *   data: {
     *     // ... data to create a CrudPage
     *   }
     * })
     * 
     */
    create<T extends CrudPageCreateArgs>(args: SelectSubset<T, CrudPageCreateArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many CrudPages.
     * @param {CrudPageCreateManyArgs} args - Arguments to create many CrudPages.
     * @example
     * // Create many CrudPages
     * const crudPage = await prisma.crudPage.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CrudPageCreateManyArgs>(args?: SelectSubset<T, CrudPageCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a CrudPage.
     * @param {CrudPageDeleteArgs} args - Arguments to delete one CrudPage.
     * @example
     * // Delete one CrudPage
     * const CrudPage = await prisma.crudPage.delete({
     *   where: {
     *     // ... filter to delete one CrudPage
     *   }
     * })
     * 
     */
    delete<T extends CrudPageDeleteArgs>(args: SelectSubset<T, CrudPageDeleteArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one CrudPage.
     * @param {CrudPageUpdateArgs} args - Arguments to update one CrudPage.
     * @example
     * // Update one CrudPage
     * const crudPage = await prisma.crudPage.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CrudPageUpdateArgs>(args: SelectSubset<T, CrudPageUpdateArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more CrudPages.
     * @param {CrudPageDeleteManyArgs} args - Arguments to filter CrudPages to delete.
     * @example
     * // Delete a few CrudPages
     * const { count } = await prisma.crudPage.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CrudPageDeleteManyArgs>(args?: SelectSubset<T, CrudPageDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more CrudPages.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many CrudPages
     * const crudPage = await prisma.crudPage.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CrudPageUpdateManyArgs>(args: SelectSubset<T, CrudPageUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one CrudPage.
     * @param {CrudPageUpsertArgs} args - Arguments to update or create a CrudPage.
     * @example
     * // Update or create a CrudPage
     * const crudPage = await prisma.crudPage.upsert({
     *   create: {
     *     // ... data to create a CrudPage
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the CrudPage we want to update
     *   }
     * })
     */
    upsert<T extends CrudPageUpsertArgs>(args: SelectSubset<T, CrudPageUpsertArgs<ExtArgs>>): Prisma__CrudPageClient<$Result.GetResult<Prisma.$CrudPagePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of CrudPages.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageCountArgs} args - Arguments to filter CrudPages to count.
     * @example
     * // Count the number of CrudPages
     * const count = await prisma.crudPage.count({
     *   where: {
     *     // ... the filter for the CrudPages we want to count
     *   }
     * })
    **/
    count<T extends CrudPageCountArgs>(
      args?: Subset<T, CrudPageCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CrudPageCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a CrudPage.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CrudPageAggregateArgs>(args: Subset<T, CrudPageAggregateArgs>): Prisma.PrismaPromise<GetCrudPageAggregateType<T>>

    /**
     * Group by CrudPage.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudPageGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CrudPageGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CrudPageGroupByArgs['orderBy'] }
        : { orderBy?: CrudPageGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CrudPageGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCrudPageGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the CrudPage model
   */
  readonly fields: CrudPageFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for CrudPage.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CrudPageClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the CrudPage model
   */
  interface CrudPageFieldRefs {
    readonly id: FieldRef<"CrudPage", 'Int'>
    readonly name: FieldRef<"CrudPage", 'String'>
    readonly schema: FieldRef<"CrudPage", 'Json'>
    readonly is_enabled: FieldRef<"CrudPage", 'Int'>
    readonly created_at: FieldRef<"CrudPage", 'DateTime'>
    readonly created_by: FieldRef<"CrudPage", 'Int'>
    readonly updated_at: FieldRef<"CrudPage", 'DateTime'>
    readonly updated_by: FieldRef<"CrudPage", 'Int'>
    readonly deleted_at: FieldRef<"CrudPage", 'DateTime'>
    readonly deleted_by: FieldRef<"CrudPage", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * CrudPage findUnique
   */
  export type CrudPageFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter, which CrudPage to fetch.
     */
    where: CrudPageWhereUniqueInput
  }

  /**
   * CrudPage findUniqueOrThrow
   */
  export type CrudPageFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter, which CrudPage to fetch.
     */
    where: CrudPageWhereUniqueInput
  }

  /**
   * CrudPage findFirst
   */
  export type CrudPageFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter, which CrudPage to fetch.
     */
    where?: CrudPageWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudPages to fetch.
     */
    orderBy?: CrudPageOrderByWithRelationInput | CrudPageOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudPages.
     */
    cursor?: CrudPageWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudPages from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudPages.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudPages.
     */
    distinct?: CrudPageScalarFieldEnum | CrudPageScalarFieldEnum[]
  }

  /**
   * CrudPage findFirstOrThrow
   */
  export type CrudPageFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter, which CrudPage to fetch.
     */
    where?: CrudPageWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudPages to fetch.
     */
    orderBy?: CrudPageOrderByWithRelationInput | CrudPageOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudPages.
     */
    cursor?: CrudPageWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudPages from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudPages.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudPages.
     */
    distinct?: CrudPageScalarFieldEnum | CrudPageScalarFieldEnum[]
  }

  /**
   * CrudPage findMany
   */
  export type CrudPageFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter, which CrudPages to fetch.
     */
    where?: CrudPageWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudPages to fetch.
     */
    orderBy?: CrudPageOrderByWithRelationInput | CrudPageOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing CrudPages.
     */
    cursor?: CrudPageWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudPages from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudPages.
     */
    skip?: number
    distinct?: CrudPageScalarFieldEnum | CrudPageScalarFieldEnum[]
  }

  /**
   * CrudPage create
   */
  export type CrudPageCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * The data needed to create a CrudPage.
     */
    data: XOR<CrudPageCreateInput, CrudPageUncheckedCreateInput>
  }

  /**
   * CrudPage createMany
   */
  export type CrudPageCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many CrudPages.
     */
    data: CrudPageCreateManyInput | CrudPageCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * CrudPage update
   */
  export type CrudPageUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * The data needed to update a CrudPage.
     */
    data: XOR<CrudPageUpdateInput, CrudPageUncheckedUpdateInput>
    /**
     * Choose, which CrudPage to update.
     */
    where: CrudPageWhereUniqueInput
  }

  /**
   * CrudPage updateMany
   */
  export type CrudPageUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update CrudPages.
     */
    data: XOR<CrudPageUpdateManyMutationInput, CrudPageUncheckedUpdateManyInput>
    /**
     * Filter which CrudPages to update
     */
    where?: CrudPageWhereInput
    /**
     * Limit how many CrudPages to update.
     */
    limit?: number
  }

  /**
   * CrudPage upsert
   */
  export type CrudPageUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * The filter to search for the CrudPage to update in case it exists.
     */
    where: CrudPageWhereUniqueInput
    /**
     * In case the CrudPage found by the `where` argument doesn't exist, create a new CrudPage with this data.
     */
    create: XOR<CrudPageCreateInput, CrudPageUncheckedCreateInput>
    /**
     * In case the CrudPage was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CrudPageUpdateInput, CrudPageUncheckedUpdateInput>
  }

  /**
   * CrudPage delete
   */
  export type CrudPageDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
    /**
     * Filter which CrudPage to delete.
     */
    where: CrudPageWhereUniqueInput
  }

  /**
   * CrudPage deleteMany
   */
  export type CrudPageDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudPages to delete
     */
    where?: CrudPageWhereInput
    /**
     * Limit how many CrudPages to delete.
     */
    limit?: number
  }

  /**
   * CrudPage without action
   */
  export type CrudPageDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudPage
     */
    select?: CrudPageSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudPage
     */
    omit?: CrudPageOmit<ExtArgs> | null
  }


  /**
   * Model AppUserType
   */

  export type AggregateAppUserType = {
    _count: AppUserTypeCountAggregateOutputType | null
    _avg: AppUserTypeAvgAggregateOutputType | null
    _sum: AppUserTypeSumAggregateOutputType | null
    _min: AppUserTypeMinAggregateOutputType | null
    _max: AppUserTypeMaxAggregateOutputType | null
  }

  export type AppUserTypeAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type AppUserTypeSumAggregateOutputType = {
    id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type AppUserTypeMinAggregateOutputType = {
    id: number | null
    app_user_type: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type AppUserTypeMaxAggregateOutputType = {
    id: number | null
    app_user_type: string | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type AppUserTypeCountAggregateOutputType = {
    id: number
    app_user_type: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type AppUserTypeAvgAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type AppUserTypeSumAggregateInputType = {
    id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type AppUserTypeMinAggregateInputType = {
    id?: true
    app_user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type AppUserTypeMaxAggregateInputType = {
    id?: true
    app_user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type AppUserTypeCountAggregateInputType = {
    id?: true
    app_user_type?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type AppUserTypeAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which AppUserType to aggregate.
     */
    where?: AppUserTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AppUserTypes to fetch.
     */
    orderBy?: AppUserTypeOrderByWithRelationInput | AppUserTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: AppUserTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AppUserTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AppUserTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned AppUserTypes
    **/
    _count?: true | AppUserTypeCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: AppUserTypeAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: AppUserTypeSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: AppUserTypeMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: AppUserTypeMaxAggregateInputType
  }

  export type GetAppUserTypeAggregateType<T extends AppUserTypeAggregateArgs> = {
        [P in keyof T & keyof AggregateAppUserType]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateAppUserType[P]>
      : GetScalarType<T[P], AggregateAppUserType[P]>
  }




  export type AppUserTypeGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: AppUserTypeWhereInput
    orderBy?: AppUserTypeOrderByWithAggregationInput | AppUserTypeOrderByWithAggregationInput[]
    by: AppUserTypeScalarFieldEnum[] | AppUserTypeScalarFieldEnum
    having?: AppUserTypeScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: AppUserTypeCountAggregateInputType | true
    _avg?: AppUserTypeAvgAggregateInputType
    _sum?: AppUserTypeSumAggregateInputType
    _min?: AppUserTypeMinAggregateInputType
    _max?: AppUserTypeMaxAggregateInputType
  }

  export type AppUserTypeGroupByOutputType = {
    id: number
    app_user_type: string
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: AppUserTypeCountAggregateOutputType | null
    _avg: AppUserTypeAvgAggregateOutputType | null
    _sum: AppUserTypeSumAggregateOutputType | null
    _min: AppUserTypeMinAggregateOutputType | null
    _max: AppUserTypeMaxAggregateOutputType | null
  }

  type GetAppUserTypeGroupByPayload<T extends AppUserTypeGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<AppUserTypeGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof AppUserTypeGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], AppUserTypeGroupByOutputType[P]>
            : GetScalarType<T[P], AppUserTypeGroupByOutputType[P]>
        }
      >
    >


  export type AppUserTypeSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    app_user_type?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["appUserType"]>



  export type AppUserTypeSelectScalar = {
    id?: boolean
    app_user_type?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type AppUserTypeOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "app_user_type" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["appUserType"]>

  export type $AppUserTypePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "AppUserType"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      app_user_type: string
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["appUserType"]>
    composites: {}
  }

  type AppUserTypeGetPayload<S extends boolean | null | undefined | AppUserTypeDefaultArgs> = $Result.GetResult<Prisma.$AppUserTypePayload, S>

  type AppUserTypeCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<AppUserTypeFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: AppUserTypeCountAggregateInputType | true
    }

  export interface AppUserTypeDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['AppUserType'], meta: { name: 'AppUserType' } }
    /**
     * Find zero or one AppUserType that matches the filter.
     * @param {AppUserTypeFindUniqueArgs} args - Arguments to find a AppUserType
     * @example
     * // Get one AppUserType
     * const appUserType = await prisma.appUserType.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends AppUserTypeFindUniqueArgs>(args: SelectSubset<T, AppUserTypeFindUniqueArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one AppUserType that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {AppUserTypeFindUniqueOrThrowArgs} args - Arguments to find a AppUserType
     * @example
     * // Get one AppUserType
     * const appUserType = await prisma.appUserType.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends AppUserTypeFindUniqueOrThrowArgs>(args: SelectSubset<T, AppUserTypeFindUniqueOrThrowArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first AppUserType that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeFindFirstArgs} args - Arguments to find a AppUserType
     * @example
     * // Get one AppUserType
     * const appUserType = await prisma.appUserType.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends AppUserTypeFindFirstArgs>(args?: SelectSubset<T, AppUserTypeFindFirstArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first AppUserType that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeFindFirstOrThrowArgs} args - Arguments to find a AppUserType
     * @example
     * // Get one AppUserType
     * const appUserType = await prisma.appUserType.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends AppUserTypeFindFirstOrThrowArgs>(args?: SelectSubset<T, AppUserTypeFindFirstOrThrowArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more AppUserTypes that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all AppUserTypes
     * const appUserTypes = await prisma.appUserType.findMany()
     * 
     * // Get first 10 AppUserTypes
     * const appUserTypes = await prisma.appUserType.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const appUserTypeWithIdOnly = await prisma.appUserType.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends AppUserTypeFindManyArgs>(args?: SelectSubset<T, AppUserTypeFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a AppUserType.
     * @param {AppUserTypeCreateArgs} args - Arguments to create a AppUserType.
     * @example
     * // Create one AppUserType
     * const AppUserType = await prisma.appUserType.create({
     *   data: {
     *     // ... data to create a AppUserType
     *   }
     * })
     * 
     */
    create<T extends AppUserTypeCreateArgs>(args: SelectSubset<T, AppUserTypeCreateArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many AppUserTypes.
     * @param {AppUserTypeCreateManyArgs} args - Arguments to create many AppUserTypes.
     * @example
     * // Create many AppUserTypes
     * const appUserType = await prisma.appUserType.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends AppUserTypeCreateManyArgs>(args?: SelectSubset<T, AppUserTypeCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a AppUserType.
     * @param {AppUserTypeDeleteArgs} args - Arguments to delete one AppUserType.
     * @example
     * // Delete one AppUserType
     * const AppUserType = await prisma.appUserType.delete({
     *   where: {
     *     // ... filter to delete one AppUserType
     *   }
     * })
     * 
     */
    delete<T extends AppUserTypeDeleteArgs>(args: SelectSubset<T, AppUserTypeDeleteArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one AppUserType.
     * @param {AppUserTypeUpdateArgs} args - Arguments to update one AppUserType.
     * @example
     * // Update one AppUserType
     * const appUserType = await prisma.appUserType.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends AppUserTypeUpdateArgs>(args: SelectSubset<T, AppUserTypeUpdateArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more AppUserTypes.
     * @param {AppUserTypeDeleteManyArgs} args - Arguments to filter AppUserTypes to delete.
     * @example
     * // Delete a few AppUserTypes
     * const { count } = await prisma.appUserType.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends AppUserTypeDeleteManyArgs>(args?: SelectSubset<T, AppUserTypeDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more AppUserTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many AppUserTypes
     * const appUserType = await prisma.appUserType.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends AppUserTypeUpdateManyArgs>(args: SelectSubset<T, AppUserTypeUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one AppUserType.
     * @param {AppUserTypeUpsertArgs} args - Arguments to update or create a AppUserType.
     * @example
     * // Update or create a AppUserType
     * const appUserType = await prisma.appUserType.upsert({
     *   create: {
     *     // ... data to create a AppUserType
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the AppUserType we want to update
     *   }
     * })
     */
    upsert<T extends AppUserTypeUpsertArgs>(args: SelectSubset<T, AppUserTypeUpsertArgs<ExtArgs>>): Prisma__AppUserTypeClient<$Result.GetResult<Prisma.$AppUserTypePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of AppUserTypes.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeCountArgs} args - Arguments to filter AppUserTypes to count.
     * @example
     * // Count the number of AppUserTypes
     * const count = await prisma.appUserType.count({
     *   where: {
     *     // ... the filter for the AppUserTypes we want to count
     *   }
     * })
    **/
    count<T extends AppUserTypeCountArgs>(
      args?: Subset<T, AppUserTypeCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], AppUserTypeCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a AppUserType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends AppUserTypeAggregateArgs>(args: Subset<T, AppUserTypeAggregateArgs>): Prisma.PrismaPromise<GetAppUserTypeAggregateType<T>>

    /**
     * Group by AppUserType.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {AppUserTypeGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends AppUserTypeGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: AppUserTypeGroupByArgs['orderBy'] }
        : { orderBy?: AppUserTypeGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, AppUserTypeGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetAppUserTypeGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the AppUserType model
   */
  readonly fields: AppUserTypeFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for AppUserType.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__AppUserTypeClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the AppUserType model
   */
  interface AppUserTypeFieldRefs {
    readonly id: FieldRef<"AppUserType", 'Int'>
    readonly app_user_type: FieldRef<"AppUserType", 'String'>
    readonly created_at: FieldRef<"AppUserType", 'DateTime'>
    readonly created_by: FieldRef<"AppUserType", 'Int'>
    readonly updated_at: FieldRef<"AppUserType", 'DateTime'>
    readonly updated_by: FieldRef<"AppUserType", 'Int'>
    readonly deleted_at: FieldRef<"AppUserType", 'DateTime'>
    readonly deleted_by: FieldRef<"AppUserType", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * AppUserType findUnique
   */
  export type AppUserTypeFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter, which AppUserType to fetch.
     */
    where: AppUserTypeWhereUniqueInput
  }

  /**
   * AppUserType findUniqueOrThrow
   */
  export type AppUserTypeFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter, which AppUserType to fetch.
     */
    where: AppUserTypeWhereUniqueInput
  }

  /**
   * AppUserType findFirst
   */
  export type AppUserTypeFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter, which AppUserType to fetch.
     */
    where?: AppUserTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AppUserTypes to fetch.
     */
    orderBy?: AppUserTypeOrderByWithRelationInput | AppUserTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for AppUserTypes.
     */
    cursor?: AppUserTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AppUserTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AppUserTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of AppUserTypes.
     */
    distinct?: AppUserTypeScalarFieldEnum | AppUserTypeScalarFieldEnum[]
  }

  /**
   * AppUserType findFirstOrThrow
   */
  export type AppUserTypeFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter, which AppUserType to fetch.
     */
    where?: AppUserTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AppUserTypes to fetch.
     */
    orderBy?: AppUserTypeOrderByWithRelationInput | AppUserTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for AppUserTypes.
     */
    cursor?: AppUserTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AppUserTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AppUserTypes.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of AppUserTypes.
     */
    distinct?: AppUserTypeScalarFieldEnum | AppUserTypeScalarFieldEnum[]
  }

  /**
   * AppUserType findMany
   */
  export type AppUserTypeFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter, which AppUserTypes to fetch.
     */
    where?: AppUserTypeWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of AppUserTypes to fetch.
     */
    orderBy?: AppUserTypeOrderByWithRelationInput | AppUserTypeOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing AppUserTypes.
     */
    cursor?: AppUserTypeWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` AppUserTypes from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` AppUserTypes.
     */
    skip?: number
    distinct?: AppUserTypeScalarFieldEnum | AppUserTypeScalarFieldEnum[]
  }

  /**
   * AppUserType create
   */
  export type AppUserTypeCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * The data needed to create a AppUserType.
     */
    data: XOR<AppUserTypeCreateInput, AppUserTypeUncheckedCreateInput>
  }

  /**
   * AppUserType createMany
   */
  export type AppUserTypeCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many AppUserTypes.
     */
    data: AppUserTypeCreateManyInput | AppUserTypeCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * AppUserType update
   */
  export type AppUserTypeUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * The data needed to update a AppUserType.
     */
    data: XOR<AppUserTypeUpdateInput, AppUserTypeUncheckedUpdateInput>
    /**
     * Choose, which AppUserType to update.
     */
    where: AppUserTypeWhereUniqueInput
  }

  /**
   * AppUserType updateMany
   */
  export type AppUserTypeUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update AppUserTypes.
     */
    data: XOR<AppUserTypeUpdateManyMutationInput, AppUserTypeUncheckedUpdateManyInput>
    /**
     * Filter which AppUserTypes to update
     */
    where?: AppUserTypeWhereInput
    /**
     * Limit how many AppUserTypes to update.
     */
    limit?: number
  }

  /**
   * AppUserType upsert
   */
  export type AppUserTypeUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * The filter to search for the AppUserType to update in case it exists.
     */
    where: AppUserTypeWhereUniqueInput
    /**
     * In case the AppUserType found by the `where` argument doesn't exist, create a new AppUserType with this data.
     */
    create: XOR<AppUserTypeCreateInput, AppUserTypeUncheckedCreateInput>
    /**
     * In case the AppUserType was found with the provided `where` argument, update it with this data.
     */
    update: XOR<AppUserTypeUpdateInput, AppUserTypeUncheckedUpdateInput>
  }

  /**
   * AppUserType delete
   */
  export type AppUserTypeDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
    /**
     * Filter which AppUserType to delete.
     */
    where: AppUserTypeWhereUniqueInput
  }

  /**
   * AppUserType deleteMany
   */
  export type AppUserTypeDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which AppUserTypes to delete
     */
    where?: AppUserTypeWhereInput
    /**
     * Limit how many AppUserTypes to delete.
     */
    limit?: number
  }

  /**
   * AppUserType without action
   */
  export type AppUserTypeDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the AppUserType
     */
    select?: AppUserTypeSelect<ExtArgs> | null
    /**
     * Omit specific fields from the AppUserType
     */
    omit?: AppUserTypeOmit<ExtArgs> | null
  }


  /**
   * Model MenuGroup
   */

  export type AggregateMenuGroup = {
    _count: MenuGroupCountAggregateOutputType | null
    _avg: MenuGroupAvgAggregateOutputType | null
    _sum: MenuGroupSumAggregateOutputType | null
    _min: MenuGroupMinAggregateOutputType | null
    _max: MenuGroupMaxAggregateOutputType | null
  }

  export type MenuGroupAvgAggregateOutputType = {
    id: number | null
    menu_group_sort: number | null
    menu_active: number | null
    is_root: number | null
    parent_group_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type MenuGroupSumAggregateOutputType = {
    id: number | null
    menu_group_sort: number | null
    menu_active: number | null
    is_root: number | null
    parent_group_id: number | null
    created_by: number | null
    updated_by: number | null
    deleted_by: number | null
  }

  export type MenuGroupMinAggregateOutputType = {
    id: number | null
    menu_group_name: string | null
    menu_group_sort: number | null
    menu_group_icon: string | null
    menu_active: number | null
    is_root: number | null
    parent_group_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type MenuGroupMaxAggregateOutputType = {
    id: number | null
    menu_group_name: string | null
    menu_group_sort: number | null
    menu_group_icon: string | null
    menu_active: number | null
    is_root: number | null
    parent_group_id: number | null
    created_at: Date | null
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type MenuGroupCountAggregateOutputType = {
    id: number
    menu_group_name: number
    menu_group_sort: number
    menu_group_icon: number
    menu_active: number
    is_root: number
    parent_group_id: number
    created_at: number
    created_by: number
    updated_at: number
    updated_by: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type MenuGroupAvgAggregateInputType = {
    id?: true
    menu_group_sort?: true
    menu_active?: true
    is_root?: true
    parent_group_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type MenuGroupSumAggregateInputType = {
    id?: true
    menu_group_sort?: true
    menu_active?: true
    is_root?: true
    parent_group_id?: true
    created_by?: true
    updated_by?: true
    deleted_by?: true
  }

  export type MenuGroupMinAggregateInputType = {
    id?: true
    menu_group_name?: true
    menu_group_sort?: true
    menu_group_icon?: true
    menu_active?: true
    is_root?: true
    parent_group_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type MenuGroupMaxAggregateInputType = {
    id?: true
    menu_group_name?: true
    menu_group_sort?: true
    menu_group_icon?: true
    menu_active?: true
    is_root?: true
    parent_group_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type MenuGroupCountAggregateInputType = {
    id?: true
    menu_group_name?: true
    menu_group_sort?: true
    menu_group_icon?: true
    menu_active?: true
    is_root?: true
    parent_group_id?: true
    created_at?: true
    created_by?: true
    updated_at?: true
    updated_by?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type MenuGroupAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which MenuGroup to aggregate.
     */
    where?: MenuGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MenuGroups to fetch.
     */
    orderBy?: MenuGroupOrderByWithRelationInput | MenuGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: MenuGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MenuGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MenuGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned MenuGroups
    **/
    _count?: true | MenuGroupCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: MenuGroupAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: MenuGroupSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: MenuGroupMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: MenuGroupMaxAggregateInputType
  }

  export type GetMenuGroupAggregateType<T extends MenuGroupAggregateArgs> = {
        [P in keyof T & keyof AggregateMenuGroup]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateMenuGroup[P]>
      : GetScalarType<T[P], AggregateMenuGroup[P]>
  }




  export type MenuGroupGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: MenuGroupWhereInput
    orderBy?: MenuGroupOrderByWithAggregationInput | MenuGroupOrderByWithAggregationInput[]
    by: MenuGroupScalarFieldEnum[] | MenuGroupScalarFieldEnum
    having?: MenuGroupScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: MenuGroupCountAggregateInputType | true
    _avg?: MenuGroupAvgAggregateInputType
    _sum?: MenuGroupSumAggregateInputType
    _min?: MenuGroupMinAggregateInputType
    _max?: MenuGroupMaxAggregateInputType
  }

  export type MenuGroupGroupByOutputType = {
    id: number
    menu_group_name: string
    menu_group_sort: number | null
    menu_group_icon: string | null
    menu_active: number
    is_root: number
    parent_group_id: number | null
    created_at: Date
    created_by: number | null
    updated_at: Date | null
    updated_by: number | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: MenuGroupCountAggregateOutputType | null
    _avg: MenuGroupAvgAggregateOutputType | null
    _sum: MenuGroupSumAggregateOutputType | null
    _min: MenuGroupMinAggregateOutputType | null
    _max: MenuGroupMaxAggregateOutputType | null
  }

  type GetMenuGroupGroupByPayload<T extends MenuGroupGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<MenuGroupGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof MenuGroupGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], MenuGroupGroupByOutputType[P]>
            : GetScalarType<T[P], MenuGroupGroupByOutputType[P]>
        }
      >
    >


  export type MenuGroupSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    menu_group_name?: boolean
    menu_group_sort?: boolean
    menu_group_icon?: boolean
    menu_active?: boolean
    is_root?: boolean
    parent_group_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["menuGroup"]>



  export type MenuGroupSelectScalar = {
    id?: boolean
    menu_group_name?: boolean
    menu_group_sort?: boolean
    menu_group_icon?: boolean
    menu_active?: boolean
    is_root?: boolean
    parent_group_id?: boolean
    created_at?: boolean
    created_by?: boolean
    updated_at?: boolean
    updated_by?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type MenuGroupOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "menu_group_name" | "menu_group_sort" | "menu_group_icon" | "menu_active" | "is_root" | "parent_group_id" | "created_at" | "created_by" | "updated_at" | "updated_by" | "deleted_at" | "deleted_by", ExtArgs["result"]["menuGroup"]>

  export type $MenuGroupPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "MenuGroup"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      menu_group_name: string
      menu_group_sort: number | null
      menu_group_icon: string | null
      menu_active: number
      is_root: number
      parent_group_id: number | null
      created_at: Date
      created_by: number | null
      updated_at: Date | null
      updated_by: number | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["menuGroup"]>
    composites: {}
  }

  type MenuGroupGetPayload<S extends boolean | null | undefined | MenuGroupDefaultArgs> = $Result.GetResult<Prisma.$MenuGroupPayload, S>

  type MenuGroupCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<MenuGroupFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: MenuGroupCountAggregateInputType | true
    }

  export interface MenuGroupDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['MenuGroup'], meta: { name: 'MenuGroup' } }
    /**
     * Find zero or one MenuGroup that matches the filter.
     * @param {MenuGroupFindUniqueArgs} args - Arguments to find a MenuGroup
     * @example
     * // Get one MenuGroup
     * const menuGroup = await prisma.menuGroup.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends MenuGroupFindUniqueArgs>(args: SelectSubset<T, MenuGroupFindUniqueArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one MenuGroup that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {MenuGroupFindUniqueOrThrowArgs} args - Arguments to find a MenuGroup
     * @example
     * // Get one MenuGroup
     * const menuGroup = await prisma.menuGroup.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends MenuGroupFindUniqueOrThrowArgs>(args: SelectSubset<T, MenuGroupFindUniqueOrThrowArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first MenuGroup that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupFindFirstArgs} args - Arguments to find a MenuGroup
     * @example
     * // Get one MenuGroup
     * const menuGroup = await prisma.menuGroup.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends MenuGroupFindFirstArgs>(args?: SelectSubset<T, MenuGroupFindFirstArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first MenuGroup that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupFindFirstOrThrowArgs} args - Arguments to find a MenuGroup
     * @example
     * // Get one MenuGroup
     * const menuGroup = await prisma.menuGroup.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends MenuGroupFindFirstOrThrowArgs>(args?: SelectSubset<T, MenuGroupFindFirstOrThrowArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more MenuGroups that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all MenuGroups
     * const menuGroups = await prisma.menuGroup.findMany()
     * 
     * // Get first 10 MenuGroups
     * const menuGroups = await prisma.menuGroup.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const menuGroupWithIdOnly = await prisma.menuGroup.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends MenuGroupFindManyArgs>(args?: SelectSubset<T, MenuGroupFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a MenuGroup.
     * @param {MenuGroupCreateArgs} args - Arguments to create a MenuGroup.
     * @example
     * // Create one MenuGroup
     * const MenuGroup = await prisma.menuGroup.create({
     *   data: {
     *     // ... data to create a MenuGroup
     *   }
     * })
     * 
     */
    create<T extends MenuGroupCreateArgs>(args: SelectSubset<T, MenuGroupCreateArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many MenuGroups.
     * @param {MenuGroupCreateManyArgs} args - Arguments to create many MenuGroups.
     * @example
     * // Create many MenuGroups
     * const menuGroup = await prisma.menuGroup.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends MenuGroupCreateManyArgs>(args?: SelectSubset<T, MenuGroupCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a MenuGroup.
     * @param {MenuGroupDeleteArgs} args - Arguments to delete one MenuGroup.
     * @example
     * // Delete one MenuGroup
     * const MenuGroup = await prisma.menuGroup.delete({
     *   where: {
     *     // ... filter to delete one MenuGroup
     *   }
     * })
     * 
     */
    delete<T extends MenuGroupDeleteArgs>(args: SelectSubset<T, MenuGroupDeleteArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one MenuGroup.
     * @param {MenuGroupUpdateArgs} args - Arguments to update one MenuGroup.
     * @example
     * // Update one MenuGroup
     * const menuGroup = await prisma.menuGroup.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends MenuGroupUpdateArgs>(args: SelectSubset<T, MenuGroupUpdateArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more MenuGroups.
     * @param {MenuGroupDeleteManyArgs} args - Arguments to filter MenuGroups to delete.
     * @example
     * // Delete a few MenuGroups
     * const { count } = await prisma.menuGroup.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends MenuGroupDeleteManyArgs>(args?: SelectSubset<T, MenuGroupDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more MenuGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many MenuGroups
     * const menuGroup = await prisma.menuGroup.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends MenuGroupUpdateManyArgs>(args: SelectSubset<T, MenuGroupUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one MenuGroup.
     * @param {MenuGroupUpsertArgs} args - Arguments to update or create a MenuGroup.
     * @example
     * // Update or create a MenuGroup
     * const menuGroup = await prisma.menuGroup.upsert({
     *   create: {
     *     // ... data to create a MenuGroup
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the MenuGroup we want to update
     *   }
     * })
     */
    upsert<T extends MenuGroupUpsertArgs>(args: SelectSubset<T, MenuGroupUpsertArgs<ExtArgs>>): Prisma__MenuGroupClient<$Result.GetResult<Prisma.$MenuGroupPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of MenuGroups.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupCountArgs} args - Arguments to filter MenuGroups to count.
     * @example
     * // Count the number of MenuGroups
     * const count = await prisma.menuGroup.count({
     *   where: {
     *     // ... the filter for the MenuGroups we want to count
     *   }
     * })
    **/
    count<T extends MenuGroupCountArgs>(
      args?: Subset<T, MenuGroupCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], MenuGroupCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a MenuGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends MenuGroupAggregateArgs>(args: Subset<T, MenuGroupAggregateArgs>): Prisma.PrismaPromise<GetMenuGroupAggregateType<T>>

    /**
     * Group by MenuGroup.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {MenuGroupGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends MenuGroupGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: MenuGroupGroupByArgs['orderBy'] }
        : { orderBy?: MenuGroupGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, MenuGroupGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetMenuGroupGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the MenuGroup model
   */
  readonly fields: MenuGroupFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for MenuGroup.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__MenuGroupClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the MenuGroup model
   */
  interface MenuGroupFieldRefs {
    readonly id: FieldRef<"MenuGroup", 'Int'>
    readonly menu_group_name: FieldRef<"MenuGroup", 'String'>
    readonly menu_group_sort: FieldRef<"MenuGroup", 'Int'>
    readonly menu_group_icon: FieldRef<"MenuGroup", 'String'>
    readonly menu_active: FieldRef<"MenuGroup", 'Int'>
    readonly is_root: FieldRef<"MenuGroup", 'Int'>
    readonly parent_group_id: FieldRef<"MenuGroup", 'Int'>
    readonly created_at: FieldRef<"MenuGroup", 'DateTime'>
    readonly created_by: FieldRef<"MenuGroup", 'Int'>
    readonly updated_at: FieldRef<"MenuGroup", 'DateTime'>
    readonly updated_by: FieldRef<"MenuGroup", 'Int'>
    readonly deleted_at: FieldRef<"MenuGroup", 'DateTime'>
    readonly deleted_by: FieldRef<"MenuGroup", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * MenuGroup findUnique
   */
  export type MenuGroupFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter, which MenuGroup to fetch.
     */
    where: MenuGroupWhereUniqueInput
  }

  /**
   * MenuGroup findUniqueOrThrow
   */
  export type MenuGroupFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter, which MenuGroup to fetch.
     */
    where: MenuGroupWhereUniqueInput
  }

  /**
   * MenuGroup findFirst
   */
  export type MenuGroupFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter, which MenuGroup to fetch.
     */
    where?: MenuGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MenuGroups to fetch.
     */
    orderBy?: MenuGroupOrderByWithRelationInput | MenuGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for MenuGroups.
     */
    cursor?: MenuGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MenuGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MenuGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of MenuGroups.
     */
    distinct?: MenuGroupScalarFieldEnum | MenuGroupScalarFieldEnum[]
  }

  /**
   * MenuGroup findFirstOrThrow
   */
  export type MenuGroupFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter, which MenuGroup to fetch.
     */
    where?: MenuGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MenuGroups to fetch.
     */
    orderBy?: MenuGroupOrderByWithRelationInput | MenuGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for MenuGroups.
     */
    cursor?: MenuGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MenuGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MenuGroups.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of MenuGroups.
     */
    distinct?: MenuGroupScalarFieldEnum | MenuGroupScalarFieldEnum[]
  }

  /**
   * MenuGroup findMany
   */
  export type MenuGroupFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter, which MenuGroups to fetch.
     */
    where?: MenuGroupWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of MenuGroups to fetch.
     */
    orderBy?: MenuGroupOrderByWithRelationInput | MenuGroupOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing MenuGroups.
     */
    cursor?: MenuGroupWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` MenuGroups from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` MenuGroups.
     */
    skip?: number
    distinct?: MenuGroupScalarFieldEnum | MenuGroupScalarFieldEnum[]
  }

  /**
   * MenuGroup create
   */
  export type MenuGroupCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * The data needed to create a MenuGroup.
     */
    data: XOR<MenuGroupCreateInput, MenuGroupUncheckedCreateInput>
  }

  /**
   * MenuGroup createMany
   */
  export type MenuGroupCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many MenuGroups.
     */
    data: MenuGroupCreateManyInput | MenuGroupCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * MenuGroup update
   */
  export type MenuGroupUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * The data needed to update a MenuGroup.
     */
    data: XOR<MenuGroupUpdateInput, MenuGroupUncheckedUpdateInput>
    /**
     * Choose, which MenuGroup to update.
     */
    where: MenuGroupWhereUniqueInput
  }

  /**
   * MenuGroup updateMany
   */
  export type MenuGroupUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update MenuGroups.
     */
    data: XOR<MenuGroupUpdateManyMutationInput, MenuGroupUncheckedUpdateManyInput>
    /**
     * Filter which MenuGroups to update
     */
    where?: MenuGroupWhereInput
    /**
     * Limit how many MenuGroups to update.
     */
    limit?: number
  }

  /**
   * MenuGroup upsert
   */
  export type MenuGroupUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * The filter to search for the MenuGroup to update in case it exists.
     */
    where: MenuGroupWhereUniqueInput
    /**
     * In case the MenuGroup found by the `where` argument doesn't exist, create a new MenuGroup with this data.
     */
    create: XOR<MenuGroupCreateInput, MenuGroupUncheckedCreateInput>
    /**
     * In case the MenuGroup was found with the provided `where` argument, update it with this data.
     */
    update: XOR<MenuGroupUpdateInput, MenuGroupUncheckedUpdateInput>
  }

  /**
   * MenuGroup delete
   */
  export type MenuGroupDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
    /**
     * Filter which MenuGroup to delete.
     */
    where: MenuGroupWhereUniqueInput
  }

  /**
   * MenuGroup deleteMany
   */
  export type MenuGroupDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which MenuGroups to delete
     */
    where?: MenuGroupWhereInput
    /**
     * Limit how many MenuGroups to delete.
     */
    limit?: number
  }

  /**
   * MenuGroup without action
   */
  export type MenuGroupDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the MenuGroup
     */
    select?: MenuGroupSelect<ExtArgs> | null
    /**
     * Omit specific fields from the MenuGroup
     */
    omit?: MenuGroupOmit<ExtArgs> | null
  }


  /**
   * Model SystemConfiguration
   */

  export type AggregateSystemConfiguration = {
    _count: SystemConfigurationCountAggregateOutputType | null
    _avg: SystemConfigurationAvgAggregateOutputType | null
    _sum: SystemConfigurationSumAggregateOutputType | null
    _min: SystemConfigurationMinAggregateOutputType | null
    _max: SystemConfigurationMaxAggregateOutputType | null
  }

  export type SystemConfigurationAvgAggregateOutputType = {
    id: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type SystemConfigurationSumAggregateOutputType = {
    id: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type SystemConfigurationMinAggregateOutputType = {
    id: number | null
    configuration_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type SystemConfigurationMaxAggregateOutputType = {
    id: number | null
    configuration_name: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type SystemConfigurationCountAggregateOutputType = {
    id: number
    configuration_name: number
    configurations: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type SystemConfigurationAvgAggregateInputType = {
    id?: true
    created_by?: true
    deleted_by?: true
  }

  export type SystemConfigurationSumAggregateInputType = {
    id?: true
    created_by?: true
    deleted_by?: true
  }

  export type SystemConfigurationMinAggregateInputType = {
    id?: true
    configuration_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type SystemConfigurationMaxAggregateInputType = {
    id?: true
    configuration_name?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type SystemConfigurationCountAggregateInputType = {
    id?: true
    configuration_name?: true
    configurations?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type SystemConfigurationAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SystemConfiguration to aggregate.
     */
    where?: SystemConfigurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SystemConfigurations to fetch.
     */
    orderBy?: SystemConfigurationOrderByWithRelationInput | SystemConfigurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SystemConfigurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SystemConfigurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SystemConfigurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned SystemConfigurations
    **/
    _count?: true | SystemConfigurationCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SystemConfigurationAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SystemConfigurationSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SystemConfigurationMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SystemConfigurationMaxAggregateInputType
  }

  export type GetSystemConfigurationAggregateType<T extends SystemConfigurationAggregateArgs> = {
        [P in keyof T & keyof AggregateSystemConfiguration]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSystemConfiguration[P]>
      : GetScalarType<T[P], AggregateSystemConfiguration[P]>
  }




  export type SystemConfigurationGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SystemConfigurationWhereInput
    orderBy?: SystemConfigurationOrderByWithAggregationInput | SystemConfigurationOrderByWithAggregationInput[]
    by: SystemConfigurationScalarFieldEnum[] | SystemConfigurationScalarFieldEnum
    having?: SystemConfigurationScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SystemConfigurationCountAggregateInputType | true
    _avg?: SystemConfigurationAvgAggregateInputType
    _sum?: SystemConfigurationSumAggregateInputType
    _min?: SystemConfigurationMinAggregateInputType
    _max?: SystemConfigurationMaxAggregateInputType
  }

  export type SystemConfigurationGroupByOutputType = {
    id: number
    configuration_name: string
    configurations: JsonValue
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: SystemConfigurationCountAggregateOutputType | null
    _avg: SystemConfigurationAvgAggregateOutputType | null
    _sum: SystemConfigurationSumAggregateOutputType | null
    _min: SystemConfigurationMinAggregateOutputType | null
    _max: SystemConfigurationMaxAggregateOutputType | null
  }

  type GetSystemConfigurationGroupByPayload<T extends SystemConfigurationGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SystemConfigurationGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SystemConfigurationGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SystemConfigurationGroupByOutputType[P]>
            : GetScalarType<T[P], SystemConfigurationGroupByOutputType[P]>
        }
      >
    >


  export type SystemConfigurationSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    configuration_name?: boolean
    configurations?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["systemConfiguration"]>



  export type SystemConfigurationSelectScalar = {
    id?: boolean
    configuration_name?: boolean
    configurations?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type SystemConfigurationOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "configuration_name" | "configurations" | "created_by" | "created_at" | "updated_at" | "deleted_at" | "deleted_by", ExtArgs["result"]["systemConfiguration"]>

  export type $SystemConfigurationPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "SystemConfiguration"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      configuration_name: string
      configurations: Prisma.JsonValue
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["systemConfiguration"]>
    composites: {}
  }

  type SystemConfigurationGetPayload<S extends boolean | null | undefined | SystemConfigurationDefaultArgs> = $Result.GetResult<Prisma.$SystemConfigurationPayload, S>

  type SystemConfigurationCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SystemConfigurationFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SystemConfigurationCountAggregateInputType | true
    }

  export interface SystemConfigurationDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['SystemConfiguration'], meta: { name: 'SystemConfiguration' } }
    /**
     * Find zero or one SystemConfiguration that matches the filter.
     * @param {SystemConfigurationFindUniqueArgs} args - Arguments to find a SystemConfiguration
     * @example
     * // Get one SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SystemConfigurationFindUniqueArgs>(args: SelectSubset<T, SystemConfigurationFindUniqueArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one SystemConfiguration that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SystemConfigurationFindUniqueOrThrowArgs} args - Arguments to find a SystemConfiguration
     * @example
     * // Get one SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SystemConfigurationFindUniqueOrThrowArgs>(args: SelectSubset<T, SystemConfigurationFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SystemConfiguration that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationFindFirstArgs} args - Arguments to find a SystemConfiguration
     * @example
     * // Get one SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SystemConfigurationFindFirstArgs>(args?: SelectSubset<T, SystemConfigurationFindFirstArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first SystemConfiguration that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationFindFirstOrThrowArgs} args - Arguments to find a SystemConfiguration
     * @example
     * // Get one SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SystemConfigurationFindFirstOrThrowArgs>(args?: SelectSubset<T, SystemConfigurationFindFirstOrThrowArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more SystemConfigurations that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all SystemConfigurations
     * const systemConfigurations = await prisma.systemConfiguration.findMany()
     * 
     * // Get first 10 SystemConfigurations
     * const systemConfigurations = await prisma.systemConfiguration.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const systemConfigurationWithIdOnly = await prisma.systemConfiguration.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SystemConfigurationFindManyArgs>(args?: SelectSubset<T, SystemConfigurationFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a SystemConfiguration.
     * @param {SystemConfigurationCreateArgs} args - Arguments to create a SystemConfiguration.
     * @example
     * // Create one SystemConfiguration
     * const SystemConfiguration = await prisma.systemConfiguration.create({
     *   data: {
     *     // ... data to create a SystemConfiguration
     *   }
     * })
     * 
     */
    create<T extends SystemConfigurationCreateArgs>(args: SelectSubset<T, SystemConfigurationCreateArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many SystemConfigurations.
     * @param {SystemConfigurationCreateManyArgs} args - Arguments to create many SystemConfigurations.
     * @example
     * // Create many SystemConfigurations
     * const systemConfiguration = await prisma.systemConfiguration.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SystemConfigurationCreateManyArgs>(args?: SelectSubset<T, SystemConfigurationCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a SystemConfiguration.
     * @param {SystemConfigurationDeleteArgs} args - Arguments to delete one SystemConfiguration.
     * @example
     * // Delete one SystemConfiguration
     * const SystemConfiguration = await prisma.systemConfiguration.delete({
     *   where: {
     *     // ... filter to delete one SystemConfiguration
     *   }
     * })
     * 
     */
    delete<T extends SystemConfigurationDeleteArgs>(args: SelectSubset<T, SystemConfigurationDeleteArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one SystemConfiguration.
     * @param {SystemConfigurationUpdateArgs} args - Arguments to update one SystemConfiguration.
     * @example
     * // Update one SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SystemConfigurationUpdateArgs>(args: SelectSubset<T, SystemConfigurationUpdateArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more SystemConfigurations.
     * @param {SystemConfigurationDeleteManyArgs} args - Arguments to filter SystemConfigurations to delete.
     * @example
     * // Delete a few SystemConfigurations
     * const { count } = await prisma.systemConfiguration.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SystemConfigurationDeleteManyArgs>(args?: SelectSubset<T, SystemConfigurationDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more SystemConfigurations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many SystemConfigurations
     * const systemConfiguration = await prisma.systemConfiguration.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SystemConfigurationUpdateManyArgs>(args: SelectSubset<T, SystemConfigurationUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one SystemConfiguration.
     * @param {SystemConfigurationUpsertArgs} args - Arguments to update or create a SystemConfiguration.
     * @example
     * // Update or create a SystemConfiguration
     * const systemConfiguration = await prisma.systemConfiguration.upsert({
     *   create: {
     *     // ... data to create a SystemConfiguration
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the SystemConfiguration we want to update
     *   }
     * })
     */
    upsert<T extends SystemConfigurationUpsertArgs>(args: SelectSubset<T, SystemConfigurationUpsertArgs<ExtArgs>>): Prisma__SystemConfigurationClient<$Result.GetResult<Prisma.$SystemConfigurationPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of SystemConfigurations.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationCountArgs} args - Arguments to filter SystemConfigurations to count.
     * @example
     * // Count the number of SystemConfigurations
     * const count = await prisma.systemConfiguration.count({
     *   where: {
     *     // ... the filter for the SystemConfigurations we want to count
     *   }
     * })
    **/
    count<T extends SystemConfigurationCountArgs>(
      args?: Subset<T, SystemConfigurationCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SystemConfigurationCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a SystemConfiguration.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SystemConfigurationAggregateArgs>(args: Subset<T, SystemConfigurationAggregateArgs>): Prisma.PrismaPromise<GetSystemConfigurationAggregateType<T>>

    /**
     * Group by SystemConfiguration.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SystemConfigurationGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SystemConfigurationGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SystemConfigurationGroupByArgs['orderBy'] }
        : { orderBy?: SystemConfigurationGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SystemConfigurationGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSystemConfigurationGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the SystemConfiguration model
   */
  readonly fields: SystemConfigurationFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for SystemConfiguration.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SystemConfigurationClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the SystemConfiguration model
   */
  interface SystemConfigurationFieldRefs {
    readonly id: FieldRef<"SystemConfiguration", 'Int'>
    readonly configuration_name: FieldRef<"SystemConfiguration", 'String'>
    readonly configurations: FieldRef<"SystemConfiguration", 'Json'>
    readonly created_by: FieldRef<"SystemConfiguration", 'Int'>
    readonly created_at: FieldRef<"SystemConfiguration", 'DateTime'>
    readonly updated_at: FieldRef<"SystemConfiguration", 'DateTime'>
    readonly deleted_at: FieldRef<"SystemConfiguration", 'DateTime'>
    readonly deleted_by: FieldRef<"SystemConfiguration", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * SystemConfiguration findUnique
   */
  export type SystemConfigurationFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter, which SystemConfiguration to fetch.
     */
    where: SystemConfigurationWhereUniqueInput
  }

  /**
   * SystemConfiguration findUniqueOrThrow
   */
  export type SystemConfigurationFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter, which SystemConfiguration to fetch.
     */
    where: SystemConfigurationWhereUniqueInput
  }

  /**
   * SystemConfiguration findFirst
   */
  export type SystemConfigurationFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter, which SystemConfiguration to fetch.
     */
    where?: SystemConfigurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SystemConfigurations to fetch.
     */
    orderBy?: SystemConfigurationOrderByWithRelationInput | SystemConfigurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SystemConfigurations.
     */
    cursor?: SystemConfigurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SystemConfigurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SystemConfigurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SystemConfigurations.
     */
    distinct?: SystemConfigurationScalarFieldEnum | SystemConfigurationScalarFieldEnum[]
  }

  /**
   * SystemConfiguration findFirstOrThrow
   */
  export type SystemConfigurationFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter, which SystemConfiguration to fetch.
     */
    where?: SystemConfigurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SystemConfigurations to fetch.
     */
    orderBy?: SystemConfigurationOrderByWithRelationInput | SystemConfigurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for SystemConfigurations.
     */
    cursor?: SystemConfigurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SystemConfigurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SystemConfigurations.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of SystemConfigurations.
     */
    distinct?: SystemConfigurationScalarFieldEnum | SystemConfigurationScalarFieldEnum[]
  }

  /**
   * SystemConfiguration findMany
   */
  export type SystemConfigurationFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter, which SystemConfigurations to fetch.
     */
    where?: SystemConfigurationWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of SystemConfigurations to fetch.
     */
    orderBy?: SystemConfigurationOrderByWithRelationInput | SystemConfigurationOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing SystemConfigurations.
     */
    cursor?: SystemConfigurationWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` SystemConfigurations from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` SystemConfigurations.
     */
    skip?: number
    distinct?: SystemConfigurationScalarFieldEnum | SystemConfigurationScalarFieldEnum[]
  }

  /**
   * SystemConfiguration create
   */
  export type SystemConfigurationCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * The data needed to create a SystemConfiguration.
     */
    data: XOR<SystemConfigurationCreateInput, SystemConfigurationUncheckedCreateInput>
  }

  /**
   * SystemConfiguration createMany
   */
  export type SystemConfigurationCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many SystemConfigurations.
     */
    data: SystemConfigurationCreateManyInput | SystemConfigurationCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * SystemConfiguration update
   */
  export type SystemConfigurationUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * The data needed to update a SystemConfiguration.
     */
    data: XOR<SystemConfigurationUpdateInput, SystemConfigurationUncheckedUpdateInput>
    /**
     * Choose, which SystemConfiguration to update.
     */
    where: SystemConfigurationWhereUniqueInput
  }

  /**
   * SystemConfiguration updateMany
   */
  export type SystemConfigurationUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update SystemConfigurations.
     */
    data: XOR<SystemConfigurationUpdateManyMutationInput, SystemConfigurationUncheckedUpdateManyInput>
    /**
     * Filter which SystemConfigurations to update
     */
    where?: SystemConfigurationWhereInput
    /**
     * Limit how many SystemConfigurations to update.
     */
    limit?: number
  }

  /**
   * SystemConfiguration upsert
   */
  export type SystemConfigurationUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * The filter to search for the SystemConfiguration to update in case it exists.
     */
    where: SystemConfigurationWhereUniqueInput
    /**
     * In case the SystemConfiguration found by the `where` argument doesn't exist, create a new SystemConfiguration with this data.
     */
    create: XOR<SystemConfigurationCreateInput, SystemConfigurationUncheckedCreateInput>
    /**
     * In case the SystemConfiguration was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SystemConfigurationUpdateInput, SystemConfigurationUncheckedUpdateInput>
  }

  /**
   * SystemConfiguration delete
   */
  export type SystemConfigurationDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
    /**
     * Filter which SystemConfiguration to delete.
     */
    where: SystemConfigurationWhereUniqueInput
  }

  /**
   * SystemConfiguration deleteMany
   */
  export type SystemConfigurationDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which SystemConfigurations to delete
     */
    where?: SystemConfigurationWhereInput
    /**
     * Limit how many SystemConfigurations to delete.
     */
    limit?: number
  }

  /**
   * SystemConfiguration without action
   */
  export type SystemConfigurationDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the SystemConfiguration
     */
    select?: SystemConfigurationSelect<ExtArgs> | null
    /**
     * Omit specific fields from the SystemConfiguration
     */
    omit?: SystemConfigurationOmit<ExtArgs> | null
  }


  /**
   * Model CrudFront
   */

  export type AggregateCrudFront = {
    _count: CrudFrontCountAggregateOutputType | null
    _avg: CrudFrontAvgAggregateOutputType | null
    _sum: CrudFrontSumAggregateOutputType | null
    _min: CrudFrontMinAggregateOutputType | null
    _max: CrudFrontMaxAggregateOutputType | null
  }

  export type CrudFrontAvgAggregateOutputType = {
    id: number | null
    is_enabled: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type CrudFrontSumAggregateOutputType = {
    id: number | null
    is_enabled: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type CrudFrontMinAggregateOutputType = {
    id: number | null
    name: string | null
    permission_name: string | null
    handler_name: string | null
    post_route: string | null
    read_route: string | null
    update_route: string | null
    delete_route: string | null
    is_enabled: number | null
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudFrontMaxAggregateOutputType = {
    id: number | null
    name: string | null
    permission_name: string | null
    handler_name: string | null
    post_route: string | null
    read_route: string | null
    update_route: string | null
    delete_route: string | null
    is_enabled: number | null
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudFrontCountAggregateOutputType = {
    id: number
    name: number
    permission_name: number
    handler_name: number
    post_route: number
    read_route: number
    update_route: number
    delete_route: number
    schema: number
    is_enabled: number
    menu_name: number
    menu_icon: number
    menu_group: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type CrudFrontAvgAggregateInputType = {
    id?: true
    is_enabled?: true
    created_by?: true
    deleted_by?: true
  }

  export type CrudFrontSumAggregateInputType = {
    id?: true
    is_enabled?: true
    created_by?: true
    deleted_by?: true
  }

  export type CrudFrontMinAggregateInputType = {
    id?: true
    name?: true
    permission_name?: true
    handler_name?: true
    post_route?: true
    read_route?: true
    update_route?: true
    delete_route?: true
    is_enabled?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudFrontMaxAggregateInputType = {
    id?: true
    name?: true
    permission_name?: true
    handler_name?: true
    post_route?: true
    read_route?: true
    update_route?: true
    delete_route?: true
    is_enabled?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudFrontCountAggregateInputType = {
    id?: true
    name?: true
    permission_name?: true
    handler_name?: true
    post_route?: true
    read_route?: true
    update_route?: true
    delete_route?: true
    schema?: true
    is_enabled?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type CrudFrontAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudFront to aggregate.
     */
    where?: CrudFrontWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudFronts to fetch.
     */
    orderBy?: CrudFrontOrderByWithRelationInput | CrudFrontOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CrudFrontWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudFronts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudFronts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned CrudFronts
    **/
    _count?: true | CrudFrontCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CrudFrontAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CrudFrontSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CrudFrontMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CrudFrontMaxAggregateInputType
  }

  export type GetCrudFrontAggregateType<T extends CrudFrontAggregateArgs> = {
        [P in keyof T & keyof AggregateCrudFront]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCrudFront[P]>
      : GetScalarType<T[P], AggregateCrudFront[P]>
  }




  export type CrudFrontGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CrudFrontWhereInput
    orderBy?: CrudFrontOrderByWithAggregationInput | CrudFrontOrderByWithAggregationInput[]
    by: CrudFrontScalarFieldEnum[] | CrudFrontScalarFieldEnum
    having?: CrudFrontScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CrudFrontCountAggregateInputType | true
    _avg?: CrudFrontAvgAggregateInputType
    _sum?: CrudFrontSumAggregateInputType
    _min?: CrudFrontMinAggregateInputType
    _max?: CrudFrontMaxAggregateInputType
  }

  export type CrudFrontGroupByOutputType = {
    id: number
    name: string
    permission_name: string | null
    handler_name: string | null
    post_route: string | null
    read_route: string | null
    update_route: string | null
    delete_route: string | null
    schema: JsonValue
    is_enabled: number
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: CrudFrontCountAggregateOutputType | null
    _avg: CrudFrontAvgAggregateOutputType | null
    _sum: CrudFrontSumAggregateOutputType | null
    _min: CrudFrontMinAggregateOutputType | null
    _max: CrudFrontMaxAggregateOutputType | null
  }

  type GetCrudFrontGroupByPayload<T extends CrudFrontGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CrudFrontGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CrudFrontGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CrudFrontGroupByOutputType[P]>
            : GetScalarType<T[P], CrudFrontGroupByOutputType[P]>
        }
      >
    >


  export type CrudFrontSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    permission_name?: boolean
    handler_name?: boolean
    post_route?: boolean
    read_route?: boolean
    update_route?: boolean
    delete_route?: boolean
    schema?: boolean
    is_enabled?: boolean
    menu_name?: boolean
    menu_icon?: boolean
    menu_group?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["crudFront"]>



  export type CrudFrontSelectScalar = {
    id?: boolean
    name?: boolean
    permission_name?: boolean
    handler_name?: boolean
    post_route?: boolean
    read_route?: boolean
    update_route?: boolean
    delete_route?: boolean
    schema?: boolean
    is_enabled?: boolean
    menu_name?: boolean
    menu_icon?: boolean
    menu_group?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type CrudFrontOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "permission_name" | "handler_name" | "post_route" | "read_route" | "update_route" | "delete_route" | "schema" | "is_enabled" | "menu_name" | "menu_icon" | "menu_group" | "created_by" | "created_at" | "updated_at" | "deleted_at" | "deleted_by", ExtArgs["result"]["crudFront"]>

  export type $CrudFrontPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "CrudFront"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      permission_name: string | null
      handler_name: string | null
      post_route: string | null
      read_route: string | null
      update_route: string | null
      delete_route: string | null
      schema: Prisma.JsonValue
      is_enabled: number
      menu_name: string | null
      menu_icon: string | null
      menu_group: string | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["crudFront"]>
    composites: {}
  }

  type CrudFrontGetPayload<S extends boolean | null | undefined | CrudFrontDefaultArgs> = $Result.GetResult<Prisma.$CrudFrontPayload, S>

  type CrudFrontCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CrudFrontFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CrudFrontCountAggregateInputType | true
    }

  export interface CrudFrontDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['CrudFront'], meta: { name: 'CrudFront' } }
    /**
     * Find zero or one CrudFront that matches the filter.
     * @param {CrudFrontFindUniqueArgs} args - Arguments to find a CrudFront
     * @example
     * // Get one CrudFront
     * const crudFront = await prisma.crudFront.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CrudFrontFindUniqueArgs>(args: SelectSubset<T, CrudFrontFindUniqueArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one CrudFront that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CrudFrontFindUniqueOrThrowArgs} args - Arguments to find a CrudFront
     * @example
     * // Get one CrudFront
     * const crudFront = await prisma.crudFront.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CrudFrontFindUniqueOrThrowArgs>(args: SelectSubset<T, CrudFrontFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudFront that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontFindFirstArgs} args - Arguments to find a CrudFront
     * @example
     * // Get one CrudFront
     * const crudFront = await prisma.crudFront.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CrudFrontFindFirstArgs>(args?: SelectSubset<T, CrudFrontFindFirstArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudFront that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontFindFirstOrThrowArgs} args - Arguments to find a CrudFront
     * @example
     * // Get one CrudFront
     * const crudFront = await prisma.crudFront.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CrudFrontFindFirstOrThrowArgs>(args?: SelectSubset<T, CrudFrontFindFirstOrThrowArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more CrudFronts that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all CrudFronts
     * const crudFronts = await prisma.crudFront.findMany()
     * 
     * // Get first 10 CrudFronts
     * const crudFronts = await prisma.crudFront.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const crudFrontWithIdOnly = await prisma.crudFront.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CrudFrontFindManyArgs>(args?: SelectSubset<T, CrudFrontFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a CrudFront.
     * @param {CrudFrontCreateArgs} args - Arguments to create a CrudFront.
     * @example
     * // Create one CrudFront
     * const CrudFront = await prisma.crudFront.create({
     *   data: {
     *     // ... data to create a CrudFront
     *   }
     * })
     * 
     */
    create<T extends CrudFrontCreateArgs>(args: SelectSubset<T, CrudFrontCreateArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many CrudFronts.
     * @param {CrudFrontCreateManyArgs} args - Arguments to create many CrudFronts.
     * @example
     * // Create many CrudFronts
     * const crudFront = await prisma.crudFront.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CrudFrontCreateManyArgs>(args?: SelectSubset<T, CrudFrontCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a CrudFront.
     * @param {CrudFrontDeleteArgs} args - Arguments to delete one CrudFront.
     * @example
     * // Delete one CrudFront
     * const CrudFront = await prisma.crudFront.delete({
     *   where: {
     *     // ... filter to delete one CrudFront
     *   }
     * })
     * 
     */
    delete<T extends CrudFrontDeleteArgs>(args: SelectSubset<T, CrudFrontDeleteArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one CrudFront.
     * @param {CrudFrontUpdateArgs} args - Arguments to update one CrudFront.
     * @example
     * // Update one CrudFront
     * const crudFront = await prisma.crudFront.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CrudFrontUpdateArgs>(args: SelectSubset<T, CrudFrontUpdateArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more CrudFronts.
     * @param {CrudFrontDeleteManyArgs} args - Arguments to filter CrudFronts to delete.
     * @example
     * // Delete a few CrudFronts
     * const { count } = await prisma.crudFront.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CrudFrontDeleteManyArgs>(args?: SelectSubset<T, CrudFrontDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more CrudFronts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many CrudFronts
     * const crudFront = await prisma.crudFront.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CrudFrontUpdateManyArgs>(args: SelectSubset<T, CrudFrontUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one CrudFront.
     * @param {CrudFrontUpsertArgs} args - Arguments to update or create a CrudFront.
     * @example
     * // Update or create a CrudFront
     * const crudFront = await prisma.crudFront.upsert({
     *   create: {
     *     // ... data to create a CrudFront
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the CrudFront we want to update
     *   }
     * })
     */
    upsert<T extends CrudFrontUpsertArgs>(args: SelectSubset<T, CrudFrontUpsertArgs<ExtArgs>>): Prisma__CrudFrontClient<$Result.GetResult<Prisma.$CrudFrontPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of CrudFronts.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontCountArgs} args - Arguments to filter CrudFronts to count.
     * @example
     * // Count the number of CrudFronts
     * const count = await prisma.crudFront.count({
     *   where: {
     *     // ... the filter for the CrudFronts we want to count
     *   }
     * })
    **/
    count<T extends CrudFrontCountArgs>(
      args?: Subset<T, CrudFrontCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CrudFrontCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a CrudFront.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CrudFrontAggregateArgs>(args: Subset<T, CrudFrontAggregateArgs>): Prisma.PrismaPromise<GetCrudFrontAggregateType<T>>

    /**
     * Group by CrudFront.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudFrontGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CrudFrontGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CrudFrontGroupByArgs['orderBy'] }
        : { orderBy?: CrudFrontGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CrudFrontGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCrudFrontGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the CrudFront model
   */
  readonly fields: CrudFrontFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for CrudFront.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CrudFrontClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the CrudFront model
   */
  interface CrudFrontFieldRefs {
    readonly id: FieldRef<"CrudFront", 'Int'>
    readonly name: FieldRef<"CrudFront", 'String'>
    readonly permission_name: FieldRef<"CrudFront", 'String'>
    readonly handler_name: FieldRef<"CrudFront", 'String'>
    readonly post_route: FieldRef<"CrudFront", 'String'>
    readonly read_route: FieldRef<"CrudFront", 'String'>
    readonly update_route: FieldRef<"CrudFront", 'String'>
    readonly delete_route: FieldRef<"CrudFront", 'String'>
    readonly schema: FieldRef<"CrudFront", 'Json'>
    readonly is_enabled: FieldRef<"CrudFront", 'Int'>
    readonly menu_name: FieldRef<"CrudFront", 'String'>
    readonly menu_icon: FieldRef<"CrudFront", 'String'>
    readonly menu_group: FieldRef<"CrudFront", 'String'>
    readonly created_by: FieldRef<"CrudFront", 'Int'>
    readonly created_at: FieldRef<"CrudFront", 'DateTime'>
    readonly updated_at: FieldRef<"CrudFront", 'DateTime'>
    readonly deleted_at: FieldRef<"CrudFront", 'DateTime'>
    readonly deleted_by: FieldRef<"CrudFront", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * CrudFront findUnique
   */
  export type CrudFrontFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter, which CrudFront to fetch.
     */
    where: CrudFrontWhereUniqueInput
  }

  /**
   * CrudFront findUniqueOrThrow
   */
  export type CrudFrontFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter, which CrudFront to fetch.
     */
    where: CrudFrontWhereUniqueInput
  }

  /**
   * CrudFront findFirst
   */
  export type CrudFrontFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter, which CrudFront to fetch.
     */
    where?: CrudFrontWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudFronts to fetch.
     */
    orderBy?: CrudFrontOrderByWithRelationInput | CrudFrontOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudFronts.
     */
    cursor?: CrudFrontWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudFronts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudFronts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudFronts.
     */
    distinct?: CrudFrontScalarFieldEnum | CrudFrontScalarFieldEnum[]
  }

  /**
   * CrudFront findFirstOrThrow
   */
  export type CrudFrontFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter, which CrudFront to fetch.
     */
    where?: CrudFrontWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudFronts to fetch.
     */
    orderBy?: CrudFrontOrderByWithRelationInput | CrudFrontOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudFronts.
     */
    cursor?: CrudFrontWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudFronts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudFronts.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudFronts.
     */
    distinct?: CrudFrontScalarFieldEnum | CrudFrontScalarFieldEnum[]
  }

  /**
   * CrudFront findMany
   */
  export type CrudFrontFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter, which CrudFronts to fetch.
     */
    where?: CrudFrontWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudFronts to fetch.
     */
    orderBy?: CrudFrontOrderByWithRelationInput | CrudFrontOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing CrudFronts.
     */
    cursor?: CrudFrontWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudFronts from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudFronts.
     */
    skip?: number
    distinct?: CrudFrontScalarFieldEnum | CrudFrontScalarFieldEnum[]
  }

  /**
   * CrudFront create
   */
  export type CrudFrontCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * The data needed to create a CrudFront.
     */
    data: XOR<CrudFrontCreateInput, CrudFrontUncheckedCreateInput>
  }

  /**
   * CrudFront createMany
   */
  export type CrudFrontCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many CrudFronts.
     */
    data: CrudFrontCreateManyInput | CrudFrontCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * CrudFront update
   */
  export type CrudFrontUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * The data needed to update a CrudFront.
     */
    data: XOR<CrudFrontUpdateInput, CrudFrontUncheckedUpdateInput>
    /**
     * Choose, which CrudFront to update.
     */
    where: CrudFrontWhereUniqueInput
  }

  /**
   * CrudFront updateMany
   */
  export type CrudFrontUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update CrudFronts.
     */
    data: XOR<CrudFrontUpdateManyMutationInput, CrudFrontUncheckedUpdateManyInput>
    /**
     * Filter which CrudFronts to update
     */
    where?: CrudFrontWhereInput
    /**
     * Limit how many CrudFronts to update.
     */
    limit?: number
  }

  /**
   * CrudFront upsert
   */
  export type CrudFrontUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * The filter to search for the CrudFront to update in case it exists.
     */
    where: CrudFrontWhereUniqueInput
    /**
     * In case the CrudFront found by the `where` argument doesn't exist, create a new CrudFront with this data.
     */
    create: XOR<CrudFrontCreateInput, CrudFrontUncheckedCreateInput>
    /**
     * In case the CrudFront was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CrudFrontUpdateInput, CrudFrontUncheckedUpdateInput>
  }

  /**
   * CrudFront delete
   */
  export type CrudFrontDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
    /**
     * Filter which CrudFront to delete.
     */
    where: CrudFrontWhereUniqueInput
  }

  /**
   * CrudFront deleteMany
   */
  export type CrudFrontDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudFronts to delete
     */
    where?: CrudFrontWhereInput
    /**
     * Limit how many CrudFronts to delete.
     */
    limit?: number
  }

  /**
   * CrudFront without action
   */
  export type CrudFrontDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudFront
     */
    select?: CrudFrontSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudFront
     */
    omit?: CrudFrontOmit<ExtArgs> | null
  }


  /**
   * Model CrudUtil
   */

  export type AggregateCrudUtil = {
    _count: CrudUtilCountAggregateOutputType | null
    _avg: CrudUtilAvgAggregateOutputType | null
    _sum: CrudUtilSumAggregateOutputType | null
    _min: CrudUtilMinAggregateOutputType | null
    _max: CrudUtilMaxAggregateOutputType | null
  }

  export type CrudUtilAvgAggregateOutputType = {
    id: number | null
    log_update: number | null
    paginate_fetch: number | null
    should_backup: number | null
    fetch_all_manually: number | null
    fetch_manually: number | null
    create_manually: number | null
    update_manually: number | null
    delete_manually: number | null
    use_modal: number | null
    use_custom_form: number | null
    is_fetch_all_public: number | null
    is_fetch_public: number | null
    is_create_public: number | null
    is_update_public: number | null
    is_delete_public: number | null
    block_fetch_all: number | null
    block_fetch: number | null
    block_create: number | null
    block_update: number | null
    block_delete: number | null
    is_enabled: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type CrudUtilSumAggregateOutputType = {
    id: number | null
    log_update: number | null
    paginate_fetch: number | null
    should_backup: number | null
    fetch_all_manually: number | null
    fetch_manually: number | null
    create_manually: number | null
    update_manually: number | null
    delete_manually: number | null
    use_modal: number | null
    use_custom_form: number | null
    is_fetch_all_public: number | null
    is_fetch_public: number | null
    is_create_public: number | null
    is_update_public: number | null
    is_delete_public: number | null
    block_fetch_all: number | null
    block_fetch: number | null
    block_create: number | null
    block_update: number | null
    block_delete: number | null
    is_enabled: number | null
    created_by: number | null
    deleted_by: number | null
  }

  export type CrudUtilMinAggregateOutputType = {
    id: number | null
    name: string | null
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    permission_name: string | null
    menu_sort: string | null
    log_update: number | null
    primary_key: string | null
    show_field: string | null
    paginate_fetch: number | null
    permission_for_all: string | null
    should_backup: number | null
    table_name: string | null
    model_name: string | null
    fetch_all_manually: number | null
    fetch_manually: number | null
    create_manually: number | null
    update_manually: number | null
    delete_manually: number | null
    use_modal: number | null
    use_custom_form: number | null
    is_fetch_all_public: number | null
    is_fetch_public: number | null
    is_create_public: number | null
    is_update_public: number | null
    is_delete_public: number | null
    fetch_all_path: string | null
    fetch_path: string | null
    create_path: string | null
    update_path: string | null
    delete_path: string | null
    query_parameter: string | null
    custom_form_name: string | null
    block_fetch_all: number | null
    block_fetch: number | null
    block_create: number | null
    block_update: number | null
    block_delete: number | null
    is_enabled: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudUtilMaxAggregateOutputType = {
    id: number | null
    name: string | null
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    permission_name: string | null
    menu_sort: string | null
    log_update: number | null
    primary_key: string | null
    show_field: string | null
    paginate_fetch: number | null
    permission_for_all: string | null
    should_backup: number | null
    table_name: string | null
    model_name: string | null
    fetch_all_manually: number | null
    fetch_manually: number | null
    create_manually: number | null
    update_manually: number | null
    delete_manually: number | null
    use_modal: number | null
    use_custom_form: number | null
    is_fetch_all_public: number | null
    is_fetch_public: number | null
    is_create_public: number | null
    is_update_public: number | null
    is_delete_public: number | null
    fetch_all_path: string | null
    fetch_path: string | null
    create_path: string | null
    update_path: string | null
    delete_path: string | null
    query_parameter: string | null
    custom_form_name: string | null
    block_fetch_all: number | null
    block_fetch: number | null
    block_create: number | null
    block_update: number | null
    block_delete: number | null
    is_enabled: number | null
    created_by: number | null
    created_at: Date | null
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
  }

  export type CrudUtilCountAggregateOutputType = {
    id: number
    name: number
    menu_name: number
    menu_icon: number
    menu_group: number
    permission_name: number
    menu_sort: number
    log_update: number
    primary_key: number
    show_field: number
    paginate_fetch: number
    permission_for_all: number
    should_backup: number
    table_name: number
    model_name: number
    schema: number
    fetch_all_manually: number
    fetch_manually: number
    create_manually: number
    update_manually: number
    delete_manually: number
    use_modal: number
    use_custom_form: number
    is_fetch_all_public: number
    is_fetch_public: number
    is_create_public: number
    is_update_public: number
    is_delete_public: number
    fetch_all_path: number
    fetch_path: number
    create_path: number
    update_path: number
    delete_path: number
    query_parameter: number
    custom_form_name: number
    block_fetch_all: number
    block_fetch: number
    block_create: number
    block_update: number
    block_delete: number
    is_enabled: number
    front_validations: number
    table_columns: number
    backend_validations: number
    relationships: number
    filters: number
    filters_internal: number
    hooks: number
    children: number
    info_messages: number
    config: number
    buttons: number
    others: number
    created_by: number
    created_at: number
    updated_at: number
    deleted_at: number
    deleted_by: number
    _all: number
  }


  export type CrudUtilAvgAggregateInputType = {
    id?: true
    log_update?: true
    paginate_fetch?: true
    should_backup?: true
    fetch_all_manually?: true
    fetch_manually?: true
    create_manually?: true
    update_manually?: true
    delete_manually?: true
    use_modal?: true
    use_custom_form?: true
    is_fetch_all_public?: true
    is_fetch_public?: true
    is_create_public?: true
    is_update_public?: true
    is_delete_public?: true
    block_fetch_all?: true
    block_fetch?: true
    block_create?: true
    block_update?: true
    block_delete?: true
    is_enabled?: true
    created_by?: true
    deleted_by?: true
  }

  export type CrudUtilSumAggregateInputType = {
    id?: true
    log_update?: true
    paginate_fetch?: true
    should_backup?: true
    fetch_all_manually?: true
    fetch_manually?: true
    create_manually?: true
    update_manually?: true
    delete_manually?: true
    use_modal?: true
    use_custom_form?: true
    is_fetch_all_public?: true
    is_fetch_public?: true
    is_create_public?: true
    is_update_public?: true
    is_delete_public?: true
    block_fetch_all?: true
    block_fetch?: true
    block_create?: true
    block_update?: true
    block_delete?: true
    is_enabled?: true
    created_by?: true
    deleted_by?: true
  }

  export type CrudUtilMinAggregateInputType = {
    id?: true
    name?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    permission_name?: true
    menu_sort?: true
    log_update?: true
    primary_key?: true
    show_field?: true
    paginate_fetch?: true
    permission_for_all?: true
    should_backup?: true
    table_name?: true
    model_name?: true
    fetch_all_manually?: true
    fetch_manually?: true
    create_manually?: true
    update_manually?: true
    delete_manually?: true
    use_modal?: true
    use_custom_form?: true
    is_fetch_all_public?: true
    is_fetch_public?: true
    is_create_public?: true
    is_update_public?: true
    is_delete_public?: true
    fetch_all_path?: true
    fetch_path?: true
    create_path?: true
    update_path?: true
    delete_path?: true
    query_parameter?: true
    custom_form_name?: true
    block_fetch_all?: true
    block_fetch?: true
    block_create?: true
    block_update?: true
    block_delete?: true
    is_enabled?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudUtilMaxAggregateInputType = {
    id?: true
    name?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    permission_name?: true
    menu_sort?: true
    log_update?: true
    primary_key?: true
    show_field?: true
    paginate_fetch?: true
    permission_for_all?: true
    should_backup?: true
    table_name?: true
    model_name?: true
    fetch_all_manually?: true
    fetch_manually?: true
    create_manually?: true
    update_manually?: true
    delete_manually?: true
    use_modal?: true
    use_custom_form?: true
    is_fetch_all_public?: true
    is_fetch_public?: true
    is_create_public?: true
    is_update_public?: true
    is_delete_public?: true
    fetch_all_path?: true
    fetch_path?: true
    create_path?: true
    update_path?: true
    delete_path?: true
    query_parameter?: true
    custom_form_name?: true
    block_fetch_all?: true
    block_fetch?: true
    block_create?: true
    block_update?: true
    block_delete?: true
    is_enabled?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
  }

  export type CrudUtilCountAggregateInputType = {
    id?: true
    name?: true
    menu_name?: true
    menu_icon?: true
    menu_group?: true
    permission_name?: true
    menu_sort?: true
    log_update?: true
    primary_key?: true
    show_field?: true
    paginate_fetch?: true
    permission_for_all?: true
    should_backup?: true
    table_name?: true
    model_name?: true
    schema?: true
    fetch_all_manually?: true
    fetch_manually?: true
    create_manually?: true
    update_manually?: true
    delete_manually?: true
    use_modal?: true
    use_custom_form?: true
    is_fetch_all_public?: true
    is_fetch_public?: true
    is_create_public?: true
    is_update_public?: true
    is_delete_public?: true
    fetch_all_path?: true
    fetch_path?: true
    create_path?: true
    update_path?: true
    delete_path?: true
    query_parameter?: true
    custom_form_name?: true
    block_fetch_all?: true
    block_fetch?: true
    block_create?: true
    block_update?: true
    block_delete?: true
    is_enabled?: true
    front_validations?: true
    table_columns?: true
    backend_validations?: true
    relationships?: true
    filters?: true
    filters_internal?: true
    hooks?: true
    children?: true
    info_messages?: true
    config?: true
    buttons?: true
    others?: true
    created_by?: true
    created_at?: true
    updated_at?: true
    deleted_at?: true
    deleted_by?: true
    _all?: true
  }

  export type CrudUtilAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudUtil to aggregate.
     */
    where?: CrudUtilWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudUtils to fetch.
     */
    orderBy?: CrudUtilOrderByWithRelationInput | CrudUtilOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CrudUtilWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudUtils from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudUtils.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned CrudUtils
    **/
    _count?: true | CrudUtilCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CrudUtilAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CrudUtilSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CrudUtilMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CrudUtilMaxAggregateInputType
  }

  export type GetCrudUtilAggregateType<T extends CrudUtilAggregateArgs> = {
        [P in keyof T & keyof AggregateCrudUtil]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCrudUtil[P]>
      : GetScalarType<T[P], AggregateCrudUtil[P]>
  }




  export type CrudUtilGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CrudUtilWhereInput
    orderBy?: CrudUtilOrderByWithAggregationInput | CrudUtilOrderByWithAggregationInput[]
    by: CrudUtilScalarFieldEnum[] | CrudUtilScalarFieldEnum
    having?: CrudUtilScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CrudUtilCountAggregateInputType | true
    _avg?: CrudUtilAvgAggregateInputType
    _sum?: CrudUtilSumAggregateInputType
    _min?: CrudUtilMinAggregateInputType
    _max?: CrudUtilMaxAggregateInputType
  }

  export type CrudUtilGroupByOutputType = {
    id: number
    name: string
    menu_name: string | null
    menu_icon: string | null
    menu_group: string | null
    permission_name: string
    menu_sort: string | null
    log_update: number
    primary_key: string | null
    show_field: string
    paginate_fetch: number
    permission_for_all: string | null
    should_backup: number
    table_name: string
    model_name: string
    schema: JsonValue
    fetch_all_manually: number
    fetch_manually: number
    create_manually: number
    update_manually: number
    delete_manually: number
    use_modal: number
    use_custom_form: number
    is_fetch_all_public: number
    is_fetch_public: number
    is_create_public: number
    is_update_public: number
    is_delete_public: number
    fetch_all_path: string | null
    fetch_path: string | null
    create_path: string | null
    update_path: string | null
    delete_path: string | null
    query_parameter: string | null
    custom_form_name: string | null
    block_fetch_all: number
    block_fetch: number
    block_create: number
    block_update: number
    block_delete: number
    is_enabled: number
    front_validations: JsonValue | null
    table_columns: JsonValue | null
    backend_validations: JsonValue | null
    relationships: JsonValue | null
    filters: JsonValue
    filters_internal: JsonValue | null
    hooks: JsonValue | null
    children: JsonValue
    info_messages: JsonValue
    config: JsonValue | null
    buttons: JsonValue | null
    others: JsonValue | null
    created_by: number | null
    created_at: Date
    updated_at: Date | null
    deleted_at: Date | null
    deleted_by: number | null
    _count: CrudUtilCountAggregateOutputType | null
    _avg: CrudUtilAvgAggregateOutputType | null
    _sum: CrudUtilSumAggregateOutputType | null
    _min: CrudUtilMinAggregateOutputType | null
    _max: CrudUtilMaxAggregateOutputType | null
  }

  type GetCrudUtilGroupByPayload<T extends CrudUtilGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CrudUtilGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CrudUtilGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CrudUtilGroupByOutputType[P]>
            : GetScalarType<T[P], CrudUtilGroupByOutputType[P]>
        }
      >
    >


  export type CrudUtilSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    menu_name?: boolean
    menu_icon?: boolean
    menu_group?: boolean
    permission_name?: boolean
    menu_sort?: boolean
    log_update?: boolean
    primary_key?: boolean
    show_field?: boolean
    paginate_fetch?: boolean
    permission_for_all?: boolean
    should_backup?: boolean
    table_name?: boolean
    model_name?: boolean
    schema?: boolean
    fetch_all_manually?: boolean
    fetch_manually?: boolean
    create_manually?: boolean
    update_manually?: boolean
    delete_manually?: boolean
    use_modal?: boolean
    use_custom_form?: boolean
    is_fetch_all_public?: boolean
    is_fetch_public?: boolean
    is_create_public?: boolean
    is_update_public?: boolean
    is_delete_public?: boolean
    fetch_all_path?: boolean
    fetch_path?: boolean
    create_path?: boolean
    update_path?: boolean
    delete_path?: boolean
    query_parameter?: boolean
    custom_form_name?: boolean
    block_fetch_all?: boolean
    block_fetch?: boolean
    block_create?: boolean
    block_update?: boolean
    block_delete?: boolean
    is_enabled?: boolean
    front_validations?: boolean
    table_columns?: boolean
    backend_validations?: boolean
    relationships?: boolean
    filters?: boolean
    filters_internal?: boolean
    hooks?: boolean
    children?: boolean
    info_messages?: boolean
    config?: boolean
    buttons?: boolean
    others?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }, ExtArgs["result"]["crudUtil"]>



  export type CrudUtilSelectScalar = {
    id?: boolean
    name?: boolean
    menu_name?: boolean
    menu_icon?: boolean
    menu_group?: boolean
    permission_name?: boolean
    menu_sort?: boolean
    log_update?: boolean
    primary_key?: boolean
    show_field?: boolean
    paginate_fetch?: boolean
    permission_for_all?: boolean
    should_backup?: boolean
    table_name?: boolean
    model_name?: boolean
    schema?: boolean
    fetch_all_manually?: boolean
    fetch_manually?: boolean
    create_manually?: boolean
    update_manually?: boolean
    delete_manually?: boolean
    use_modal?: boolean
    use_custom_form?: boolean
    is_fetch_all_public?: boolean
    is_fetch_public?: boolean
    is_create_public?: boolean
    is_update_public?: boolean
    is_delete_public?: boolean
    fetch_all_path?: boolean
    fetch_path?: boolean
    create_path?: boolean
    update_path?: boolean
    delete_path?: boolean
    query_parameter?: boolean
    custom_form_name?: boolean
    block_fetch_all?: boolean
    block_fetch?: boolean
    block_create?: boolean
    block_update?: boolean
    block_delete?: boolean
    is_enabled?: boolean
    front_validations?: boolean
    table_columns?: boolean
    backend_validations?: boolean
    relationships?: boolean
    filters?: boolean
    filters_internal?: boolean
    hooks?: boolean
    children?: boolean
    info_messages?: boolean
    config?: boolean
    buttons?: boolean
    others?: boolean
    created_by?: boolean
    created_at?: boolean
    updated_at?: boolean
    deleted_at?: boolean
    deleted_by?: boolean
  }

  export type CrudUtilOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "menu_name" | "menu_icon" | "menu_group" | "permission_name" | "menu_sort" | "log_update" | "primary_key" | "show_field" | "paginate_fetch" | "permission_for_all" | "should_backup" | "table_name" | "model_name" | "schema" | "fetch_all_manually" | "fetch_manually" | "create_manually" | "update_manually" | "delete_manually" | "use_modal" | "use_custom_form" | "is_fetch_all_public" | "is_fetch_public" | "is_create_public" | "is_update_public" | "is_delete_public" | "fetch_all_path" | "fetch_path" | "create_path" | "update_path" | "delete_path" | "query_parameter" | "custom_form_name" | "block_fetch_all" | "block_fetch" | "block_create" | "block_update" | "block_delete" | "is_enabled" | "front_validations" | "table_columns" | "backend_validations" | "relationships" | "filters" | "filters_internal" | "hooks" | "children" | "info_messages" | "config" | "buttons" | "others" | "created_by" | "created_at" | "updated_at" | "deleted_at" | "deleted_by", ExtArgs["result"]["crudUtil"]>

  export type $CrudUtilPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "CrudUtil"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      menu_name: string | null
      menu_icon: string | null
      menu_group: string | null
      permission_name: string
      menu_sort: string | null
      log_update: number
      primary_key: string | null
      show_field: string
      paginate_fetch: number
      permission_for_all: string | null
      should_backup: number
      table_name: string
      model_name: string
      schema: Prisma.JsonValue
      fetch_all_manually: number
      fetch_manually: number
      create_manually: number
      update_manually: number
      delete_manually: number
      use_modal: number
      use_custom_form: number
      is_fetch_all_public: number
      is_fetch_public: number
      is_create_public: number
      is_update_public: number
      is_delete_public: number
      fetch_all_path: string | null
      fetch_path: string | null
      create_path: string | null
      update_path: string | null
      delete_path: string | null
      query_parameter: string | null
      custom_form_name: string | null
      block_fetch_all: number
      block_fetch: number
      block_create: number
      block_update: number
      block_delete: number
      is_enabled: number
      front_validations: Prisma.JsonValue | null
      table_columns: Prisma.JsonValue | null
      backend_validations: Prisma.JsonValue | null
      relationships: Prisma.JsonValue | null
      filters: Prisma.JsonValue
      filters_internal: Prisma.JsonValue | null
      hooks: Prisma.JsonValue | null
      children: Prisma.JsonValue
      info_messages: Prisma.JsonValue
      config: Prisma.JsonValue | null
      buttons: Prisma.JsonValue | null
      others: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
      updated_at: Date | null
      deleted_at: Date | null
      deleted_by: number | null
    }, ExtArgs["result"]["crudUtil"]>
    composites: {}
  }

  type CrudUtilGetPayload<S extends boolean | null | undefined | CrudUtilDefaultArgs> = $Result.GetResult<Prisma.$CrudUtilPayload, S>

  type CrudUtilCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CrudUtilFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CrudUtilCountAggregateInputType | true
    }

  export interface CrudUtilDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['CrudUtil'], meta: { name: 'CrudUtil' } }
    /**
     * Find zero or one CrudUtil that matches the filter.
     * @param {CrudUtilFindUniqueArgs} args - Arguments to find a CrudUtil
     * @example
     * // Get one CrudUtil
     * const crudUtil = await prisma.crudUtil.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CrudUtilFindUniqueArgs>(args: SelectSubset<T, CrudUtilFindUniqueArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one CrudUtil that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CrudUtilFindUniqueOrThrowArgs} args - Arguments to find a CrudUtil
     * @example
     * // Get one CrudUtil
     * const crudUtil = await prisma.crudUtil.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CrudUtilFindUniqueOrThrowArgs>(args: SelectSubset<T, CrudUtilFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudUtil that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilFindFirstArgs} args - Arguments to find a CrudUtil
     * @example
     * // Get one CrudUtil
     * const crudUtil = await prisma.crudUtil.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CrudUtilFindFirstArgs>(args?: SelectSubset<T, CrudUtilFindFirstArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first CrudUtil that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilFindFirstOrThrowArgs} args - Arguments to find a CrudUtil
     * @example
     * // Get one CrudUtil
     * const crudUtil = await prisma.crudUtil.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CrudUtilFindFirstOrThrowArgs>(args?: SelectSubset<T, CrudUtilFindFirstOrThrowArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more CrudUtils that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all CrudUtils
     * const crudUtils = await prisma.crudUtil.findMany()
     * 
     * // Get first 10 CrudUtils
     * const crudUtils = await prisma.crudUtil.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const crudUtilWithIdOnly = await prisma.crudUtil.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CrudUtilFindManyArgs>(args?: SelectSubset<T, CrudUtilFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a CrudUtil.
     * @param {CrudUtilCreateArgs} args - Arguments to create a CrudUtil.
     * @example
     * // Create one CrudUtil
     * const CrudUtil = await prisma.crudUtil.create({
     *   data: {
     *     // ... data to create a CrudUtil
     *   }
     * })
     * 
     */
    create<T extends CrudUtilCreateArgs>(args: SelectSubset<T, CrudUtilCreateArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many CrudUtils.
     * @param {CrudUtilCreateManyArgs} args - Arguments to create many CrudUtils.
     * @example
     * // Create many CrudUtils
     * const crudUtil = await prisma.crudUtil.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CrudUtilCreateManyArgs>(args?: SelectSubset<T, CrudUtilCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a CrudUtil.
     * @param {CrudUtilDeleteArgs} args - Arguments to delete one CrudUtil.
     * @example
     * // Delete one CrudUtil
     * const CrudUtil = await prisma.crudUtil.delete({
     *   where: {
     *     // ... filter to delete one CrudUtil
     *   }
     * })
     * 
     */
    delete<T extends CrudUtilDeleteArgs>(args: SelectSubset<T, CrudUtilDeleteArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one CrudUtil.
     * @param {CrudUtilUpdateArgs} args - Arguments to update one CrudUtil.
     * @example
     * // Update one CrudUtil
     * const crudUtil = await prisma.crudUtil.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CrudUtilUpdateArgs>(args: SelectSubset<T, CrudUtilUpdateArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more CrudUtils.
     * @param {CrudUtilDeleteManyArgs} args - Arguments to filter CrudUtils to delete.
     * @example
     * // Delete a few CrudUtils
     * const { count } = await prisma.crudUtil.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CrudUtilDeleteManyArgs>(args?: SelectSubset<T, CrudUtilDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more CrudUtils.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many CrudUtils
     * const crudUtil = await prisma.crudUtil.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CrudUtilUpdateManyArgs>(args: SelectSubset<T, CrudUtilUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one CrudUtil.
     * @param {CrudUtilUpsertArgs} args - Arguments to update or create a CrudUtil.
     * @example
     * // Update or create a CrudUtil
     * const crudUtil = await prisma.crudUtil.upsert({
     *   create: {
     *     // ... data to create a CrudUtil
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the CrudUtil we want to update
     *   }
     * })
     */
    upsert<T extends CrudUtilUpsertArgs>(args: SelectSubset<T, CrudUtilUpsertArgs<ExtArgs>>): Prisma__CrudUtilClient<$Result.GetResult<Prisma.$CrudUtilPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of CrudUtils.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilCountArgs} args - Arguments to filter CrudUtils to count.
     * @example
     * // Count the number of CrudUtils
     * const count = await prisma.crudUtil.count({
     *   where: {
     *     // ... the filter for the CrudUtils we want to count
     *   }
     * })
    **/
    count<T extends CrudUtilCountArgs>(
      args?: Subset<T, CrudUtilCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CrudUtilCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a CrudUtil.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CrudUtilAggregateArgs>(args: Subset<T, CrudUtilAggregateArgs>): Prisma.PrismaPromise<GetCrudUtilAggregateType<T>>

    /**
     * Group by CrudUtil.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CrudUtilGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CrudUtilGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CrudUtilGroupByArgs['orderBy'] }
        : { orderBy?: CrudUtilGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CrudUtilGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCrudUtilGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the CrudUtil model
   */
  readonly fields: CrudUtilFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for CrudUtil.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CrudUtilClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the CrudUtil model
   */
  interface CrudUtilFieldRefs {
    readonly id: FieldRef<"CrudUtil", 'Int'>
    readonly name: FieldRef<"CrudUtil", 'String'>
    readonly menu_name: FieldRef<"CrudUtil", 'String'>
    readonly menu_icon: FieldRef<"CrudUtil", 'String'>
    readonly menu_group: FieldRef<"CrudUtil", 'String'>
    readonly permission_name: FieldRef<"CrudUtil", 'String'>
    readonly menu_sort: FieldRef<"CrudUtil", 'String'>
    readonly log_update: FieldRef<"CrudUtil", 'Int'>
    readonly primary_key: FieldRef<"CrudUtil", 'String'>
    readonly show_field: FieldRef<"CrudUtil", 'String'>
    readonly paginate_fetch: FieldRef<"CrudUtil", 'Int'>
    readonly permission_for_all: FieldRef<"CrudUtil", 'String'>
    readonly should_backup: FieldRef<"CrudUtil", 'Int'>
    readonly table_name: FieldRef<"CrudUtil", 'String'>
    readonly model_name: FieldRef<"CrudUtil", 'String'>
    readonly schema: FieldRef<"CrudUtil", 'Json'>
    readonly fetch_all_manually: FieldRef<"CrudUtil", 'Int'>
    readonly fetch_manually: FieldRef<"CrudUtil", 'Int'>
    readonly create_manually: FieldRef<"CrudUtil", 'Int'>
    readonly update_manually: FieldRef<"CrudUtil", 'Int'>
    readonly delete_manually: FieldRef<"CrudUtil", 'Int'>
    readonly use_modal: FieldRef<"CrudUtil", 'Int'>
    readonly use_custom_form: FieldRef<"CrudUtil", 'Int'>
    readonly is_fetch_all_public: FieldRef<"CrudUtil", 'Int'>
    readonly is_fetch_public: FieldRef<"CrudUtil", 'Int'>
    readonly is_create_public: FieldRef<"CrudUtil", 'Int'>
    readonly is_update_public: FieldRef<"CrudUtil", 'Int'>
    readonly is_delete_public: FieldRef<"CrudUtil", 'Int'>
    readonly fetch_all_path: FieldRef<"CrudUtil", 'String'>
    readonly fetch_path: FieldRef<"CrudUtil", 'String'>
    readonly create_path: FieldRef<"CrudUtil", 'String'>
    readonly update_path: FieldRef<"CrudUtil", 'String'>
    readonly delete_path: FieldRef<"CrudUtil", 'String'>
    readonly query_parameter: FieldRef<"CrudUtil", 'String'>
    readonly custom_form_name: FieldRef<"CrudUtil", 'String'>
    readonly block_fetch_all: FieldRef<"CrudUtil", 'Int'>
    readonly block_fetch: FieldRef<"CrudUtil", 'Int'>
    readonly block_create: FieldRef<"CrudUtil", 'Int'>
    readonly block_update: FieldRef<"CrudUtil", 'Int'>
    readonly block_delete: FieldRef<"CrudUtil", 'Int'>
    readonly is_enabled: FieldRef<"CrudUtil", 'Int'>
    readonly front_validations: FieldRef<"CrudUtil", 'Json'>
    readonly table_columns: FieldRef<"CrudUtil", 'Json'>
    readonly backend_validations: FieldRef<"CrudUtil", 'Json'>
    readonly relationships: FieldRef<"CrudUtil", 'Json'>
    readonly filters: FieldRef<"CrudUtil", 'Json'>
    readonly filters_internal: FieldRef<"CrudUtil", 'Json'>
    readonly hooks: FieldRef<"CrudUtil", 'Json'>
    readonly children: FieldRef<"CrudUtil", 'Json'>
    readonly info_messages: FieldRef<"CrudUtil", 'Json'>
    readonly config: FieldRef<"CrudUtil", 'Json'>
    readonly buttons: FieldRef<"CrudUtil", 'Json'>
    readonly others: FieldRef<"CrudUtil", 'Json'>
    readonly created_by: FieldRef<"CrudUtil", 'Int'>
    readonly created_at: FieldRef<"CrudUtil", 'DateTime'>
    readonly updated_at: FieldRef<"CrudUtil", 'DateTime'>
    readonly deleted_at: FieldRef<"CrudUtil", 'DateTime'>
    readonly deleted_by: FieldRef<"CrudUtil", 'Int'>
  }
    

  // Custom InputTypes
  /**
   * CrudUtil findUnique
   */
  export type CrudUtilFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter, which CrudUtil to fetch.
     */
    where: CrudUtilWhereUniqueInput
  }

  /**
   * CrudUtil findUniqueOrThrow
   */
  export type CrudUtilFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter, which CrudUtil to fetch.
     */
    where: CrudUtilWhereUniqueInput
  }

  /**
   * CrudUtil findFirst
   */
  export type CrudUtilFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter, which CrudUtil to fetch.
     */
    where?: CrudUtilWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudUtils to fetch.
     */
    orderBy?: CrudUtilOrderByWithRelationInput | CrudUtilOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudUtils.
     */
    cursor?: CrudUtilWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudUtils from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudUtils.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudUtils.
     */
    distinct?: CrudUtilScalarFieldEnum | CrudUtilScalarFieldEnum[]
  }

  /**
   * CrudUtil findFirstOrThrow
   */
  export type CrudUtilFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter, which CrudUtil to fetch.
     */
    where?: CrudUtilWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudUtils to fetch.
     */
    orderBy?: CrudUtilOrderByWithRelationInput | CrudUtilOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for CrudUtils.
     */
    cursor?: CrudUtilWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudUtils from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudUtils.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of CrudUtils.
     */
    distinct?: CrudUtilScalarFieldEnum | CrudUtilScalarFieldEnum[]
  }

  /**
   * CrudUtil findMany
   */
  export type CrudUtilFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter, which CrudUtils to fetch.
     */
    where?: CrudUtilWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of CrudUtils to fetch.
     */
    orderBy?: CrudUtilOrderByWithRelationInput | CrudUtilOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing CrudUtils.
     */
    cursor?: CrudUtilWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` CrudUtils from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` CrudUtils.
     */
    skip?: number
    distinct?: CrudUtilScalarFieldEnum | CrudUtilScalarFieldEnum[]
  }

  /**
   * CrudUtil create
   */
  export type CrudUtilCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * The data needed to create a CrudUtil.
     */
    data: XOR<CrudUtilCreateInput, CrudUtilUncheckedCreateInput>
  }

  /**
   * CrudUtil createMany
   */
  export type CrudUtilCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many CrudUtils.
     */
    data: CrudUtilCreateManyInput | CrudUtilCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * CrudUtil update
   */
  export type CrudUtilUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * The data needed to update a CrudUtil.
     */
    data: XOR<CrudUtilUpdateInput, CrudUtilUncheckedUpdateInput>
    /**
     * Choose, which CrudUtil to update.
     */
    where: CrudUtilWhereUniqueInput
  }

  /**
   * CrudUtil updateMany
   */
  export type CrudUtilUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update CrudUtils.
     */
    data: XOR<CrudUtilUpdateManyMutationInput, CrudUtilUncheckedUpdateManyInput>
    /**
     * Filter which CrudUtils to update
     */
    where?: CrudUtilWhereInput
    /**
     * Limit how many CrudUtils to update.
     */
    limit?: number
  }

  /**
   * CrudUtil upsert
   */
  export type CrudUtilUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * The filter to search for the CrudUtil to update in case it exists.
     */
    where: CrudUtilWhereUniqueInput
    /**
     * In case the CrudUtil found by the `where` argument doesn't exist, create a new CrudUtil with this data.
     */
    create: XOR<CrudUtilCreateInput, CrudUtilUncheckedCreateInput>
    /**
     * In case the CrudUtil was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CrudUtilUpdateInput, CrudUtilUncheckedUpdateInput>
  }

  /**
   * CrudUtil delete
   */
  export type CrudUtilDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
    /**
     * Filter which CrudUtil to delete.
     */
    where: CrudUtilWhereUniqueInput
  }

  /**
   * CrudUtil deleteMany
   */
  export type CrudUtilDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which CrudUtils to delete
     */
    where?: CrudUtilWhereInput
    /**
     * Limit how many CrudUtils to delete.
     */
    limit?: number
  }

  /**
   * CrudUtil without action
   */
  export type CrudUtilDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the CrudUtil
     */
    select?: CrudUtilSelect<ExtArgs> | null
    /**
     * Omit specific fields from the CrudUtil
     */
    omit?: CrudUtilOmit<ExtArgs> | null
  }


  /**
   * Model Region
   */

  export type AggregateRegion = {
    _count: RegionCountAggregateOutputType | null
    _avg: RegionAvgAggregateOutputType | null
    _sum: RegionSumAggregateOutputType | null
    _min: RegionMinAggregateOutputType | null
    _max: RegionMaxAggregateOutputType | null
  }

  export type RegionAvgAggregateOutputType = {
    id: number | null
  }

  export type RegionSumAggregateOutputType = {
    id: number | null
  }

  export type RegionMinAggregateOutputType = {
    id: number | null
    name: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type RegionMaxAggregateOutputType = {
    id: number | null
    name: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type RegionCountAggregateOutputType = {
    id: number
    name: number
    translations: number
    wikiDataId: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type RegionAvgAggregateInputType = {
    id?: true
  }

  export type RegionSumAggregateInputType = {
    id?: true
  }

  export type RegionMinAggregateInputType = {
    id?: true
    name?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type RegionMaxAggregateInputType = {
    id?: true
    name?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type RegionCountAggregateInputType = {
    id?: true
    name?: true
    translations?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type RegionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Region to aggregate.
     */
    where?: RegionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Regions to fetch.
     */
    orderBy?: RegionOrderByWithRelationInput | RegionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: RegionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Regions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Regions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Regions
    **/
    _count?: true | RegionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: RegionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: RegionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: RegionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: RegionMaxAggregateInputType
  }

  export type GetRegionAggregateType<T extends RegionAggregateArgs> = {
        [P in keyof T & keyof AggregateRegion]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateRegion[P]>
      : GetScalarType<T[P], AggregateRegion[P]>
  }




  export type RegionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: RegionWhereInput
    orderBy?: RegionOrderByWithAggregationInput | RegionOrderByWithAggregationInput[]
    by: RegionScalarFieldEnum[] | RegionScalarFieldEnum
    having?: RegionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: RegionCountAggregateInputType | true
    _avg?: RegionAvgAggregateInputType
    _sum?: RegionSumAggregateInputType
    _min?: RegionMinAggregateInputType
    _max?: RegionMaxAggregateInputType
  }

  export type RegionGroupByOutputType = {
    id: number
    name: string
    translations: JsonValue | null
    wikiDataId: string | null
    createdAt: Date
    updatedAt: Date
    _count: RegionCountAggregateOutputType | null
    _avg: RegionAvgAggregateOutputType | null
    _sum: RegionSumAggregateOutputType | null
    _min: RegionMinAggregateOutputType | null
    _max: RegionMaxAggregateOutputType | null
  }

  type GetRegionGroupByPayload<T extends RegionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<RegionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof RegionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], RegionGroupByOutputType[P]>
            : GetScalarType<T[P], RegionGroupByOutputType[P]>
        }
      >
    >


  export type RegionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    translations?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    countries?: boolean | Region$countriesArgs<ExtArgs>
    subregions?: boolean | Region$subregionsArgs<ExtArgs>
    _count?: boolean | RegionCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["region"]>



  export type RegionSelectScalar = {
    id?: boolean
    name?: boolean
    translations?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type RegionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "translations" | "wikiDataId" | "createdAt" | "updatedAt", ExtArgs["result"]["region"]>
  export type RegionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    countries?: boolean | Region$countriesArgs<ExtArgs>
    subregions?: boolean | Region$subregionsArgs<ExtArgs>
    _count?: boolean | RegionCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $RegionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Region"
    objects: {
      countries: Prisma.$CountryPayload<ExtArgs>[]
      subregions: Prisma.$SubregionPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      translations: Prisma.JsonValue | null
      wikiDataId: string | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["region"]>
    composites: {}
  }

  type RegionGetPayload<S extends boolean | null | undefined | RegionDefaultArgs> = $Result.GetResult<Prisma.$RegionPayload, S>

  type RegionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<RegionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: RegionCountAggregateInputType | true
    }

  export interface RegionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Region'], meta: { name: 'Region' } }
    /**
     * Find zero or one Region that matches the filter.
     * @param {RegionFindUniqueArgs} args - Arguments to find a Region
     * @example
     * // Get one Region
     * const region = await prisma.region.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends RegionFindUniqueArgs>(args: SelectSubset<T, RegionFindUniqueArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Region that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {RegionFindUniqueOrThrowArgs} args - Arguments to find a Region
     * @example
     * // Get one Region
     * const region = await prisma.region.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends RegionFindUniqueOrThrowArgs>(args: SelectSubset<T, RegionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Region that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionFindFirstArgs} args - Arguments to find a Region
     * @example
     * // Get one Region
     * const region = await prisma.region.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends RegionFindFirstArgs>(args?: SelectSubset<T, RegionFindFirstArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Region that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionFindFirstOrThrowArgs} args - Arguments to find a Region
     * @example
     * // Get one Region
     * const region = await prisma.region.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends RegionFindFirstOrThrowArgs>(args?: SelectSubset<T, RegionFindFirstOrThrowArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Regions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Regions
     * const regions = await prisma.region.findMany()
     * 
     * // Get first 10 Regions
     * const regions = await prisma.region.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const regionWithIdOnly = await prisma.region.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends RegionFindManyArgs>(args?: SelectSubset<T, RegionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Region.
     * @param {RegionCreateArgs} args - Arguments to create a Region.
     * @example
     * // Create one Region
     * const Region = await prisma.region.create({
     *   data: {
     *     // ... data to create a Region
     *   }
     * })
     * 
     */
    create<T extends RegionCreateArgs>(args: SelectSubset<T, RegionCreateArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Regions.
     * @param {RegionCreateManyArgs} args - Arguments to create many Regions.
     * @example
     * // Create many Regions
     * const region = await prisma.region.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends RegionCreateManyArgs>(args?: SelectSubset<T, RegionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Region.
     * @param {RegionDeleteArgs} args - Arguments to delete one Region.
     * @example
     * // Delete one Region
     * const Region = await prisma.region.delete({
     *   where: {
     *     // ... filter to delete one Region
     *   }
     * })
     * 
     */
    delete<T extends RegionDeleteArgs>(args: SelectSubset<T, RegionDeleteArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Region.
     * @param {RegionUpdateArgs} args - Arguments to update one Region.
     * @example
     * // Update one Region
     * const region = await prisma.region.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends RegionUpdateArgs>(args: SelectSubset<T, RegionUpdateArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Regions.
     * @param {RegionDeleteManyArgs} args - Arguments to filter Regions to delete.
     * @example
     * // Delete a few Regions
     * const { count } = await prisma.region.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends RegionDeleteManyArgs>(args?: SelectSubset<T, RegionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Regions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Regions
     * const region = await prisma.region.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends RegionUpdateManyArgs>(args: SelectSubset<T, RegionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Region.
     * @param {RegionUpsertArgs} args - Arguments to update or create a Region.
     * @example
     * // Update or create a Region
     * const region = await prisma.region.upsert({
     *   create: {
     *     // ... data to create a Region
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Region we want to update
     *   }
     * })
     */
    upsert<T extends RegionUpsertArgs>(args: SelectSubset<T, RegionUpsertArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Regions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionCountArgs} args - Arguments to filter Regions to count.
     * @example
     * // Count the number of Regions
     * const count = await prisma.region.count({
     *   where: {
     *     // ... the filter for the Regions we want to count
     *   }
     * })
    **/
    count<T extends RegionCountArgs>(
      args?: Subset<T, RegionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], RegionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Region.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends RegionAggregateArgs>(args: Subset<T, RegionAggregateArgs>): Prisma.PrismaPromise<GetRegionAggregateType<T>>

    /**
     * Group by Region.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {RegionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends RegionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: RegionGroupByArgs['orderBy'] }
        : { orderBy?: RegionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, RegionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetRegionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Region model
   */
  readonly fields: RegionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Region.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__RegionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    countries<T extends Region$countriesArgs<ExtArgs> = {}>(args?: Subset<T, Region$countriesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    subregions<T extends Region$subregionsArgs<ExtArgs> = {}>(args?: Subset<T, Region$subregionsArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Region model
   */
  interface RegionFieldRefs {
    readonly id: FieldRef<"Region", 'Int'>
    readonly name: FieldRef<"Region", 'String'>
    readonly translations: FieldRef<"Region", 'Json'>
    readonly wikiDataId: FieldRef<"Region", 'String'>
    readonly createdAt: FieldRef<"Region", 'DateTime'>
    readonly updatedAt: FieldRef<"Region", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Region findUnique
   */
  export type RegionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter, which Region to fetch.
     */
    where: RegionWhereUniqueInput
  }

  /**
   * Region findUniqueOrThrow
   */
  export type RegionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter, which Region to fetch.
     */
    where: RegionWhereUniqueInput
  }

  /**
   * Region findFirst
   */
  export type RegionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter, which Region to fetch.
     */
    where?: RegionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Regions to fetch.
     */
    orderBy?: RegionOrderByWithRelationInput | RegionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Regions.
     */
    cursor?: RegionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Regions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Regions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Regions.
     */
    distinct?: RegionScalarFieldEnum | RegionScalarFieldEnum[]
  }

  /**
   * Region findFirstOrThrow
   */
  export type RegionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter, which Region to fetch.
     */
    where?: RegionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Regions to fetch.
     */
    orderBy?: RegionOrderByWithRelationInput | RegionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Regions.
     */
    cursor?: RegionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Regions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Regions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Regions.
     */
    distinct?: RegionScalarFieldEnum | RegionScalarFieldEnum[]
  }

  /**
   * Region findMany
   */
  export type RegionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter, which Regions to fetch.
     */
    where?: RegionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Regions to fetch.
     */
    orderBy?: RegionOrderByWithRelationInput | RegionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Regions.
     */
    cursor?: RegionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Regions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Regions.
     */
    skip?: number
    distinct?: RegionScalarFieldEnum | RegionScalarFieldEnum[]
  }

  /**
   * Region create
   */
  export type RegionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * The data needed to create a Region.
     */
    data: XOR<RegionCreateInput, RegionUncheckedCreateInput>
  }

  /**
   * Region createMany
   */
  export type RegionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Regions.
     */
    data: RegionCreateManyInput | RegionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Region update
   */
  export type RegionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * The data needed to update a Region.
     */
    data: XOR<RegionUpdateInput, RegionUncheckedUpdateInput>
    /**
     * Choose, which Region to update.
     */
    where: RegionWhereUniqueInput
  }

  /**
   * Region updateMany
   */
  export type RegionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Regions.
     */
    data: XOR<RegionUpdateManyMutationInput, RegionUncheckedUpdateManyInput>
    /**
     * Filter which Regions to update
     */
    where?: RegionWhereInput
    /**
     * Limit how many Regions to update.
     */
    limit?: number
  }

  /**
   * Region upsert
   */
  export type RegionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * The filter to search for the Region to update in case it exists.
     */
    where: RegionWhereUniqueInput
    /**
     * In case the Region found by the `where` argument doesn't exist, create a new Region with this data.
     */
    create: XOR<RegionCreateInput, RegionUncheckedCreateInput>
    /**
     * In case the Region was found with the provided `where` argument, update it with this data.
     */
    update: XOR<RegionUpdateInput, RegionUncheckedUpdateInput>
  }

  /**
   * Region delete
   */
  export type RegionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    /**
     * Filter which Region to delete.
     */
    where: RegionWhereUniqueInput
  }

  /**
   * Region deleteMany
   */
  export type RegionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Regions to delete
     */
    where?: RegionWhereInput
    /**
     * Limit how many Regions to delete.
     */
    limit?: number
  }

  /**
   * Region.countries
   */
  export type Region$countriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    where?: CountryWhereInput
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    cursor?: CountryWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Region.subregions
   */
  export type Region$subregionsArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    where?: SubregionWhereInput
    orderBy?: SubregionOrderByWithRelationInput | SubregionOrderByWithRelationInput[]
    cursor?: SubregionWhereUniqueInput
    take?: number
    skip?: number
    distinct?: SubregionScalarFieldEnum | SubregionScalarFieldEnum[]
  }

  /**
   * Region without action
   */
  export type RegionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
  }


  /**
   * Model Subregion
   */

  export type AggregateSubregion = {
    _count: SubregionCountAggregateOutputType | null
    _avg: SubregionAvgAggregateOutputType | null
    _sum: SubregionSumAggregateOutputType | null
    _min: SubregionMinAggregateOutputType | null
    _max: SubregionMaxAggregateOutputType | null
  }

  export type SubregionAvgAggregateOutputType = {
    id: number | null
    region_id: number | null
  }

  export type SubregionSumAggregateOutputType = {
    id: number | null
    region_id: number | null
  }

  export type SubregionMinAggregateOutputType = {
    id: number | null
    name: string | null
    region_id: number | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type SubregionMaxAggregateOutputType = {
    id: number | null
    name: string | null
    region_id: number | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type SubregionCountAggregateOutputType = {
    id: number
    name: number
    region_id: number
    translations: number
    wikiDataId: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type SubregionAvgAggregateInputType = {
    id?: true
    region_id?: true
  }

  export type SubregionSumAggregateInputType = {
    id?: true
    region_id?: true
  }

  export type SubregionMinAggregateInputType = {
    id?: true
    name?: true
    region_id?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type SubregionMaxAggregateInputType = {
    id?: true
    name?: true
    region_id?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type SubregionCountAggregateInputType = {
    id?: true
    name?: true
    region_id?: true
    translations?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type SubregionAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Subregion to aggregate.
     */
    where?: SubregionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Subregions to fetch.
     */
    orderBy?: SubregionOrderByWithRelationInput | SubregionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: SubregionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Subregions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Subregions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Subregions
    **/
    _count?: true | SubregionCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: SubregionAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: SubregionSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: SubregionMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: SubregionMaxAggregateInputType
  }

  export type GetSubregionAggregateType<T extends SubregionAggregateArgs> = {
        [P in keyof T & keyof AggregateSubregion]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateSubregion[P]>
      : GetScalarType<T[P], AggregateSubregion[P]>
  }




  export type SubregionGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: SubregionWhereInput
    orderBy?: SubregionOrderByWithAggregationInput | SubregionOrderByWithAggregationInput[]
    by: SubregionScalarFieldEnum[] | SubregionScalarFieldEnum
    having?: SubregionScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: SubregionCountAggregateInputType | true
    _avg?: SubregionAvgAggregateInputType
    _sum?: SubregionSumAggregateInputType
    _min?: SubregionMinAggregateInputType
    _max?: SubregionMaxAggregateInputType
  }

  export type SubregionGroupByOutputType = {
    id: number
    name: string
    region_id: number
    translations: JsonValue | null
    wikiDataId: string | null
    createdAt: Date
    updatedAt: Date
    _count: SubregionCountAggregateOutputType | null
    _avg: SubregionAvgAggregateOutputType | null
    _sum: SubregionSumAggregateOutputType | null
    _min: SubregionMinAggregateOutputType | null
    _max: SubregionMaxAggregateOutputType | null
  }

  type GetSubregionGroupByPayload<T extends SubregionGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<SubregionGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof SubregionGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], SubregionGroupByOutputType[P]>
            : GetScalarType<T[P], SubregionGroupByOutputType[P]>
        }
      >
    >


  export type SubregionSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    region_id?: boolean
    translations?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    region?: boolean | RegionDefaultArgs<ExtArgs>
    countries?: boolean | Subregion$countriesArgs<ExtArgs>
    _count?: boolean | SubregionCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["subregion"]>



  export type SubregionSelectScalar = {
    id?: boolean
    name?: boolean
    region_id?: boolean
    translations?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type SubregionOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "region_id" | "translations" | "wikiDataId" | "createdAt" | "updatedAt", ExtArgs["result"]["subregion"]>
  export type SubregionInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    region?: boolean | RegionDefaultArgs<ExtArgs>
    countries?: boolean | Subregion$countriesArgs<ExtArgs>
    _count?: boolean | SubregionCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $SubregionPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Subregion"
    objects: {
      region: Prisma.$RegionPayload<ExtArgs>
      countries: Prisma.$CountryPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      region_id: number
      translations: Prisma.JsonValue | null
      wikiDataId: string | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["subregion"]>
    composites: {}
  }

  type SubregionGetPayload<S extends boolean | null | undefined | SubregionDefaultArgs> = $Result.GetResult<Prisma.$SubregionPayload, S>

  type SubregionCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<SubregionFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: SubregionCountAggregateInputType | true
    }

  export interface SubregionDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Subregion'], meta: { name: 'Subregion' } }
    /**
     * Find zero or one Subregion that matches the filter.
     * @param {SubregionFindUniqueArgs} args - Arguments to find a Subregion
     * @example
     * // Get one Subregion
     * const subregion = await prisma.subregion.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends SubregionFindUniqueArgs>(args: SelectSubset<T, SubregionFindUniqueArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Subregion that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {SubregionFindUniqueOrThrowArgs} args - Arguments to find a Subregion
     * @example
     * // Get one Subregion
     * const subregion = await prisma.subregion.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends SubregionFindUniqueOrThrowArgs>(args: SelectSubset<T, SubregionFindUniqueOrThrowArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Subregion that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionFindFirstArgs} args - Arguments to find a Subregion
     * @example
     * // Get one Subregion
     * const subregion = await prisma.subregion.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends SubregionFindFirstArgs>(args?: SelectSubset<T, SubregionFindFirstArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Subregion that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionFindFirstOrThrowArgs} args - Arguments to find a Subregion
     * @example
     * // Get one Subregion
     * const subregion = await prisma.subregion.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends SubregionFindFirstOrThrowArgs>(args?: SelectSubset<T, SubregionFindFirstOrThrowArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Subregions that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Subregions
     * const subregions = await prisma.subregion.findMany()
     * 
     * // Get first 10 Subregions
     * const subregions = await prisma.subregion.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const subregionWithIdOnly = await prisma.subregion.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends SubregionFindManyArgs>(args?: SelectSubset<T, SubregionFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Subregion.
     * @param {SubregionCreateArgs} args - Arguments to create a Subregion.
     * @example
     * // Create one Subregion
     * const Subregion = await prisma.subregion.create({
     *   data: {
     *     // ... data to create a Subregion
     *   }
     * })
     * 
     */
    create<T extends SubregionCreateArgs>(args: SelectSubset<T, SubregionCreateArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Subregions.
     * @param {SubregionCreateManyArgs} args - Arguments to create many Subregions.
     * @example
     * // Create many Subregions
     * const subregion = await prisma.subregion.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends SubregionCreateManyArgs>(args?: SelectSubset<T, SubregionCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Subregion.
     * @param {SubregionDeleteArgs} args - Arguments to delete one Subregion.
     * @example
     * // Delete one Subregion
     * const Subregion = await prisma.subregion.delete({
     *   where: {
     *     // ... filter to delete one Subregion
     *   }
     * })
     * 
     */
    delete<T extends SubregionDeleteArgs>(args: SelectSubset<T, SubregionDeleteArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Subregion.
     * @param {SubregionUpdateArgs} args - Arguments to update one Subregion.
     * @example
     * // Update one Subregion
     * const subregion = await prisma.subregion.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends SubregionUpdateArgs>(args: SelectSubset<T, SubregionUpdateArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Subregions.
     * @param {SubregionDeleteManyArgs} args - Arguments to filter Subregions to delete.
     * @example
     * // Delete a few Subregions
     * const { count } = await prisma.subregion.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends SubregionDeleteManyArgs>(args?: SelectSubset<T, SubregionDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Subregions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Subregions
     * const subregion = await prisma.subregion.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends SubregionUpdateManyArgs>(args: SelectSubset<T, SubregionUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Subregion.
     * @param {SubregionUpsertArgs} args - Arguments to update or create a Subregion.
     * @example
     * // Update or create a Subregion
     * const subregion = await prisma.subregion.upsert({
     *   create: {
     *     // ... data to create a Subregion
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Subregion we want to update
     *   }
     * })
     */
    upsert<T extends SubregionUpsertArgs>(args: SelectSubset<T, SubregionUpsertArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Subregions.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionCountArgs} args - Arguments to filter Subregions to count.
     * @example
     * // Count the number of Subregions
     * const count = await prisma.subregion.count({
     *   where: {
     *     // ... the filter for the Subregions we want to count
     *   }
     * })
    **/
    count<T extends SubregionCountArgs>(
      args?: Subset<T, SubregionCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], SubregionCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Subregion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends SubregionAggregateArgs>(args: Subset<T, SubregionAggregateArgs>): Prisma.PrismaPromise<GetSubregionAggregateType<T>>

    /**
     * Group by Subregion.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {SubregionGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends SubregionGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: SubregionGroupByArgs['orderBy'] }
        : { orderBy?: SubregionGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, SubregionGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetSubregionGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Subregion model
   */
  readonly fields: SubregionFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Subregion.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__SubregionClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    region<T extends RegionDefaultArgs<ExtArgs> = {}>(args?: Subset<T, RegionDefaultArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    countries<T extends Subregion$countriesArgs<ExtArgs> = {}>(args?: Subset<T, Subregion$countriesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Subregion model
   */
  interface SubregionFieldRefs {
    readonly id: FieldRef<"Subregion", 'Int'>
    readonly name: FieldRef<"Subregion", 'String'>
    readonly region_id: FieldRef<"Subregion", 'Int'>
    readonly translations: FieldRef<"Subregion", 'Json'>
    readonly wikiDataId: FieldRef<"Subregion", 'String'>
    readonly createdAt: FieldRef<"Subregion", 'DateTime'>
    readonly updatedAt: FieldRef<"Subregion", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Subregion findUnique
   */
  export type SubregionFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter, which Subregion to fetch.
     */
    where: SubregionWhereUniqueInput
  }

  /**
   * Subregion findUniqueOrThrow
   */
  export type SubregionFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter, which Subregion to fetch.
     */
    where: SubregionWhereUniqueInput
  }

  /**
   * Subregion findFirst
   */
  export type SubregionFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter, which Subregion to fetch.
     */
    where?: SubregionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Subregions to fetch.
     */
    orderBy?: SubregionOrderByWithRelationInput | SubregionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Subregions.
     */
    cursor?: SubregionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Subregions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Subregions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Subregions.
     */
    distinct?: SubregionScalarFieldEnum | SubregionScalarFieldEnum[]
  }

  /**
   * Subregion findFirstOrThrow
   */
  export type SubregionFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter, which Subregion to fetch.
     */
    where?: SubregionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Subregions to fetch.
     */
    orderBy?: SubregionOrderByWithRelationInput | SubregionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Subregions.
     */
    cursor?: SubregionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Subregions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Subregions.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Subregions.
     */
    distinct?: SubregionScalarFieldEnum | SubregionScalarFieldEnum[]
  }

  /**
   * Subregion findMany
   */
  export type SubregionFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter, which Subregions to fetch.
     */
    where?: SubregionWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Subregions to fetch.
     */
    orderBy?: SubregionOrderByWithRelationInput | SubregionOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Subregions.
     */
    cursor?: SubregionWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Subregions from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Subregions.
     */
    skip?: number
    distinct?: SubregionScalarFieldEnum | SubregionScalarFieldEnum[]
  }

  /**
   * Subregion create
   */
  export type SubregionCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * The data needed to create a Subregion.
     */
    data: XOR<SubregionCreateInput, SubregionUncheckedCreateInput>
  }

  /**
   * Subregion createMany
   */
  export type SubregionCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Subregions.
     */
    data: SubregionCreateManyInput | SubregionCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Subregion update
   */
  export type SubregionUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * The data needed to update a Subregion.
     */
    data: XOR<SubregionUpdateInput, SubregionUncheckedUpdateInput>
    /**
     * Choose, which Subregion to update.
     */
    where: SubregionWhereUniqueInput
  }

  /**
   * Subregion updateMany
   */
  export type SubregionUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Subregions.
     */
    data: XOR<SubregionUpdateManyMutationInput, SubregionUncheckedUpdateManyInput>
    /**
     * Filter which Subregions to update
     */
    where?: SubregionWhereInput
    /**
     * Limit how many Subregions to update.
     */
    limit?: number
  }

  /**
   * Subregion upsert
   */
  export type SubregionUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * The filter to search for the Subregion to update in case it exists.
     */
    where: SubregionWhereUniqueInput
    /**
     * In case the Subregion found by the `where` argument doesn't exist, create a new Subregion with this data.
     */
    create: XOR<SubregionCreateInput, SubregionUncheckedCreateInput>
    /**
     * In case the Subregion was found with the provided `where` argument, update it with this data.
     */
    update: XOR<SubregionUpdateInput, SubregionUncheckedUpdateInput>
  }

  /**
   * Subregion delete
   */
  export type SubregionDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    /**
     * Filter which Subregion to delete.
     */
    where: SubregionWhereUniqueInput
  }

  /**
   * Subregion deleteMany
   */
  export type SubregionDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Subregions to delete
     */
    where?: SubregionWhereInput
    /**
     * Limit how many Subregions to delete.
     */
    limit?: number
  }

  /**
   * Subregion.countries
   */
  export type Subregion$countriesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    where?: CountryWhereInput
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    cursor?: CountryWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Subregion without action
   */
  export type SubregionDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
  }


  /**
   * Model Country
   */

  export type AggregateCountry = {
    _count: CountryCountAggregateOutputType | null
    _avg: CountryAvgAggregateOutputType | null
    _sum: CountrySumAggregateOutputType | null
    _min: CountryMinAggregateOutputType | null
    _max: CountryMaxAggregateOutputType | null
  }

  export type CountryAvgAggregateOutputType = {
    id: number | null
    population: number | null
    gdp: number | null
    region_id: number | null
    subregion_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type CountrySumAggregateOutputType = {
    id: number | null
    population: number | null
    gdp: number | null
    region_id: number | null
    subregion_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type CountryMinAggregateOutputType = {
    id: number | null
    name: string | null
    iso3: string | null
    iso2: string | null
    numeric_code: string | null
    phonecode: string | null
    capital: string | null
    currency: string | null
    currency_name: string | null
    currency_symbol: string | null
    tld: string | null
    native_reserved: string | null
    population: number | null
    gdp: number | null
    region: string | null
    region_id: number | null
    subregion: string | null
    subregion_id: number | null
    nationality: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    emoji: string | null
    emojiU: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type CountryMaxAggregateOutputType = {
    id: number | null
    name: string | null
    iso3: string | null
    iso2: string | null
    numeric_code: string | null
    phonecode: string | null
    capital: string | null
    currency: string | null
    currency_name: string | null
    currency_symbol: string | null
    tld: string | null
    native_reserved: string | null
    population: number | null
    gdp: number | null
    region: string | null
    region_id: number | null
    subregion: string | null
    subregion_id: number | null
    nationality: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    emoji: string | null
    emojiU: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type CountryCountAggregateOutputType = {
    id: number
    name: number
    iso3: number
    iso2: number
    numeric_code: number
    phonecode: number
    capital: number
    currency: number
    currency_name: number
    currency_symbol: number
    tld: number
    native_reserved: number
    population: number
    gdp: number
    region: number
    region_id: number
    subregion: number
    subregion_id: number
    nationality: number
    timezones: number
    translations: number
    latitude: number
    longitude: number
    emoji: number
    emojiU: number
    wikiDataId: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type CountryAvgAggregateInputType = {
    id?: true
    population?: true
    gdp?: true
    region_id?: true
    subregion_id?: true
    latitude?: true
    longitude?: true
  }

  export type CountrySumAggregateInputType = {
    id?: true
    population?: true
    gdp?: true
    region_id?: true
    subregion_id?: true
    latitude?: true
    longitude?: true
  }

  export type CountryMinAggregateInputType = {
    id?: true
    name?: true
    iso3?: true
    iso2?: true
    numeric_code?: true
    phonecode?: true
    capital?: true
    currency?: true
    currency_name?: true
    currency_symbol?: true
    tld?: true
    native_reserved?: true
    population?: true
    gdp?: true
    region?: true
    region_id?: true
    subregion?: true
    subregion_id?: true
    nationality?: true
    latitude?: true
    longitude?: true
    emoji?: true
    emojiU?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type CountryMaxAggregateInputType = {
    id?: true
    name?: true
    iso3?: true
    iso2?: true
    numeric_code?: true
    phonecode?: true
    capital?: true
    currency?: true
    currency_name?: true
    currency_symbol?: true
    tld?: true
    native_reserved?: true
    population?: true
    gdp?: true
    region?: true
    region_id?: true
    subregion?: true
    subregion_id?: true
    nationality?: true
    latitude?: true
    longitude?: true
    emoji?: true
    emojiU?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type CountryCountAggregateInputType = {
    id?: true
    name?: true
    iso3?: true
    iso2?: true
    numeric_code?: true
    phonecode?: true
    capital?: true
    currency?: true
    currency_name?: true
    currency_symbol?: true
    tld?: true
    native_reserved?: true
    population?: true
    gdp?: true
    region?: true
    region_id?: true
    subregion?: true
    subregion_id?: true
    nationality?: true
    timezones?: true
    translations?: true
    latitude?: true
    longitude?: true
    emoji?: true
    emojiU?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type CountryAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Country to aggregate.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Countries
    **/
    _count?: true | CountryCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CountryAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CountrySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CountryMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CountryMaxAggregateInputType
  }

  export type GetCountryAggregateType<T extends CountryAggregateArgs> = {
        [P in keyof T & keyof AggregateCountry]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCountry[P]>
      : GetScalarType<T[P], AggregateCountry[P]>
  }




  export type CountryGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CountryWhereInput
    orderBy?: CountryOrderByWithAggregationInput | CountryOrderByWithAggregationInput[]
    by: CountryScalarFieldEnum[] | CountryScalarFieldEnum
    having?: CountryScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CountryCountAggregateInputType | true
    _avg?: CountryAvgAggregateInputType
    _sum?: CountrySumAggregateInputType
    _min?: CountryMinAggregateInputType
    _max?: CountryMaxAggregateInputType
  }

  export type CountryGroupByOutputType = {
    id: number
    name: string
    iso3: string | null
    iso2: string | null
    numeric_code: string | null
    phonecode: string | null
    capital: string | null
    currency: string | null
    currency_name: string | null
    currency_symbol: string | null
    tld: string | null
    native_reserved: string | null
    population: number | null
    gdp: number | null
    region: string | null
    region_id: number | null
    subregion: string | null
    subregion_id: number | null
    nationality: string | null
    timezones: JsonValue | null
    translations: JsonValue | null
    latitude: Decimal | null
    longitude: Decimal | null
    emoji: string | null
    emojiU: string | null
    wikiDataId: string | null
    createdAt: Date
    updatedAt: Date
    _count: CountryCountAggregateOutputType | null
    _avg: CountryAvgAggregateOutputType | null
    _sum: CountrySumAggregateOutputType | null
    _min: CountryMinAggregateOutputType | null
    _max: CountryMaxAggregateOutputType | null
  }

  type GetCountryGroupByPayload<T extends CountryGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CountryGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CountryGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CountryGroupByOutputType[P]>
            : GetScalarType<T[P], CountryGroupByOutputType[P]>
        }
      >
    >


  export type CountrySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    iso3?: boolean
    iso2?: boolean
    numeric_code?: boolean
    phonecode?: boolean
    capital?: boolean
    currency?: boolean
    currency_name?: boolean
    currency_symbol?: boolean
    tld?: boolean
    native_reserved?: boolean
    population?: boolean
    gdp?: boolean
    region?: boolean
    region_id?: boolean
    subregion?: boolean
    subregion_id?: boolean
    nationality?: boolean
    timezones?: boolean
    translations?: boolean
    latitude?: boolean
    longitude?: boolean
    emoji?: boolean
    emojiU?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    regionRelation?: boolean | Country$regionRelationArgs<ExtArgs>
    subregionRelation?: boolean | Country$subregionRelationArgs<ExtArgs>
    states?: boolean | Country$statesArgs<ExtArgs>
    cities?: boolean | Country$citiesArgs<ExtArgs>
    _count?: boolean | CountryCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["country"]>



  export type CountrySelectScalar = {
    id?: boolean
    name?: boolean
    iso3?: boolean
    iso2?: boolean
    numeric_code?: boolean
    phonecode?: boolean
    capital?: boolean
    currency?: boolean
    currency_name?: boolean
    currency_symbol?: boolean
    tld?: boolean
    native_reserved?: boolean
    population?: boolean
    gdp?: boolean
    region?: boolean
    region_id?: boolean
    subregion?: boolean
    subregion_id?: boolean
    nationality?: boolean
    timezones?: boolean
    translations?: boolean
    latitude?: boolean
    longitude?: boolean
    emoji?: boolean
    emojiU?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type CountryOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "iso3" | "iso2" | "numeric_code" | "phonecode" | "capital" | "currency" | "currency_name" | "currency_symbol" | "tld" | "native_reserved" | "population" | "gdp" | "region" | "region_id" | "subregion" | "subregion_id" | "nationality" | "timezones" | "translations" | "latitude" | "longitude" | "emoji" | "emojiU" | "wikiDataId" | "createdAt" | "updatedAt", ExtArgs["result"]["country"]>
  export type CountryInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    regionRelation?: boolean | Country$regionRelationArgs<ExtArgs>
    subregionRelation?: boolean | Country$subregionRelationArgs<ExtArgs>
    states?: boolean | Country$statesArgs<ExtArgs>
    cities?: boolean | Country$citiesArgs<ExtArgs>
    _count?: boolean | CountryCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $CountryPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "Country"
    objects: {
      regionRelation: Prisma.$RegionPayload<ExtArgs> | null
      subregionRelation: Prisma.$SubregionPayload<ExtArgs> | null
      states: Prisma.$StatePayload<ExtArgs>[]
      cities: Prisma.$CityPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      iso3: string | null
      iso2: string | null
      numeric_code: string | null
      phonecode: string | null
      capital: string | null
      currency: string | null
      currency_name: string | null
      currency_symbol: string | null
      tld: string | null
      native_reserved: string | null
      population: number | null
      gdp: number | null
      region: string | null
      region_id: number | null
      subregion: string | null
      subregion_id: number | null
      nationality: string | null
      timezones: Prisma.JsonValue | null
      translations: Prisma.JsonValue | null
      latitude: Prisma.Decimal | null
      longitude: Prisma.Decimal | null
      emoji: string | null
      emojiU: string | null
      wikiDataId: string | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["country"]>
    composites: {}
  }

  type CountryGetPayload<S extends boolean | null | undefined | CountryDefaultArgs> = $Result.GetResult<Prisma.$CountryPayload, S>

  type CountryCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CountryFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CountryCountAggregateInputType | true
    }

  export interface CountryDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['Country'], meta: { name: 'Country' } }
    /**
     * Find zero or one Country that matches the filter.
     * @param {CountryFindUniqueArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CountryFindUniqueArgs>(args: SelectSubset<T, CountryFindUniqueArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one Country that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CountryFindUniqueOrThrowArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CountryFindUniqueOrThrowArgs>(args: SelectSubset<T, CountryFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Country that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindFirstArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CountryFindFirstArgs>(args?: SelectSubset<T, CountryFindFirstArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first Country that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindFirstOrThrowArgs} args - Arguments to find a Country
     * @example
     * // Get one Country
     * const country = await prisma.country.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CountryFindFirstOrThrowArgs>(args?: SelectSubset<T, CountryFindFirstOrThrowArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Countries that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Countries
     * const countries = await prisma.country.findMany()
     * 
     * // Get first 10 Countries
     * const countries = await prisma.country.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const countryWithIdOnly = await prisma.country.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CountryFindManyArgs>(args?: SelectSubset<T, CountryFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a Country.
     * @param {CountryCreateArgs} args - Arguments to create a Country.
     * @example
     * // Create one Country
     * const Country = await prisma.country.create({
     *   data: {
     *     // ... data to create a Country
     *   }
     * })
     * 
     */
    create<T extends CountryCreateArgs>(args: SelectSubset<T, CountryCreateArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Countries.
     * @param {CountryCreateManyArgs} args - Arguments to create many Countries.
     * @example
     * // Create many Countries
     * const country = await prisma.country.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CountryCreateManyArgs>(args?: SelectSubset<T, CountryCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a Country.
     * @param {CountryDeleteArgs} args - Arguments to delete one Country.
     * @example
     * // Delete one Country
     * const Country = await prisma.country.delete({
     *   where: {
     *     // ... filter to delete one Country
     *   }
     * })
     * 
     */
    delete<T extends CountryDeleteArgs>(args: SelectSubset<T, CountryDeleteArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one Country.
     * @param {CountryUpdateArgs} args - Arguments to update one Country.
     * @example
     * // Update one Country
     * const country = await prisma.country.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CountryUpdateArgs>(args: SelectSubset<T, CountryUpdateArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Countries.
     * @param {CountryDeleteManyArgs} args - Arguments to filter Countries to delete.
     * @example
     * // Delete a few Countries
     * const { count } = await prisma.country.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CountryDeleteManyArgs>(args?: SelectSubset<T, CountryDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Countries.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Countries
     * const country = await prisma.country.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CountryUpdateManyArgs>(args: SelectSubset<T, CountryUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one Country.
     * @param {CountryUpsertArgs} args - Arguments to update or create a Country.
     * @example
     * // Update or create a Country
     * const country = await prisma.country.upsert({
     *   create: {
     *     // ... data to create a Country
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the Country we want to update
     *   }
     * })
     */
    upsert<T extends CountryUpsertArgs>(args: SelectSubset<T, CountryUpsertArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Countries.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryCountArgs} args - Arguments to filter Countries to count.
     * @example
     * // Count the number of Countries
     * const count = await prisma.country.count({
     *   where: {
     *     // ... the filter for the Countries we want to count
     *   }
     * })
    **/
    count<T extends CountryCountArgs>(
      args?: Subset<T, CountryCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CountryCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a Country.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CountryAggregateArgs>(args: Subset<T, CountryAggregateArgs>): Prisma.PrismaPromise<GetCountryAggregateType<T>>

    /**
     * Group by Country.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CountryGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CountryGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CountryGroupByArgs['orderBy'] }
        : { orderBy?: CountryGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CountryGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCountryGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the Country model
   */
  readonly fields: CountryFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for Country.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CountryClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    regionRelation<T extends Country$regionRelationArgs<ExtArgs> = {}>(args?: Subset<T, Country$regionRelationArgs<ExtArgs>>): Prisma__RegionClient<$Result.GetResult<Prisma.$RegionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    subregionRelation<T extends Country$subregionRelationArgs<ExtArgs> = {}>(args?: Subset<T, Country$subregionRelationArgs<ExtArgs>>): Prisma__SubregionClient<$Result.GetResult<Prisma.$SubregionPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>
    states<T extends Country$statesArgs<ExtArgs> = {}>(args?: Subset<T, Country$statesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    cities<T extends Country$citiesArgs<ExtArgs> = {}>(args?: Subset<T, Country$citiesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the Country model
   */
  interface CountryFieldRefs {
    readonly id: FieldRef<"Country", 'Int'>
    readonly name: FieldRef<"Country", 'String'>
    readonly iso3: FieldRef<"Country", 'String'>
    readonly iso2: FieldRef<"Country", 'String'>
    readonly numeric_code: FieldRef<"Country", 'String'>
    readonly phonecode: FieldRef<"Country", 'String'>
    readonly capital: FieldRef<"Country", 'String'>
    readonly currency: FieldRef<"Country", 'String'>
    readonly currency_name: FieldRef<"Country", 'String'>
    readonly currency_symbol: FieldRef<"Country", 'String'>
    readonly tld: FieldRef<"Country", 'String'>
    readonly native_reserved: FieldRef<"Country", 'String'>
    readonly population: FieldRef<"Country", 'Int'>
    readonly gdp: FieldRef<"Country", 'Int'>
    readonly region: FieldRef<"Country", 'String'>
    readonly region_id: FieldRef<"Country", 'Int'>
    readonly subregion: FieldRef<"Country", 'String'>
    readonly subregion_id: FieldRef<"Country", 'Int'>
    readonly nationality: FieldRef<"Country", 'String'>
    readonly timezones: FieldRef<"Country", 'Json'>
    readonly translations: FieldRef<"Country", 'Json'>
    readonly latitude: FieldRef<"Country", 'Decimal'>
    readonly longitude: FieldRef<"Country", 'Decimal'>
    readonly emoji: FieldRef<"Country", 'String'>
    readonly emojiU: FieldRef<"Country", 'String'>
    readonly wikiDataId: FieldRef<"Country", 'String'>
    readonly createdAt: FieldRef<"Country", 'DateTime'>
    readonly updatedAt: FieldRef<"Country", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * Country findUnique
   */
  export type CountryFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country findUniqueOrThrow
   */
  export type CountryFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country findFirst
   */
  export type CountryFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Countries.
     */
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country findFirstOrThrow
   */
  export type CountryFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Country to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Countries.
     */
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country findMany
   */
  export type CountryFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter, which Countries to fetch.
     */
    where?: CountryWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Countries to fetch.
     */
    orderBy?: CountryOrderByWithRelationInput | CountryOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Countries.
     */
    cursor?: CountryWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Countries from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Countries.
     */
    skip?: number
    distinct?: CountryScalarFieldEnum | CountryScalarFieldEnum[]
  }

  /**
   * Country create
   */
  export type CountryCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The data needed to create a Country.
     */
    data: XOR<CountryCreateInput, CountryUncheckedCreateInput>
  }

  /**
   * Country createMany
   */
  export type CountryCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Countries.
     */
    data: CountryCreateManyInput | CountryCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * Country update
   */
  export type CountryUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The data needed to update a Country.
     */
    data: XOR<CountryUpdateInput, CountryUncheckedUpdateInput>
    /**
     * Choose, which Country to update.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country updateMany
   */
  export type CountryUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Countries.
     */
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyInput>
    /**
     * Filter which Countries to update
     */
    where?: CountryWhereInput
    /**
     * Limit how many Countries to update.
     */
    limit?: number
  }

  /**
   * Country upsert
   */
  export type CountryUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * The filter to search for the Country to update in case it exists.
     */
    where: CountryWhereUniqueInput
    /**
     * In case the Country found by the `where` argument doesn't exist, create a new Country with this data.
     */
    create: XOR<CountryCreateInput, CountryUncheckedCreateInput>
    /**
     * In case the Country was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CountryUpdateInput, CountryUncheckedUpdateInput>
  }

  /**
   * Country delete
   */
  export type CountryDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
    /**
     * Filter which Country to delete.
     */
    where: CountryWhereUniqueInput
  }

  /**
   * Country deleteMany
   */
  export type CountryDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Countries to delete
     */
    where?: CountryWhereInput
    /**
     * Limit how many Countries to delete.
     */
    limit?: number
  }

  /**
   * Country.regionRelation
   */
  export type Country$regionRelationArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Region
     */
    select?: RegionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Region
     */
    omit?: RegionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: RegionInclude<ExtArgs> | null
    where?: RegionWhereInput
  }

  /**
   * Country.subregionRelation
   */
  export type Country$subregionRelationArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Subregion
     */
    select?: SubregionSelect<ExtArgs> | null
    /**
     * Omit specific fields from the Subregion
     */
    omit?: SubregionOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: SubregionInclude<ExtArgs> | null
    where?: SubregionWhereInput
  }

  /**
   * Country.states
   */
  export type Country$statesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    where?: StateWhereInput
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    cursor?: StateWhereUniqueInput
    take?: number
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * Country.cities
   */
  export type Country$citiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    where?: CityWhereInput
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    cursor?: CityWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * Country without action
   */
  export type CountryDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the Country
     */
    select?: CountrySelect<ExtArgs> | null
    /**
     * Omit specific fields from the Country
     */
    omit?: CountryOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CountryInclude<ExtArgs> | null
  }


  /**
   * Model State
   */

  export type AggregateState = {
    _count: StateCountAggregateOutputType | null
    _avg: StateAvgAggregateOutputType | null
    _sum: StateSumAggregateOutputType | null
    _min: StateMinAggregateOutputType | null
    _max: StateMaxAggregateOutputType | null
  }

  export type StateAvgAggregateOutputType = {
    id: number | null
    country_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type StateSumAggregateOutputType = {
    id: number | null
    country_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type StateMinAggregateOutputType = {
    id: number | null
    name: string | null
    country_id: number | null
    country_code: string | null
    country_name: string | null
    iso2: string | null
    iso3166_2: string | null
    fips_code: string | null
    type: string | null
    level: string | null
    parent_id: string | null
    native_reserved: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    timezone: string | null
    wikiDataId: string | null
    state_code: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type StateMaxAggregateOutputType = {
    id: number | null
    name: string | null
    country_id: number | null
    country_code: string | null
    country_name: string | null
    iso2: string | null
    iso3166_2: string | null
    fips_code: string | null
    type: string | null
    level: string | null
    parent_id: string | null
    native_reserved: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    timezone: string | null
    wikiDataId: string | null
    state_code: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type StateCountAggregateOutputType = {
    id: number
    name: number
    country_id: number
    country_code: number
    country_name: number
    iso2: number
    iso3166_2: number
    fips_code: number
    type: number
    level: number
    parent_id: number
    native_reserved: number
    latitude: number
    longitude: number
    timezone: number
    wikiDataId: number
    state_code: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type StateAvgAggregateInputType = {
    id?: true
    country_id?: true
    latitude?: true
    longitude?: true
  }

  export type StateSumAggregateInputType = {
    id?: true
    country_id?: true
    latitude?: true
    longitude?: true
  }

  export type StateMinAggregateInputType = {
    id?: true
    name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    iso2?: true
    iso3166_2?: true
    fips_code?: true
    type?: true
    level?: true
    parent_id?: true
    native_reserved?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    state_code?: true
    createdAt?: true
    updatedAt?: true
  }

  export type StateMaxAggregateInputType = {
    id?: true
    name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    iso2?: true
    iso3166_2?: true
    fips_code?: true
    type?: true
    level?: true
    parent_id?: true
    native_reserved?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    state_code?: true
    createdAt?: true
    updatedAt?: true
  }

  export type StateCountAggregateInputType = {
    id?: true
    name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    iso2?: true
    iso3166_2?: true
    fips_code?: true
    type?: true
    level?: true
    parent_id?: true
    native_reserved?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    state_code?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type StateAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which State to aggregate.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned States
    **/
    _count?: true | StateCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: StateAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: StateSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: StateMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: StateMaxAggregateInputType
  }

  export type GetStateAggregateType<T extends StateAggregateArgs> = {
        [P in keyof T & keyof AggregateState]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateState[P]>
      : GetScalarType<T[P], AggregateState[P]>
  }




  export type StateGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: StateWhereInput
    orderBy?: StateOrderByWithAggregationInput | StateOrderByWithAggregationInput[]
    by: StateScalarFieldEnum[] | StateScalarFieldEnum
    having?: StateScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: StateCountAggregateInputType | true
    _avg?: StateAvgAggregateInputType
    _sum?: StateSumAggregateInputType
    _min?: StateMinAggregateInputType
    _max?: StateMaxAggregateInputType
  }

  export type StateGroupByOutputType = {
    id: number
    name: string
    country_id: number
    country_code: string
    country_name: string | null
    iso2: string | null
    iso3166_2: string | null
    fips_code: string | null
    type: string | null
    level: string | null
    parent_id: string | null
    native_reserved: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    timezone: string | null
    wikiDataId: string | null
    state_code: string | null
    createdAt: Date
    updatedAt: Date
    _count: StateCountAggregateOutputType | null
    _avg: StateAvgAggregateOutputType | null
    _sum: StateSumAggregateOutputType | null
    _min: StateMinAggregateOutputType | null
    _max: StateMaxAggregateOutputType | null
  }

  type GetStateGroupByPayload<T extends StateGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<StateGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof StateGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], StateGroupByOutputType[P]>
            : GetScalarType<T[P], StateGroupByOutputType[P]>
        }
      >
    >


  export type StateSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    country_id?: boolean
    country_code?: boolean
    country_name?: boolean
    iso2?: boolean
    iso3166_2?: boolean
    fips_code?: boolean
    type?: boolean
    level?: boolean
    parent_id?: boolean
    native_reserved?: boolean
    latitude?: boolean
    longitude?: boolean
    timezone?: boolean
    wikiDataId?: boolean
    state_code?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    country?: boolean | CountryDefaultArgs<ExtArgs>
    cities?: boolean | State$citiesArgs<ExtArgs>
    _count?: boolean | StateCountOutputTypeDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["state"]>



  export type StateSelectScalar = {
    id?: boolean
    name?: boolean
    country_id?: boolean
    country_code?: boolean
    country_name?: boolean
    iso2?: boolean
    iso3166_2?: boolean
    fips_code?: boolean
    type?: boolean
    level?: boolean
    parent_id?: boolean
    native_reserved?: boolean
    latitude?: boolean
    longitude?: boolean
    timezone?: boolean
    wikiDataId?: boolean
    state_code?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type StateOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "country_id" | "country_code" | "country_name" | "iso2" | "iso3166_2" | "fips_code" | "type" | "level" | "parent_id" | "native_reserved" | "latitude" | "longitude" | "timezone" | "wikiDataId" | "state_code" | "createdAt" | "updatedAt", ExtArgs["result"]["state"]>
  export type StateInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    country?: boolean | CountryDefaultArgs<ExtArgs>
    cities?: boolean | State$citiesArgs<ExtArgs>
    _count?: boolean | StateCountOutputTypeDefaultArgs<ExtArgs>
  }

  export type $StatePayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "State"
    objects: {
      country: Prisma.$CountryPayload<ExtArgs>
      cities: Prisma.$CityPayload<ExtArgs>[]
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      country_id: number
      country_code: string
      country_name: string | null
      iso2: string | null
      iso3166_2: string | null
      fips_code: string | null
      type: string | null
      level: string | null
      parent_id: string | null
      native_reserved: string | null
      latitude: Prisma.Decimal | null
      longitude: Prisma.Decimal | null
      timezone: string | null
      wikiDataId: string | null
      state_code: string | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["state"]>
    composites: {}
  }

  type StateGetPayload<S extends boolean | null | undefined | StateDefaultArgs> = $Result.GetResult<Prisma.$StatePayload, S>

  type StateCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<StateFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: StateCountAggregateInputType | true
    }

  export interface StateDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['State'], meta: { name: 'State' } }
    /**
     * Find zero or one State that matches the filter.
     * @param {StateFindUniqueArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends StateFindUniqueArgs>(args: SelectSubset<T, StateFindUniqueArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one State that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {StateFindUniqueOrThrowArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends StateFindUniqueOrThrowArgs>(args: SelectSubset<T, StateFindUniqueOrThrowArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first State that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindFirstArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends StateFindFirstArgs>(args?: SelectSubset<T, StateFindFirstArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first State that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindFirstOrThrowArgs} args - Arguments to find a State
     * @example
     * // Get one State
     * const state = await prisma.state.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends StateFindFirstOrThrowArgs>(args?: SelectSubset<T, StateFindFirstOrThrowArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more States that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all States
     * const states = await prisma.state.findMany()
     * 
     * // Get first 10 States
     * const states = await prisma.state.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const stateWithIdOnly = await prisma.state.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends StateFindManyArgs>(args?: SelectSubset<T, StateFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a State.
     * @param {StateCreateArgs} args - Arguments to create a State.
     * @example
     * // Create one State
     * const State = await prisma.state.create({
     *   data: {
     *     // ... data to create a State
     *   }
     * })
     * 
     */
    create<T extends StateCreateArgs>(args: SelectSubset<T, StateCreateArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many States.
     * @param {StateCreateManyArgs} args - Arguments to create many States.
     * @example
     * // Create many States
     * const state = await prisma.state.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends StateCreateManyArgs>(args?: SelectSubset<T, StateCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a State.
     * @param {StateDeleteArgs} args - Arguments to delete one State.
     * @example
     * // Delete one State
     * const State = await prisma.state.delete({
     *   where: {
     *     // ... filter to delete one State
     *   }
     * })
     * 
     */
    delete<T extends StateDeleteArgs>(args: SelectSubset<T, StateDeleteArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one State.
     * @param {StateUpdateArgs} args - Arguments to update one State.
     * @example
     * // Update one State
     * const state = await prisma.state.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends StateUpdateArgs>(args: SelectSubset<T, StateUpdateArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more States.
     * @param {StateDeleteManyArgs} args - Arguments to filter States to delete.
     * @example
     * // Delete a few States
     * const { count } = await prisma.state.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends StateDeleteManyArgs>(args?: SelectSubset<T, StateDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more States.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many States
     * const state = await prisma.state.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends StateUpdateManyArgs>(args: SelectSubset<T, StateUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one State.
     * @param {StateUpsertArgs} args - Arguments to update or create a State.
     * @example
     * // Update or create a State
     * const state = await prisma.state.upsert({
     *   create: {
     *     // ... data to create a State
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the State we want to update
     *   }
     * })
     */
    upsert<T extends StateUpsertArgs>(args: SelectSubset<T, StateUpsertArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of States.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateCountArgs} args - Arguments to filter States to count.
     * @example
     * // Count the number of States
     * const count = await prisma.state.count({
     *   where: {
     *     // ... the filter for the States we want to count
     *   }
     * })
    **/
    count<T extends StateCountArgs>(
      args?: Subset<T, StateCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], StateCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a State.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends StateAggregateArgs>(args: Subset<T, StateAggregateArgs>): Prisma.PrismaPromise<GetStateAggregateType<T>>

    /**
     * Group by State.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {StateGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends StateGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: StateGroupByArgs['orderBy'] }
        : { orderBy?: StateGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, StateGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetStateGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the State model
   */
  readonly fields: StateFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for State.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__StateClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    cities<T extends State$citiesArgs<ExtArgs> = {}>(args?: Subset<T, State$citiesArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions> | Null>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the State model
   */
  interface StateFieldRefs {
    readonly id: FieldRef<"State", 'Int'>
    readonly name: FieldRef<"State", 'String'>
    readonly country_id: FieldRef<"State", 'Int'>
    readonly country_code: FieldRef<"State", 'String'>
    readonly country_name: FieldRef<"State", 'String'>
    readonly iso2: FieldRef<"State", 'String'>
    readonly iso3166_2: FieldRef<"State", 'String'>
    readonly fips_code: FieldRef<"State", 'String'>
    readonly type: FieldRef<"State", 'String'>
    readonly level: FieldRef<"State", 'String'>
    readonly parent_id: FieldRef<"State", 'String'>
    readonly native_reserved: FieldRef<"State", 'String'>
    readonly latitude: FieldRef<"State", 'Decimal'>
    readonly longitude: FieldRef<"State", 'Decimal'>
    readonly timezone: FieldRef<"State", 'String'>
    readonly wikiDataId: FieldRef<"State", 'String'>
    readonly state_code: FieldRef<"State", 'String'>
    readonly createdAt: FieldRef<"State", 'DateTime'>
    readonly updatedAt: FieldRef<"State", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * State findUnique
   */
  export type StateFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State findUniqueOrThrow
   */
  export type StateFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State findFirst
   */
  export type StateFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of States.
     */
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State findFirstOrThrow
   */
  export type StateFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which State to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of States.
     */
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State findMany
   */
  export type StateFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter, which States to fetch.
     */
    where?: StateWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of States to fetch.
     */
    orderBy?: StateOrderByWithRelationInput | StateOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing States.
     */
    cursor?: StateWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` States from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` States.
     */
    skip?: number
    distinct?: StateScalarFieldEnum | StateScalarFieldEnum[]
  }

  /**
   * State create
   */
  export type StateCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The data needed to create a State.
     */
    data: XOR<StateCreateInput, StateUncheckedCreateInput>
  }

  /**
   * State createMany
   */
  export type StateCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many States.
     */
    data: StateCreateManyInput | StateCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * State update
   */
  export type StateUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The data needed to update a State.
     */
    data: XOR<StateUpdateInput, StateUncheckedUpdateInput>
    /**
     * Choose, which State to update.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State updateMany
   */
  export type StateUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update States.
     */
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyInput>
    /**
     * Filter which States to update
     */
    where?: StateWhereInput
    /**
     * Limit how many States to update.
     */
    limit?: number
  }

  /**
   * State upsert
   */
  export type StateUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * The filter to search for the State to update in case it exists.
     */
    where: StateWhereUniqueInput
    /**
     * In case the State found by the `where` argument doesn't exist, create a new State with this data.
     */
    create: XOR<StateCreateInput, StateUncheckedCreateInput>
    /**
     * In case the State was found with the provided `where` argument, update it with this data.
     */
    update: XOR<StateUpdateInput, StateUncheckedUpdateInput>
  }

  /**
   * State delete
   */
  export type StateDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
    /**
     * Filter which State to delete.
     */
    where: StateWhereUniqueInput
  }

  /**
   * State deleteMany
   */
  export type StateDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which States to delete
     */
    where?: StateWhereInput
    /**
     * Limit how many States to delete.
     */
    limit?: number
  }

  /**
   * State.cities
   */
  export type State$citiesArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    where?: CityWhereInput
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    cursor?: CityWhereUniqueInput
    take?: number
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * State without action
   */
  export type StateDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the State
     */
    select?: StateSelect<ExtArgs> | null
    /**
     * Omit specific fields from the State
     */
    omit?: StateOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: StateInclude<ExtArgs> | null
  }


  /**
   * Model City
   */

  export type AggregateCity = {
    _count: CityCountAggregateOutputType | null
    _avg: CityAvgAggregateOutputType | null
    _sum: CitySumAggregateOutputType | null
    _min: CityMinAggregateOutputType | null
    _max: CityMaxAggregateOutputType | null
  }

  export type CityAvgAggregateOutputType = {
    id: number | null
    state_id: number | null
    country_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type CitySumAggregateOutputType = {
    id: number | null
    state_id: number | null
    country_id: number | null
    latitude: Decimal | null
    longitude: Decimal | null
  }

  export type CityMinAggregateOutputType = {
    id: number | null
    name: string | null
    state_id: number | null
    state_code: string | null
    state_name: string | null
    country_id: number | null
    country_code: string | null
    country_name: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    timezone: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type CityMaxAggregateOutputType = {
    id: number | null
    name: string | null
    state_id: number | null
    state_code: string | null
    state_name: string | null
    country_id: number | null
    country_code: string | null
    country_name: string | null
    latitude: Decimal | null
    longitude: Decimal | null
    timezone: string | null
    wikiDataId: string | null
    createdAt: Date | null
    updatedAt: Date | null
  }

  export type CityCountAggregateOutputType = {
    id: number
    name: number
    state_id: number
    state_code: number
    state_name: number
    country_id: number
    country_code: number
    country_name: number
    latitude: number
    longitude: number
    timezone: number
    wikiDataId: number
    createdAt: number
    updatedAt: number
    _all: number
  }


  export type CityAvgAggregateInputType = {
    id?: true
    state_id?: true
    country_id?: true
    latitude?: true
    longitude?: true
  }

  export type CitySumAggregateInputType = {
    id?: true
    state_id?: true
    country_id?: true
    latitude?: true
    longitude?: true
  }

  export type CityMinAggregateInputType = {
    id?: true
    name?: true
    state_id?: true
    state_code?: true
    state_name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type CityMaxAggregateInputType = {
    id?: true
    name?: true
    state_id?: true
    state_code?: true
    state_name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
  }

  export type CityCountAggregateInputType = {
    id?: true
    name?: true
    state_id?: true
    state_code?: true
    state_name?: true
    country_id?: true
    country_code?: true
    country_name?: true
    latitude?: true
    longitude?: true
    timezone?: true
    wikiDataId?: true
    createdAt?: true
    updatedAt?: true
    _all?: true
  }

  export type CityAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which City to aggregate.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned Cities
    **/
    _count?: true | CityCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: CityAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: CitySumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: CityMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: CityMaxAggregateInputType
  }

  export type GetCityAggregateType<T extends CityAggregateArgs> = {
        [P in keyof T & keyof AggregateCity]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateCity[P]>
      : GetScalarType<T[P], AggregateCity[P]>
  }




  export type CityGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: CityWhereInput
    orderBy?: CityOrderByWithAggregationInput | CityOrderByWithAggregationInput[]
    by: CityScalarFieldEnum[] | CityScalarFieldEnum
    having?: CityScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: CityCountAggregateInputType | true
    _avg?: CityAvgAggregateInputType
    _sum?: CitySumAggregateInputType
    _min?: CityMinAggregateInputType
    _max?: CityMaxAggregateInputType
  }

  export type CityGroupByOutputType = {
    id: number
    name: string
    state_id: number
    state_code: string
    state_name: string | null
    country_id: number
    country_code: string
    country_name: string
    latitude: Decimal
    longitude: Decimal
    timezone: string | null
    wikiDataId: string | null
    createdAt: Date
    updatedAt: Date
    _count: CityCountAggregateOutputType | null
    _avg: CityAvgAggregateOutputType | null
    _sum: CitySumAggregateOutputType | null
    _min: CityMinAggregateOutputType | null
    _max: CityMaxAggregateOutputType | null
  }

  type GetCityGroupByPayload<T extends CityGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<CityGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof CityGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], CityGroupByOutputType[P]>
            : GetScalarType<T[P], CityGroupByOutputType[P]>
        }
      >
    >


  export type CitySelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    name?: boolean
    state_id?: boolean
    state_code?: boolean
    state_name?: boolean
    country_id?: boolean
    country_code?: boolean
    country_name?: boolean
    latitude?: boolean
    longitude?: boolean
    timezone?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
    state?: boolean | StateDefaultArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }, ExtArgs["result"]["city"]>



  export type CitySelectScalar = {
    id?: boolean
    name?: boolean
    state_id?: boolean
    state_code?: boolean
    state_name?: boolean
    country_id?: boolean
    country_code?: boolean
    country_name?: boolean
    latitude?: boolean
    longitude?: boolean
    timezone?: boolean
    wikiDataId?: boolean
    createdAt?: boolean
    updatedAt?: boolean
  }

  export type CityOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "name" | "state_id" | "state_code" | "state_name" | "country_id" | "country_code" | "country_name" | "latitude" | "longitude" | "timezone" | "wikiDataId" | "createdAt" | "updatedAt", ExtArgs["result"]["city"]>
  export type CityInclude<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    state?: boolean | StateDefaultArgs<ExtArgs>
    country?: boolean | CountryDefaultArgs<ExtArgs>
  }

  export type $CityPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "City"
    objects: {
      state: Prisma.$StatePayload<ExtArgs>
      country: Prisma.$CountryPayload<ExtArgs>
    }
    scalars: $Extensions.GetPayloadResult<{
      id: number
      name: string
      state_id: number
      state_code: string
      state_name: string | null
      country_id: number
      country_code: string
      country_name: string
      latitude: Prisma.Decimal
      longitude: Prisma.Decimal
      timezone: string | null
      wikiDataId: string | null
      createdAt: Date
      updatedAt: Date
    }, ExtArgs["result"]["city"]>
    composites: {}
  }

  type CityGetPayload<S extends boolean | null | undefined | CityDefaultArgs> = $Result.GetResult<Prisma.$CityPayload, S>

  type CityCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<CityFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: CityCountAggregateInputType | true
    }

  export interface CityDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['City'], meta: { name: 'City' } }
    /**
     * Find zero or one City that matches the filter.
     * @param {CityFindUniqueArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends CityFindUniqueArgs>(args: SelectSubset<T, CityFindUniqueArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one City that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {CityFindUniqueOrThrowArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends CityFindUniqueOrThrowArgs>(args: SelectSubset<T, CityFindUniqueOrThrowArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first City that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindFirstArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends CityFindFirstArgs>(args?: SelectSubset<T, CityFindFirstArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first City that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindFirstOrThrowArgs} args - Arguments to find a City
     * @example
     * // Get one City
     * const city = await prisma.city.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends CityFindFirstOrThrowArgs>(args?: SelectSubset<T, CityFindFirstOrThrowArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more Cities that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all Cities
     * const cities = await prisma.city.findMany()
     * 
     * // Get first 10 Cities
     * const cities = await prisma.city.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const cityWithIdOnly = await prisma.city.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends CityFindManyArgs>(args?: SelectSubset<T, CityFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a City.
     * @param {CityCreateArgs} args - Arguments to create a City.
     * @example
     * // Create one City
     * const City = await prisma.city.create({
     *   data: {
     *     // ... data to create a City
     *   }
     * })
     * 
     */
    create<T extends CityCreateArgs>(args: SelectSubset<T, CityCreateArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many Cities.
     * @param {CityCreateManyArgs} args - Arguments to create many Cities.
     * @example
     * // Create many Cities
     * const city = await prisma.city.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends CityCreateManyArgs>(args?: SelectSubset<T, CityCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a City.
     * @param {CityDeleteArgs} args - Arguments to delete one City.
     * @example
     * // Delete one City
     * const City = await prisma.city.delete({
     *   where: {
     *     // ... filter to delete one City
     *   }
     * })
     * 
     */
    delete<T extends CityDeleteArgs>(args: SelectSubset<T, CityDeleteArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one City.
     * @param {CityUpdateArgs} args - Arguments to update one City.
     * @example
     * // Update one City
     * const city = await prisma.city.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends CityUpdateArgs>(args: SelectSubset<T, CityUpdateArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more Cities.
     * @param {CityDeleteManyArgs} args - Arguments to filter Cities to delete.
     * @example
     * // Delete a few Cities
     * const { count } = await prisma.city.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends CityDeleteManyArgs>(args?: SelectSubset<T, CityDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more Cities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many Cities
     * const city = await prisma.city.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends CityUpdateManyArgs>(args: SelectSubset<T, CityUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one City.
     * @param {CityUpsertArgs} args - Arguments to update or create a City.
     * @example
     * // Update or create a City
     * const city = await prisma.city.upsert({
     *   create: {
     *     // ... data to create a City
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the City we want to update
     *   }
     * })
     */
    upsert<T extends CityUpsertArgs>(args: SelectSubset<T, CityUpsertArgs<ExtArgs>>): Prisma__CityClient<$Result.GetResult<Prisma.$CityPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of Cities.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityCountArgs} args - Arguments to filter Cities to count.
     * @example
     * // Count the number of Cities
     * const count = await prisma.city.count({
     *   where: {
     *     // ... the filter for the Cities we want to count
     *   }
     * })
    **/
    count<T extends CityCountArgs>(
      args?: Subset<T, CityCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], CityCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a City.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends CityAggregateArgs>(args: Subset<T, CityAggregateArgs>): Prisma.PrismaPromise<GetCityAggregateType<T>>

    /**
     * Group by City.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {CityGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends CityGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: CityGroupByArgs['orderBy'] }
        : { orderBy?: CityGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, CityGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetCityGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the City model
   */
  readonly fields: CityFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for City.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__CityClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    state<T extends StateDefaultArgs<ExtArgs> = {}>(args?: Subset<T, StateDefaultArgs<ExtArgs>>): Prisma__StateClient<$Result.GetResult<Prisma.$StatePayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    country<T extends CountryDefaultArgs<ExtArgs> = {}>(args?: Subset<T, CountryDefaultArgs<ExtArgs>>): Prisma__CountryClient<$Result.GetResult<Prisma.$CountryPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions>
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the City model
   */
  interface CityFieldRefs {
    readonly id: FieldRef<"City", 'Int'>
    readonly name: FieldRef<"City", 'String'>
    readonly state_id: FieldRef<"City", 'Int'>
    readonly state_code: FieldRef<"City", 'String'>
    readonly state_name: FieldRef<"City", 'String'>
    readonly country_id: FieldRef<"City", 'Int'>
    readonly country_code: FieldRef<"City", 'String'>
    readonly country_name: FieldRef<"City", 'String'>
    readonly latitude: FieldRef<"City", 'Decimal'>
    readonly longitude: FieldRef<"City", 'Decimal'>
    readonly timezone: FieldRef<"City", 'String'>
    readonly wikiDataId: FieldRef<"City", 'String'>
    readonly createdAt: FieldRef<"City", 'DateTime'>
    readonly updatedAt: FieldRef<"City", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * City findUnique
   */
  export type CityFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City findUniqueOrThrow
   */
  export type CityFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City findFirst
   */
  export type CityFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Cities.
     */
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City findFirstOrThrow
   */
  export type CityFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which City to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of Cities.
     */
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City findMany
   */
  export type CityFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter, which Cities to fetch.
     */
    where?: CityWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of Cities to fetch.
     */
    orderBy?: CityOrderByWithRelationInput | CityOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing Cities.
     */
    cursor?: CityWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` Cities from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` Cities.
     */
    skip?: number
    distinct?: CityScalarFieldEnum | CityScalarFieldEnum[]
  }

  /**
   * City create
   */
  export type CityCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The data needed to create a City.
     */
    data: XOR<CityCreateInput, CityUncheckedCreateInput>
  }

  /**
   * City createMany
   */
  export type CityCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many Cities.
     */
    data: CityCreateManyInput | CityCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * City update
   */
  export type CityUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The data needed to update a City.
     */
    data: XOR<CityUpdateInput, CityUncheckedUpdateInput>
    /**
     * Choose, which City to update.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City updateMany
   */
  export type CityUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update Cities.
     */
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyInput>
    /**
     * Filter which Cities to update
     */
    where?: CityWhereInput
    /**
     * Limit how many Cities to update.
     */
    limit?: number
  }

  /**
   * City upsert
   */
  export type CityUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * The filter to search for the City to update in case it exists.
     */
    where: CityWhereUniqueInput
    /**
     * In case the City found by the `where` argument doesn't exist, create a new City with this data.
     */
    create: XOR<CityCreateInput, CityUncheckedCreateInput>
    /**
     * In case the City was found with the provided `where` argument, update it with this data.
     */
    update: XOR<CityUpdateInput, CityUncheckedUpdateInput>
  }

  /**
   * City delete
   */
  export type CityDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
    /**
     * Filter which City to delete.
     */
    where: CityWhereUniqueInput
  }

  /**
   * City deleteMany
   */
  export type CityDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which Cities to delete
     */
    where?: CityWhereInput
    /**
     * Limit how many Cities to delete.
     */
    limit?: number
  }

  /**
   * City without action
   */
  export type CityDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the City
     */
    select?: CitySelect<ExtArgs> | null
    /**
     * Omit specific fields from the City
     */
    omit?: CityOmit<ExtArgs> | null
    /**
     * Choose, which related nodes to fetch as well
     */
    include?: CityInclude<ExtArgs> | null
  }


  /**
   * Model TableLog
   */

  export type AggregateTableLog = {
    _count: TableLogCountAggregateOutputType | null
    _avg: TableLogAvgAggregateOutputType | null
    _sum: TableLogSumAggregateOutputType | null
    _min: TableLogMinAggregateOutputType | null
    _max: TableLogMaxAggregateOutputType | null
  }

  export type TableLogAvgAggregateOutputType = {
    id: number | null
    row_id: number | null
    created_by: number | null
  }

  export type TableLogSumAggregateOutputType = {
    id: number | null
    row_id: number | null
    created_by: number | null
  }

  export type TableLogMinAggregateOutputType = {
    id: number | null
    table_name: string | null
    row_id: number | null
    created_by: number | null
    created_at: Date | null
  }

  export type TableLogMaxAggregateOutputType = {
    id: number | null
    table_name: string | null
    row_id: number | null
    created_by: number | null
    created_at: Date | null
  }

  export type TableLogCountAggregateOutputType = {
    id: number
    table_name: number
    row_id: number
    previous_fields: number
    new_fields: number
    created_by: number
    created_at: number
    _all: number
  }


  export type TableLogAvgAggregateInputType = {
    id?: true
    row_id?: true
    created_by?: true
  }

  export type TableLogSumAggregateInputType = {
    id?: true
    row_id?: true
    created_by?: true
  }

  export type TableLogMinAggregateInputType = {
    id?: true
    table_name?: true
    row_id?: true
    created_by?: true
    created_at?: true
  }

  export type TableLogMaxAggregateInputType = {
    id?: true
    table_name?: true
    row_id?: true
    created_by?: true
    created_at?: true
  }

  export type TableLogCountAggregateInputType = {
    id?: true
    table_name?: true
    row_id?: true
    previous_fields?: true
    new_fields?: true
    created_by?: true
    created_at?: true
    _all?: true
  }

  export type TableLogAggregateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which TableLog to aggregate.
     */
    where?: TableLogWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of TableLogs to fetch.
     */
    orderBy?: TableLogOrderByWithRelationInput | TableLogOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the start position
     */
    cursor?: TableLogWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` TableLogs from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` TableLogs.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Count returned TableLogs
    **/
    _count?: true | TableLogCountAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to average
    **/
    _avg?: TableLogAvgAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to sum
    **/
    _sum?: TableLogSumAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the minimum value
    **/
    _min?: TableLogMinAggregateInputType
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs}
     * 
     * Select which fields to find the maximum value
    **/
    _max?: TableLogMaxAggregateInputType
  }

  export type GetTableLogAggregateType<T extends TableLogAggregateArgs> = {
        [P in keyof T & keyof AggregateTableLog]: P extends '_count' | 'count'
      ? T[P] extends true
        ? number
        : GetScalarType<T[P], AggregateTableLog[P]>
      : GetScalarType<T[P], AggregateTableLog[P]>
  }




  export type TableLogGroupByArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    where?: TableLogWhereInput
    orderBy?: TableLogOrderByWithAggregationInput | TableLogOrderByWithAggregationInput[]
    by: TableLogScalarFieldEnum[] | TableLogScalarFieldEnum
    having?: TableLogScalarWhereWithAggregatesInput
    take?: number
    skip?: number
    _count?: TableLogCountAggregateInputType | true
    _avg?: TableLogAvgAggregateInputType
    _sum?: TableLogSumAggregateInputType
    _min?: TableLogMinAggregateInputType
    _max?: TableLogMaxAggregateInputType
  }

  export type TableLogGroupByOutputType = {
    id: number
    table_name: string
    row_id: number
    previous_fields: JsonValue | null
    new_fields: JsonValue | null
    created_by: number | null
    created_at: Date
    _count: TableLogCountAggregateOutputType | null
    _avg: TableLogAvgAggregateOutputType | null
    _sum: TableLogSumAggregateOutputType | null
    _min: TableLogMinAggregateOutputType | null
    _max: TableLogMaxAggregateOutputType | null
  }

  type GetTableLogGroupByPayload<T extends TableLogGroupByArgs> = Prisma.PrismaPromise<
    Array<
      PickEnumerable<TableLogGroupByOutputType, T['by']> &
        {
          [P in ((keyof T) & (keyof TableLogGroupByOutputType))]: P extends '_count'
            ? T[P] extends boolean
              ? number
              : GetScalarType<T[P], TableLogGroupByOutputType[P]>
            : GetScalarType<T[P], TableLogGroupByOutputType[P]>
        }
      >
    >


  export type TableLogSelect<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetSelect<{
    id?: boolean
    table_name?: boolean
    row_id?: boolean
    previous_fields?: boolean
    new_fields?: boolean
    created_by?: boolean
    created_at?: boolean
  }, ExtArgs["result"]["tableLog"]>



  export type TableLogSelectScalar = {
    id?: boolean
    table_name?: boolean
    row_id?: boolean
    previous_fields?: boolean
    new_fields?: boolean
    created_by?: boolean
    created_at?: boolean
  }

  export type TableLogOmit<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = $Extensions.GetOmit<"id" | "table_name" | "row_id" | "previous_fields" | "new_fields" | "created_by" | "created_at", ExtArgs["result"]["tableLog"]>

  export type $TableLogPayload<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    name: "TableLog"
    objects: {}
    scalars: $Extensions.GetPayloadResult<{
      id: number
      table_name: string
      row_id: number
      previous_fields: Prisma.JsonValue | null
      new_fields: Prisma.JsonValue | null
      created_by: number | null
      created_at: Date
    }, ExtArgs["result"]["tableLog"]>
    composites: {}
  }

  type TableLogGetPayload<S extends boolean | null | undefined | TableLogDefaultArgs> = $Result.GetResult<Prisma.$TableLogPayload, S>

  type TableLogCountArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
    Omit<TableLogFindManyArgs, 'select' | 'include' | 'distinct' | 'omit'> & {
      select?: TableLogCountAggregateInputType | true
    }

  export interface TableLogDelegate<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> {
    [K: symbol]: { types: Prisma.TypeMap<ExtArgs>['model']['TableLog'], meta: { name: 'TableLog' } }
    /**
     * Find zero or one TableLog that matches the filter.
     * @param {TableLogFindUniqueArgs} args - Arguments to find a TableLog
     * @example
     * // Get one TableLog
     * const tableLog = await prisma.tableLog.findUnique({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUnique<T extends TableLogFindUniqueArgs>(args: SelectSubset<T, TableLogFindUniqueArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find one TableLog that matches the filter or throw an error with `error.code='P2025'`
     * if no matches were found.
     * @param {TableLogFindUniqueOrThrowArgs} args - Arguments to find a TableLog
     * @example
     * // Get one TableLog
     * const tableLog = await prisma.tableLog.findUniqueOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findUniqueOrThrow<T extends TableLogFindUniqueOrThrowArgs>(args: SelectSubset<T, TableLogFindUniqueOrThrowArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first TableLog that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogFindFirstArgs} args - Arguments to find a TableLog
     * @example
     * // Get one TableLog
     * const tableLog = await prisma.tableLog.findFirst({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirst<T extends TableLogFindFirstArgs>(args?: SelectSubset<T, TableLogFindFirstArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions>

    /**
     * Find the first TableLog that matches the filter or
     * throw `PrismaKnownClientError` with `P2025` code if no matches were found.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogFindFirstOrThrowArgs} args - Arguments to find a TableLog
     * @example
     * // Get one TableLog
     * const tableLog = await prisma.tableLog.findFirstOrThrow({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     */
    findFirstOrThrow<T extends TableLogFindFirstOrThrowArgs>(args?: SelectSubset<T, TableLogFindFirstOrThrowArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Find zero or more TableLogs that matches the filter.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogFindManyArgs} args - Arguments to filter and select certain fields only.
     * @example
     * // Get all TableLogs
     * const tableLogs = await prisma.tableLog.findMany()
     * 
     * // Get first 10 TableLogs
     * const tableLogs = await prisma.tableLog.findMany({ take: 10 })
     * 
     * // Only select the `id`
     * const tableLogWithIdOnly = await prisma.tableLog.findMany({ select: { id: true } })
     * 
     */
    findMany<T extends TableLogFindManyArgs>(args?: SelectSubset<T, TableLogFindManyArgs<ExtArgs>>): Prisma.PrismaPromise<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "findMany", GlobalOmitOptions>>

    /**
     * Create a TableLog.
     * @param {TableLogCreateArgs} args - Arguments to create a TableLog.
     * @example
     * // Create one TableLog
     * const TableLog = await prisma.tableLog.create({
     *   data: {
     *     // ... data to create a TableLog
     *   }
     * })
     * 
     */
    create<T extends TableLogCreateArgs>(args: SelectSubset<T, TableLogCreateArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Create many TableLogs.
     * @param {TableLogCreateManyArgs} args - Arguments to create many TableLogs.
     * @example
     * // Create many TableLogs
     * const tableLog = await prisma.tableLog.createMany({
     *   data: [
     *     // ... provide data here
     *   ]
     * })
     *     
     */
    createMany<T extends TableLogCreateManyArgs>(args?: SelectSubset<T, TableLogCreateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Delete a TableLog.
     * @param {TableLogDeleteArgs} args - Arguments to delete one TableLog.
     * @example
     * // Delete one TableLog
     * const TableLog = await prisma.tableLog.delete({
     *   where: {
     *     // ... filter to delete one TableLog
     *   }
     * })
     * 
     */
    delete<T extends TableLogDeleteArgs>(args: SelectSubset<T, TableLogDeleteArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Update one TableLog.
     * @param {TableLogUpdateArgs} args - Arguments to update one TableLog.
     * @example
     * // Update one TableLog
     * const tableLog = await prisma.tableLog.update({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    update<T extends TableLogUpdateArgs>(args: SelectSubset<T, TableLogUpdateArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>

    /**
     * Delete zero or more TableLogs.
     * @param {TableLogDeleteManyArgs} args - Arguments to filter TableLogs to delete.
     * @example
     * // Delete a few TableLogs
     * const { count } = await prisma.tableLog.deleteMany({
     *   where: {
     *     // ... provide filter here
     *   }
     * })
     * 
     */
    deleteMany<T extends TableLogDeleteManyArgs>(args?: SelectSubset<T, TableLogDeleteManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Update zero or more TableLogs.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogUpdateManyArgs} args - Arguments to update one or more rows.
     * @example
     * // Update many TableLogs
     * const tableLog = await prisma.tableLog.updateMany({
     *   where: {
     *     // ... provide filter here
     *   },
     *   data: {
     *     // ... provide data here
     *   }
     * })
     * 
     */
    updateMany<T extends TableLogUpdateManyArgs>(args: SelectSubset<T, TableLogUpdateManyArgs<ExtArgs>>): Prisma.PrismaPromise<BatchPayload>

    /**
     * Create or update one TableLog.
     * @param {TableLogUpsertArgs} args - Arguments to update or create a TableLog.
     * @example
     * // Update or create a TableLog
     * const tableLog = await prisma.tableLog.upsert({
     *   create: {
     *     // ... data to create a TableLog
     *   },
     *   update: {
     *     // ... in case it already exists, update
     *   },
     *   where: {
     *     // ... the filter for the TableLog we want to update
     *   }
     * })
     */
    upsert<T extends TableLogUpsertArgs>(args: SelectSubset<T, TableLogUpsertArgs<ExtArgs>>): Prisma__TableLogClient<$Result.GetResult<Prisma.$TableLogPayload<ExtArgs>, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions>


    /**
     * Count the number of TableLogs.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogCountArgs} args - Arguments to filter TableLogs to count.
     * @example
     * // Count the number of TableLogs
     * const count = await prisma.tableLog.count({
     *   where: {
     *     // ... the filter for the TableLogs we want to count
     *   }
     * })
    **/
    count<T extends TableLogCountArgs>(
      args?: Subset<T, TableLogCountArgs>,
    ): Prisma.PrismaPromise<
      T extends $Utils.Record<'select', any>
        ? T['select'] extends true
          ? number
          : GetScalarType<T['select'], TableLogCountAggregateOutputType>
        : number
    >

    /**
     * Allows you to perform aggregations operations on a TableLog.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogAggregateArgs} args - Select which aggregations you would like to apply and on what fields.
     * @example
     * // Ordered by age ascending
     * // Where email contains prisma.io
     * // Limited to the 10 users
     * const aggregations = await prisma.user.aggregate({
     *   _avg: {
     *     age: true,
     *   },
     *   where: {
     *     email: {
     *       contains: "prisma.io",
     *     },
     *   },
     *   orderBy: {
     *     age: "asc",
     *   },
     *   take: 10,
     * })
    **/
    aggregate<T extends TableLogAggregateArgs>(args: Subset<T, TableLogAggregateArgs>): Prisma.PrismaPromise<GetTableLogAggregateType<T>>

    /**
     * Group by TableLog.
     * Note, that providing `undefined` is treated as the value not being there.
     * Read more here: https://pris.ly/d/null-undefined
     * @param {TableLogGroupByArgs} args - Group by arguments.
     * @example
     * // Group by city, order by createdAt, get count
     * const result = await prisma.user.groupBy({
     *   by: ['city', 'createdAt'],
     *   orderBy: {
     *     createdAt: true
     *   },
     *   _count: {
     *     _all: true
     *   },
     * })
     * 
    **/
    groupBy<
      T extends TableLogGroupByArgs,
      HasSelectOrTake extends Or<
        Extends<'skip', Keys<T>>,
        Extends<'take', Keys<T>>
      >,
      OrderByArg extends True extends HasSelectOrTake
        ? { orderBy: TableLogGroupByArgs['orderBy'] }
        : { orderBy?: TableLogGroupByArgs['orderBy'] },
      OrderFields extends ExcludeUnderscoreKeys<Keys<MaybeTupleToUnion<T['orderBy']>>>,
      ByFields extends MaybeTupleToUnion<T['by']>,
      ByValid extends Has<ByFields, OrderFields>,
      HavingFields extends GetHavingFields<T['having']>,
      HavingValid extends Has<ByFields, HavingFields>,
      ByEmpty extends T['by'] extends never[] ? True : False,
      InputErrors extends ByEmpty extends True
      ? `Error: "by" must not be empty.`
      : HavingValid extends False
      ? {
          [P in HavingFields]: P extends ByFields
            ? never
            : P extends string
            ? `Error: Field "${P}" used in "having" needs to be provided in "by".`
            : [
                Error,
                'Field ',
                P,
                ` in "having" needs to be provided in "by"`,
              ]
        }[HavingFields]
      : 'take' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "take", you also need to provide "orderBy"'
      : 'skip' extends Keys<T>
      ? 'orderBy' extends Keys<T>
        ? ByValid extends True
          ? {}
          : {
              [P in OrderFields]: P extends ByFields
                ? never
                : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
            }[OrderFields]
        : 'Error: If you provide "skip", you also need to provide "orderBy"'
      : ByValid extends True
      ? {}
      : {
          [P in OrderFields]: P extends ByFields
            ? never
            : `Error: Field "${P}" in "orderBy" needs to be provided in "by"`
        }[OrderFields]
    >(args: SubsetIntersection<T, TableLogGroupByArgs, OrderByArg> & InputErrors): {} extends InputErrors ? GetTableLogGroupByPayload<T> : Prisma.PrismaPromise<InputErrors>
  /**
   * Fields of the TableLog model
   */
  readonly fields: TableLogFieldRefs;
  }

  /**
   * The delegate class that acts as a "Promise-like" for TableLog.
   * Why is this prefixed with `Prisma__`?
   * Because we want to prevent naming conflicts as mentioned in
   * https://github.com/prisma/prisma-client-js/issues/707
   */
  export interface Prisma__TableLogClient<T, Null = never, ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs, GlobalOmitOptions = {}> extends Prisma.PrismaPromise<T> {
    readonly [Symbol.toStringTag]: "PrismaPromise"
    /**
     * Attaches callbacks for the resolution and/or rejection of the Promise.
     * @param onfulfilled The callback to execute when the Promise is resolved.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of which ever callback is executed.
     */
    then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): $Utils.JsPromise<TResult1 | TResult2>
    /**
     * Attaches a callback for only the rejection of the Promise.
     * @param onrejected The callback to execute when the Promise is rejected.
     * @returns A Promise for the completion of the callback.
     */
    catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): $Utils.JsPromise<T | TResult>
    /**
     * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The
     * resolved value cannot be modified from the callback.
     * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected).
     * @returns A Promise for the completion of the callback.
     */
    finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise<T>
  }




  /**
   * Fields of the TableLog model
   */
  interface TableLogFieldRefs {
    readonly id: FieldRef<"TableLog", 'Int'>
    readonly table_name: FieldRef<"TableLog", 'String'>
    readonly row_id: FieldRef<"TableLog", 'Int'>
    readonly previous_fields: FieldRef<"TableLog", 'Json'>
    readonly new_fields: FieldRef<"TableLog", 'Json'>
    readonly created_by: FieldRef<"TableLog", 'Int'>
    readonly created_at: FieldRef<"TableLog", 'DateTime'>
  }
    

  // Custom InputTypes
  /**
   * TableLog findUnique
   */
  export type TableLogFindUniqueArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter, which TableLog to fetch.
     */
    where: TableLogWhereUniqueInput
  }

  /**
   * TableLog findUniqueOrThrow
   */
  export type TableLogFindUniqueOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter, which TableLog to fetch.
     */
    where: TableLogWhereUniqueInput
  }

  /**
   * TableLog findFirst
   */
  export type TableLogFindFirstArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter, which TableLog to fetch.
     */
    where?: TableLogWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of TableLogs to fetch.
     */
    orderBy?: TableLogOrderByWithRelationInput | TableLogOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for TableLogs.
     */
    cursor?: TableLogWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` TableLogs from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` TableLogs.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of TableLogs.
     */
    distinct?: TableLogScalarFieldEnum | TableLogScalarFieldEnum[]
  }

  /**
   * TableLog findFirstOrThrow
   */
  export type TableLogFindFirstOrThrowArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter, which TableLog to fetch.
     */
    where?: TableLogWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of TableLogs to fetch.
     */
    orderBy?: TableLogOrderByWithRelationInput | TableLogOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for searching for TableLogs.
     */
    cursor?: TableLogWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` TableLogs from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` TableLogs.
     */
    skip?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs}
     * 
     * Filter by unique combinations of TableLogs.
     */
    distinct?: TableLogScalarFieldEnum | TableLogScalarFieldEnum[]
  }

  /**
   * TableLog findMany
   */
  export type TableLogFindManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter, which TableLogs to fetch.
     */
    where?: TableLogWhereInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs}
     * 
     * Determine the order of TableLogs to fetch.
     */
    orderBy?: TableLogOrderByWithRelationInput | TableLogOrderByWithRelationInput[]
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs}
     * 
     * Sets the position for listing TableLogs.
     */
    cursor?: TableLogWhereUniqueInput
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Take `±n` TableLogs from the position of the cursor.
     */
    take?: number
    /**
     * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs}
     * 
     * Skip the first `n` TableLogs.
     */
    skip?: number
    distinct?: TableLogScalarFieldEnum | TableLogScalarFieldEnum[]
  }

  /**
   * TableLog create
   */
  export type TableLogCreateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * The data needed to create a TableLog.
     */
    data: XOR<TableLogCreateInput, TableLogUncheckedCreateInput>
  }

  /**
   * TableLog createMany
   */
  export type TableLogCreateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to create many TableLogs.
     */
    data: TableLogCreateManyInput | TableLogCreateManyInput[]
    skipDuplicates?: boolean
  }

  /**
   * TableLog update
   */
  export type TableLogUpdateArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * The data needed to update a TableLog.
     */
    data: XOR<TableLogUpdateInput, TableLogUncheckedUpdateInput>
    /**
     * Choose, which TableLog to update.
     */
    where: TableLogWhereUniqueInput
  }

  /**
   * TableLog updateMany
   */
  export type TableLogUpdateManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * The data used to update TableLogs.
     */
    data: XOR<TableLogUpdateManyMutationInput, TableLogUncheckedUpdateManyInput>
    /**
     * Filter which TableLogs to update
     */
    where?: TableLogWhereInput
    /**
     * Limit how many TableLogs to update.
     */
    limit?: number
  }

  /**
   * TableLog upsert
   */
  export type TableLogUpsertArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * The filter to search for the TableLog to update in case it exists.
     */
    where: TableLogWhereUniqueInput
    /**
     * In case the TableLog found by the `where` argument doesn't exist, create a new TableLog with this data.
     */
    create: XOR<TableLogCreateInput, TableLogUncheckedCreateInput>
    /**
     * In case the TableLog was found with the provided `where` argument, update it with this data.
     */
    update: XOR<TableLogUpdateInput, TableLogUncheckedUpdateInput>
  }

  /**
   * TableLog delete
   */
  export type TableLogDeleteArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
    /**
     * Filter which TableLog to delete.
     */
    where: TableLogWhereUniqueInput
  }

  /**
   * TableLog deleteMany
   */
  export type TableLogDeleteManyArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Filter which TableLogs to delete
     */
    where?: TableLogWhereInput
    /**
     * Limit how many TableLogs to delete.
     */
    limit?: number
  }

  /**
   * TableLog without action
   */
  export type TableLogDefaultArgs<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> = {
    /**
     * Select specific fields to fetch from the TableLog
     */
    select?: TableLogSelect<ExtArgs> | null
    /**
     * Omit specific fields from the TableLog
     */
    omit?: TableLogOmit<ExtArgs> | null
  }


  /**
   * Enums
   */

  export const TransactionIsolationLevel: {
    ReadUncommitted: 'ReadUncommitted',
    ReadCommitted: 'ReadCommitted',
    RepeatableRead: 'RepeatableRead',
    Serializable: 'Serializable'
  };

  export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]


  export const SessionScalarFieldEnum: {
    id: 'id',
    user_id: 'user_id',
    ip_address: 'ip_address',
    user_agent: 'user_agent',
    payload: 'payload',
    last_activity: 'last_activity'
  };

  export type SessionScalarFieldEnum = (typeof SessionScalarFieldEnum)[keyof typeof SessionScalarFieldEnum]


  export const SchoolScalarFieldEnum: {
    id: 'id',
    uuid: 'uuid',
    school_name: 'school_name',
    school_approved: 'school_approved',
    school_active: 'school_active',
    profile_photo_path: 'profile_photo_path',
    aboutus: 'aboutus',
    mission: 'mission',
    vision: 'vision',
    idcard_bg_color: 'idcard_bg_color',
    idcard_design_color: 'idcard_design_color',
    idcard_text_color: 'idcard_text_color',
    idcard_tnc1: 'idcard_tnc1',
    idcard_tnc2: 'idcard_tnc2',
    school_blocked_reason: 'school_blocked_reason',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SchoolScalarFieldEnum = (typeof SchoolScalarFieldEnum)[keyof typeof SchoolScalarFieldEnum]


  export const BranchScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_country_id: 'branch_country_id',
    branch_state_id: 'branch_state_id',
    branch_name: 'branch_name',
    branch_phone: 'branch_phone',
    branch_email: 'branch_email',
    branch_address: 'branch_address',
    branch_state: 'branch_state',
    branch_active: 'branch_active',
    branch_main: 'branch_main',
    prevent_users_to_login: 'prevent_users_to_login',
    branch_blocked_reason: 'branch_blocked_reason',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type BranchScalarFieldEnum = (typeof BranchScalarFieldEnum)[keyof typeof BranchScalarFieldEnum]


  export const BranchLevelScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    level_name: 'level_name',
    level_leader: 'level_leader',
    level_active: 'level_active',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type BranchLevelScalarFieldEnum = (typeof BranchLevelScalarFieldEnum)[keyof typeof BranchLevelScalarFieldEnum]


  export const ClassTemplateScalarFieldEnum: {
    id: 'id',
    branch_level_id: 'branch_level_id',
    class_name: 'class_name',
    no_of_group: 'no_of_group',
    has_multiple_teacher: 'has_multiple_teacher',
    has_specialization: 'has_specialization',
    has_optionals_subject: 'has_optionals_subject',
    rank: 'rank',
    class_active: 'class_active',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ClassTemplateScalarFieldEnum = (typeof ClassTemplateScalarFieldEnum)[keyof typeof ClassTemplateScalarFieldEnum]


  export const SubjectSetupScalarFieldEnum: {
    id: 'id',
    subject_name: 'subject_name',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SubjectSetupScalarFieldEnum = (typeof SubjectSetupScalarFieldEnum)[keyof typeof SubjectSetupScalarFieldEnum]


  export const SchoolSubjectScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    subject_name: 'subject_name',
    branch_config: 'branch_config',
    school_subjects_active: 'school_subjects_active',
    is_compulsory: 'is_compulsory',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SchoolSubjectScalarFieldEnum = (typeof SchoolSubjectScalarFieldEnum)[keyof typeof SchoolSubjectScalarFieldEnum]


  export const BranchSessionScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    session_name: 'session_name',
    no_of_terms: 'no_of_terms',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type BranchSessionScalarFieldEnum = (typeof BranchSessionScalarFieldEnum)[keyof typeof BranchSessionScalarFieldEnum]


  export const SchoolSettingScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    isolate_branch_library: 'isolate_branch_library',
    isolate_branch_multimedia: 'isolate_branch_multimedia',
    id_card_amount: 'id_card_amount',
    library_card_amount: 'library_card_amount',
    result_serial_ammount: 'result_serial_ammount',
    id_card_no_of_years: 'id_card_no_of_years',
    library_card_no_of_years: 'library_card_no_of_years',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SchoolSettingScalarFieldEnum = (typeof SchoolSettingScalarFieldEnum)[keyof typeof SchoolSettingScalarFieldEnum]


  export const MultimediaGroupScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    multimedia_group_name: 'multimedia_group_name',
    multimedia_group_desc: 'multimedia_group_desc',
    multimedia_group_active: 'multimedia_group_active',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type MultimediaGroupScalarFieldEnum = (typeof MultimediaGroupScalarFieldEnum)[keyof typeof MultimediaGroupScalarFieldEnum]


  export const MultimediaScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    multimedia_is_image: 'multimedia_is_image',
    multimedia_name: 'multimedia_name',
    multimedia_desc: 'multimedia_desc',
    multimedia_path: 'multimedia_path',
    multimedia_active: 'multimedia_active',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type MultimediaScalarFieldEnum = (typeof MultimediaScalarFieldEnum)[keyof typeof MultimediaScalarFieldEnum]


  export const LibraryBookScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    book_name: 'book_name',
    book_desc: 'book_desc',
    book_author_name: 'book_author_name',
    book_cover: 'book_cover',
    book_path: 'book_path',
    book_type: 'book_type',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type LibraryBookScalarFieldEnum = (typeof LibraryBookScalarFieldEnum)[keyof typeof LibraryBookScalarFieldEnum]


  export const IdCardScalarFieldEnum: {
    id: 'id',
    id_card_no: 'id_card_no',
    issued_on: 'issued_on',
    expired_on: 'expired_on',
    fare_amont: 'fare_amont',
    acknowledged_from_school: 'acknowledged_from_school',
    acknowledged_from_school_by: 'acknowledged_from_school_by',
    acknowledged_from_school_on: 'acknowledged_from_school_on',
    acknowledged_from_admin: 'acknowledged_from_admin',
    acknowledged_from_admin_by: 'acknowledged_from_admin_by',
    acknowledged_from_admin_on: 'acknowledged_from_admin_on',
    acknowledged_from_superadmin: 'acknowledged_from_superadmin',
    acknowledged_from_superadmin_on: 'acknowledged_from_superadmin_on',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type IdCardScalarFieldEnum = (typeof IdCardScalarFieldEnum)[keyof typeof IdCardScalarFieldEnum]


  export const LibraryCardScalarFieldEnum: {
    id: 'id',
    library_card_no: 'library_card_no',
    issued_on: 'issued_on',
    expired_on: 'expired_on',
    fare_amont: 'fare_amont',
    acknowledged_from_school: 'acknowledged_from_school',
    acknowledged_from_school_by: 'acknowledged_from_school_by',
    acknowledged_from_school_on: 'acknowledged_from_school_on',
    acknowledged_from_admin: 'acknowledged_from_admin',
    acknowledged_from_admin_by: 'acknowledged_from_admin_by',
    acknowledged_from_admin_on: 'acknowledged_from_admin_on',
    acknowledged_from_superadmin: 'acknowledged_from_superadmin',
    acknowledged_from_superadmin_on: 'acknowledged_from_superadmin_on',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type LibraryCardScalarFieldEnum = (typeof LibraryCardScalarFieldEnum)[keyof typeof LibraryCardScalarFieldEnum]


  export const ResultSerialNumbersScalarFieldEnum: {
    id: 'id',
    serial_no: 'serial_no',
    issued_on: 'issued_on',
    expired_on: 'expired_on',
    fare_amont: 'fare_amont',
    acknowledged_from_school: 'acknowledged_from_school',
    acknowledged_from_school_by: 'acknowledged_from_school_by',
    acknowledged_from_school_on: 'acknowledged_from_school_on',
    acknowledged_from_admin: 'acknowledged_from_admin',
    acknowledged_from_admin_by: 'acknowledged_from_admin_by',
    acknowledged_from_admin_on: 'acknowledged_from_admin_on',
    acknowledged_from_superadmin: 'acknowledged_from_superadmin',
    acknowledged_from_superadmin_on: 'acknowledged_from_superadmin_on',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ResultSerialNumbersScalarFieldEnum = (typeof ResultSerialNumbersScalarFieldEnum)[keyof typeof ResultSerialNumbersScalarFieldEnum]


  export const SessionTermScalarFieldEnum: {
    id: 'id',
    session_id: 'session_id',
    term_id: 'term_id',
    session_term_name: 'session_term_name',
    session_term_visible: 'session_term_visible',
    session_term_locked: 'session_term_locked',
    session_term_current: 'session_term_current',
    session_term_clone_details: 'session_term_clone_details',
    session_term_clone_details_from: 'session_term_clone_details_from',
    session_term_clone_details_from_id: 'session_term_clone_details_from_id',
    session_term_clone_classinstances: 'session_term_clone_classinstances',
    session_terms_clone_subjects: 'session_terms_clone_subjects',
    session_terms_clone_scoresetup: 'session_terms_clone_scoresetup',
    session_term_start: 'session_term_start',
    session_term_end: 'session_term_end',
    session_term_next_begin: 'session_term_next_begin',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SessionTermScalarFieldEnum = (typeof SessionTermScalarFieldEnum)[keyof typeof SessionTermScalarFieldEnum]


  export const UserLevelScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    level_id: 'level_id',
    user_id: 'user_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type UserLevelScalarFieldEnum = (typeof UserLevelScalarFieldEnum)[keyof typeof UserLevelScalarFieldEnum]


  export const UserTrackingScalarFieldEnum: {
    id: 'id',
    class_id: 'class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    user_id: 'user_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type UserTrackingScalarFieldEnum = (typeof UserTrackingScalarFieldEnum)[keyof typeof UserTrackingScalarFieldEnum]


  export const UserTrackingSubjectScalarFieldEnum: {
    id: 'id',
    class_id: 'class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    subject_id: 'subject_id',
    user_id: 'user_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type UserTrackingSubjectScalarFieldEnum = (typeof UserTrackingSubjectScalarFieldEnum)[keyof typeof UserTrackingSubjectScalarFieldEnum]


  export const AllUserScalarFieldEnum: {
    id: 'id',
    model: 'model',
    model_id: 'model_id'
  };

  export type AllUserScalarFieldEnum = (typeof AllUserScalarFieldEnum)[keyof typeof AllUserScalarFieldEnum]


  export const UserScalarFieldEnum: {
    id: 'id',
    uuid: 'uuid',
    user_country_id: 'user_country_id',
    user_state_id: 'user_state_id',
    user_city_id: 'user_city_id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    local_id: 'local_id',
    staff_dept: 'staff_dept',
    user_name: 'user_name',
    user_phone: 'user_phone',
    user_sex: 'user_sex',
    email: 'email',
    email_verified_at: 'email_verified_at',
    user_address: 'user_address',
    qualification_id: 'qualification_id',
    user_proffession: 'user_proffession',
    profile_photo_path: 'profile_photo_path',
    date_of_birth: 'date_of_birth',
    breif_bio: 'breif_bio',
    facebook_handle: 'facebook_handle',
    twitter_handle: 'twitter_handle',
    instagram_handle: 'instagram_handle',
    username: 'username',
    password: 'password',
    remember_token: 'remember_token',
    user_active: 'user_active',
    user_must_change_password: 'user_must_change_password',
    role: 'role',
    user_type: 'user_type',
    use_role: 'use_role',
    user_blocked_reason: 'user_blocked_reason',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]


  export const StudentScalarFieldEnum: {
    id: 'id',
    uuid: 'uuid',
    school_id: 'school_id',
    branch_id: 'branch_id',
    local_id: 'local_id',
    student_country_id: 'student_country_id',
    student_state_id: 'student_state_id',
    guardian_id: 'guardian_id',
    religion_id: 'religion_id',
    first_name: 'first_name',
    middle_name: 'middle_name',
    last_name: 'last_name',
    email: 'email',
    student_phone: 'student_phone',
    student_address: 'student_address',
    student_sex: 'student_sex',
    student_bio: 'student_bio',
    profile_photo_path: 'profile_photo_path',
    username: 'username',
    password: 'password',
    student_active: 'student_active',
    student_blocked_reason: 'student_blocked_reason',
    role: 'role',
    user_type: 'user_type',
    use_role: 'use_role',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type StudentScalarFieldEnum = (typeof StudentScalarFieldEnum)[keyof typeof StudentScalarFieldEnum]


  export const GuardianScalarFieldEnum: {
    id: 'id',
    uuid: 'uuid',
    school_id: 'school_id',
    branch_id: 'branch_id',
    surname: 'surname',
    first_name: 'first_name',
    guardian_sex: 'guardian_sex',
    is_married: 'is_married',
    marriage_disolved: 'marriage_disolved',
    is_parent: 'is_parent',
    relation_how_related: 'relation_how_related',
    guardian_proffession: 'guardian_proffession',
    phonenumber: 'phonenumber',
    email: 'email',
    role: 'role',
    user_type: 'user_type',
    password: 'password',
    use_role: 'use_role',
    guardian_active: 'guardian_active',
    guardian_blocked_reason: 'guardian_blocked_reason',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type GuardianScalarFieldEnum = (typeof GuardianScalarFieldEnum)[keyof typeof GuardianScalarFieldEnum]


  export const StudentGuardianScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    student_id: 'student_id',
    guardian_id: 'guardian_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type StudentGuardianScalarFieldEnum = (typeof StudentGuardianScalarFieldEnum)[keyof typeof StudentGuardianScalarFieldEnum]


  export const PermissionScalarFieldEnum: {
    id: 'id',
    name: 'name',
    display_name: 'display_name',
    description: 'description',
    is_crud: 'is_crud',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type PermissionScalarFieldEnum = (typeof PermissionScalarFieldEnum)[keyof typeof PermissionScalarFieldEnum]


  export const RoleCrudPermissionScalarFieldEnum: {
    id: 'id',
    role_id: 'role_id',
    permission_id: 'permission_id',
    permission_menu: 'permission_menu',
    permission_create: 'permission_create',
    permission_read: 'permission_read',
    permission_update: 'permission_update',
    permission_delete: 'permission_delete',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type RoleCrudPermissionScalarFieldEnum = (typeof RoleCrudPermissionScalarFieldEnum)[keyof typeof RoleCrudPermissionScalarFieldEnum]


  export const RoleMaxCrudPermissionsScalarFieldEnum: {
    id: 'id',
    role_id: 'role_id',
    permission_id: 'permission_id',
    permission_menu: 'permission_menu',
    permission_create: 'permission_create',
    permission_read: 'permission_read',
    permission_update: 'permission_update',
    permission_delete: 'permission_delete',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type RoleMaxCrudPermissionsScalarFieldEnum = (typeof RoleMaxCrudPermissionsScalarFieldEnum)[keyof typeof RoleMaxCrudPermissionsScalarFieldEnum]


  export const RoleMaxPermissionScalarFieldEnum: {
    id: 'id',
    role_id: 'role_id',
    permission_id: 'permission_id',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type RoleMaxPermissionScalarFieldEnum = (typeof RoleMaxPermissionScalarFieldEnum)[keyof typeof RoleMaxPermissionScalarFieldEnum]


  export const RolePermissionScalarFieldEnum: {
    id: 'id',
    role_id: 'role_id',
    permission_id: 'permission_id',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type RolePermissionScalarFieldEnum = (typeof RolePermissionScalarFieldEnum)[keyof typeof RolePermissionScalarFieldEnum]


  export const RoleScalarFieldEnum: {
    id: 'id',
    name: 'name',
    display_name: 'display_name',
    description: 'description',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type RoleScalarFieldEnum = (typeof RoleScalarFieldEnum)[keyof typeof RoleScalarFieldEnum]


  export const UserCrudPermissionScalarFieldEnum: {
    id: 'id',
    user_id: 'user_id',
    user_type: 'user_type',
    permission_id: 'permission_id',
    permission_menu: 'permission_menu',
    permission_create: 'permission_create',
    permission_read: 'permission_read',
    permission_update: 'permission_update',
    permission_delete: 'permission_delete',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type UserCrudPermissionScalarFieldEnum = (typeof UserCrudPermissionScalarFieldEnum)[keyof typeof UserCrudPermissionScalarFieldEnum]


  export const UserPermissionScalarFieldEnum: {
    id: 'id',
    user_id: 'user_id',
    permission_id: 'permission_id',
    user_type: 'user_type',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by',
    userId: 'userId'
  };

  export type UserPermissionScalarFieldEnum = (typeof UserPermissionScalarFieldEnum)[keyof typeof UserPermissionScalarFieldEnum]


  export const UsertypeMaxCrudPermissionScalarFieldEnum: {
    id: 'id',
    user_type: 'user_type',
    permission_id: 'permission_id',
    permission_menu: 'permission_menu',
    permission_create: 'permission_create',
    permission_read: 'permission_read',
    permission_update: 'permission_update',
    permission_delete: 'permission_delete',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type UsertypeMaxCrudPermissionScalarFieldEnum = (typeof UsertypeMaxCrudPermissionScalarFieldEnum)[keyof typeof UsertypeMaxCrudPermissionScalarFieldEnum]


  export const UsertypeMaxPermissionScalarFieldEnum: {
    id: 'id',
    user_type: 'user_type',
    permission_id: 'permission_id',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type UsertypeMaxPermissionScalarFieldEnum = (typeof UsertypeMaxPermissionScalarFieldEnum)[keyof typeof UsertypeMaxPermissionScalarFieldEnum]


  export const QualificationScalarFieldEnum: {
    id: 'id',
    qualification_name: 'qualification_name',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type QualificationScalarFieldEnum = (typeof QualificationScalarFieldEnum)[keyof typeof QualificationScalarFieldEnum]


  export const GenderScalarFieldEnum: {
    id: 'id',
    gender_name: 'gender_name',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type GenderScalarFieldEnum = (typeof GenderScalarFieldEnum)[keyof typeof GenderScalarFieldEnum]


  export const TermScalarFieldEnum: {
    id: 'id',
    term_name: 'term_name',
    term_alias: 'term_alias',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type TermScalarFieldEnum = (typeof TermScalarFieldEnum)[keyof typeof TermScalarFieldEnum]


  export const ReligionScalarFieldEnum: {
    id: 'id',
    religion_name: 'religion_name',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ReligionScalarFieldEnum = (typeof ReligionScalarFieldEnum)[keyof typeof ReligionScalarFieldEnum]


  export const ComplainFromTeacherScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    session_class_id: 'session_class_id',
    student_id: 'student_id',
    complain: 'complain',
    is_urgent: 'is_urgent',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ComplainFromTeacherScalarFieldEnum = (typeof ComplainFromTeacherScalarFieldEnum)[keyof typeof ComplainFromTeacherScalarFieldEnum]


  export const AttendanceScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    session_class_id: 'session_class_id',
    student_id: 'student_id',
    staff_id: 'staff_id',
    attendance_date: 'attendance_date',
    status: 'status',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type AttendanceScalarFieldEnum = (typeof AttendanceScalarFieldEnum)[keyof typeof AttendanceScalarFieldEnum]


  export const SchoolNoteScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    branch_id: 'branch_id',
    class_template_id: 'class_template_id',
    school_subject_id: 'school_subject_id',
    term_id: 'term_id',
    week: 'week',
    order: 'order',
    topic: 'topic',
    topic_desc: 'topic_desc',
    students_question_to_answer: 'students_question_to_answer',
    note: 'note',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SchoolNoteScalarFieldEnum = (typeof SchoolNoteScalarFieldEnum)[keyof typeof SchoolNoteScalarFieldEnum]


  export const FeeScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    fee_name: 'fee_name',
    price_template: 'price_template',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type FeeScalarFieldEnum = (typeof FeeScalarFieldEnum)[keyof typeof FeeScalarFieldEnum]


  export const PaymentTypeScalarFieldEnum: {
    id: 'id',
    payment_type_name: 'payment_type_name',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentTypeScalarFieldEnum = (typeof PaymentTypeScalarFieldEnum)[keyof typeof PaymentTypeScalarFieldEnum]


  export const PaymentDurationScalarFieldEnum: {
    id: 'id',
    duration: 'duration',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentDurationScalarFieldEnum = (typeof PaymentDurationScalarFieldEnum)[keyof typeof PaymentDurationScalarFieldEnum]


  export const PaymentScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    who_would_pay: 'who_would_pay',
    fee_id: 'fee_id',
    payment_duration_id: 'payment_duration_id',
    payment_amount: 'payment_amount',
    start_date: 'start_date',
    end_date: 'end_date',
    due_date: 'due_date',
    is_compulsory: 'is_compulsory',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentScalarFieldEnum = (typeof PaymentScalarFieldEnum)[keyof typeof PaymentScalarFieldEnum]


  export const PaymentMadeScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    payment_id: 'payment_id',
    student_id: 'student_id',
    payer_id: 'payer_id',
    payer_model: 'payer_model',
    payer_phonenumber: 'payer_phonenumber',
    payer_name: 'payer_name',
    amount_paid: 'amount_paid',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentMadeScalarFieldEnum = (typeof PaymentMadeScalarFieldEnum)[keyof typeof PaymentMadeScalarFieldEnum]


  export const PaymentPartMadeScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    payment_id: 'payment_id',
    student_id: 'student_id',
    payer_id: 'payer_id',
    payer_model: 'payer_model',
    payer_phonenumber: 'payer_phonenumber',
    payer_name: 'payer_name',
    amount_part_paid: 'amount_part_paid',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentPartMadeScalarFieldEnum = (typeof PaymentPartMadeScalarFieldEnum)[keyof typeof PaymentPartMadeScalarFieldEnum]


  export const PaymentAttemptScalarFieldEnum: {
    id: 'id',
    payment_id: 'payment_id',
    student_id: 'student_id',
    ref_code: 'ref_code',
    access_code: 'access_code',
    payer_id: 'payer_id',
    payer_model: 'payer_model',
    amount_paid: 'amount_paid',
    is_successful: 'is_successful',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type PaymentAttemptScalarFieldEnum = (typeof PaymentAttemptScalarFieldEnum)[keyof typeof PaymentAttemptScalarFieldEnum]


  export const ClassSubjectTemplateScalarFieldEnum: {
    id: 'id',
    class_id: 'class_id',
    specialization_id: 'specialization_id',
    subject_id: 'subject_id',
    is_compulsory: 'is_compulsory',
    include_in_result: 'include_in_result',
    include_in_calculation: 'include_in_calculation',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ClassSubjectTemplateScalarFieldEnum = (typeof ClassSubjectTemplateScalarFieldEnum)[keyof typeof ClassSubjectTemplateScalarFieldEnum]


  export const SessionClassScalarFieldEnum: {
    id: 'id',
    session_term_id: 'session_term_id',
    class_id: 'class_id',
    session_class_name: 'session_class_name',
    no_of_group: 'no_of_group',
    has_multiple_teacher: 'has_multiple_teacher',
    has_specialization: 'has_specialization',
    has_optionals_subject: 'has_optionals_subject',
    main_treachear: 'main_treachear',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SessionClassScalarFieldEnum = (typeof SessionClassScalarFieldEnum)[keyof typeof SessionClassScalarFieldEnum]


  export const SessionClassSubjectScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    subject_id: 'subject_id',
    is_compulsory: 'is_compulsory',
    include_in_result: 'include_in_result',
    include_in_calculation: 'include_in_calculation',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SessionClassSubjectScalarFieldEnum = (typeof SessionClassSubjectScalarFieldEnum)[keyof typeof SessionClassSubjectScalarFieldEnum]


  export const SessionClassStudentSubjectScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    subject_id: 'subject_id',
    student_id: 'student_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SessionClassStudentSubjectScalarFieldEnum = (typeof SessionClassStudentSubjectScalarFieldEnum)[keyof typeof SessionClassStudentSubjectScalarFieldEnum]


  export const ClassSpecializationScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    specialization_name: 'specialization_name',
    branch_config: 'branch_config',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ClassSpecializationScalarFieldEnum = (typeof ClassSpecializationScalarFieldEnum)[keyof typeof ClassSpecializationScalarFieldEnum]


  export const ClassGroupScalarFieldEnum: {
    id: 'id',
    school_id: 'school_id',
    group_name: 'group_name',
    branch_config: 'branch_config',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ClassGroupScalarFieldEnum = (typeof ClassGroupScalarFieldEnum)[keyof typeof ClassGroupScalarFieldEnum]


  export const ScoreTypeScalarFieldEnum: {
    id: 'id',
    score_type: 'score_type',
    branch_config: 'branch_config',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ScoreTypeScalarFieldEnum = (typeof ScoreTypeScalarFieldEnum)[keyof typeof ScoreTypeScalarFieldEnum]


  export const ScoreDisplayTypeScalarFieldEnum: {
    id: 'id',
    display_type: 'display_type',
    branch_config: 'branch_config',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ScoreDisplayTypeScalarFieldEnum = (typeof ScoreDisplayTypeScalarFieldEnum)[keyof typeof ScoreDisplayTypeScalarFieldEnum]


  export const StudentScoreScalarFieldEnum: {
    id: 'id',
    score_setup_id: 'score_setup_id',
    subject_id: 'subject_id',
    student_id: 'student_id',
    score: 'score',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type StudentScoreScalarFieldEnum = (typeof StudentScoreScalarFieldEnum)[keyof typeof StudentScoreScalarFieldEnum]


  export const StudentTotalScoreScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    student_id: 'student_id',
    totalscore: 'totalscore',
    no_of_subject: 'no_of_subject',
    group_position: 'group_position',
    teachers_comment: 'teachers_comment',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type StudentTotalScoreScalarFieldEnum = (typeof StudentTotalScoreScalarFieldEnum)[keyof typeof StudentTotalScoreScalarFieldEnum]


  export const StudentTrackingScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    student_id: 'student_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type StudentTrackingScalarFieldEnum = (typeof StudentTrackingScalarFieldEnum)[keyof typeof StudentTrackingScalarFieldEnum]


  export const ReportCardSettingScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    is_report_generated: 'is_report_generated',
    display_student_position: 'display_student_position',
    show_previous_terms: 'show_previous_terms',
    accumulate_with_previous: 'accumulate_with_previous',
    display_attendance_in_report: 'display_attendance_in_report',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ReportCardSettingScalarFieldEnum = (typeof ReportCardSettingScalarFieldEnum)[keyof typeof ReportCardSettingScalarFieldEnum]


  export const ClassScoreSetupTemplateScalarFieldEnum: {
    id: 'id',
    class_id: 'class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    score_type_id: 'score_type_id',
    display_type: 'display_type',
    display_name: 'display_name',
    max_score: 'max_score',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ClassScoreSetupTemplateScalarFieldEnum = (typeof ClassScoreSetupTemplateScalarFieldEnum)[keyof typeof ClassScoreSetupTemplateScalarFieldEnum]


  export const SessionClassScoreSetupScalarFieldEnum: {
    id: 'id',
    session_class_id: 'session_class_id',
    specialization_id: 'specialization_id',
    group_id: 'group_id',
    score_type_id: 'score_type_id',
    display_type: 'display_type',
    display_name: 'display_name',
    max_score: 'max_score',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type SessionClassScoreSetupScalarFieldEnum = (typeof SessionClassScoreSetupScalarFieldEnum)[keyof typeof SessionClassScoreSetupScalarFieldEnum]


  export const ExamTypeScalarFieldEnum: {
    id: 'id',
    exam_type_name: 'exam_type_name',
    exam_type_active: 'exam_type_active',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamTypeScalarFieldEnum = (typeof ExamTypeScalarFieldEnum)[keyof typeof ExamTypeScalarFieldEnum]


  export const ExamCategoryScalarFieldEnum: {
    id: 'id',
    exam_category_name: 'exam_category_name',
    exam_category_active: 'exam_category_active',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamCategoryScalarFieldEnum = (typeof ExamCategoryScalarFieldEnum)[keyof typeof ExamCategoryScalarFieldEnum]


  export const ExamQuestionMarkerScalarFieldEnum: {
    id: 'id',
    question_marker_name: 'question_marker_name',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamQuestionMarkerScalarFieldEnum = (typeof ExamQuestionMarkerScalarFieldEnum)[keyof typeof ExamQuestionMarkerScalarFieldEnum]


  export const QuestionTemplateScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    class_id: 'class_id',
    subject_id: 'subject_id',
    question: 'question',
    question_marker: 'question_marker',
    is_objective: 'is_objective',
    is_boolean_question: 'is_boolean_question',
    max_time: 'max_time',
    image_path: 'image_path',
    option_a: 'option_a',
    option_b: 'option_b',
    option_c: 'option_c',
    option_d: 'option_d',
    option_answer: 'option_answer',
    theory_answer: 'theory_answer',
    difficulty_level: 'difficulty_level',
    tag: 'tag',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type QuestionTemplateScalarFieldEnum = (typeof QuestionTemplateScalarFieldEnum)[keyof typeof QuestionTemplateScalarFieldEnum]


  export const QuestionScalarFieldEnum: {
    id: 'id',
    branch_id: 'branch_id',
    class_id: 'class_id',
    subject_id: 'subject_id',
    question: 'question',
    question_marker: 'question_marker',
    is_objective: 'is_objective',
    is_boolean_question: 'is_boolean_question',
    max_time: 'max_time',
    image_path: 'image_path',
    option_a: 'option_a',
    option_b: 'option_b',
    option_c: 'option_c',
    option_d: 'option_d',
    option_answer: 'option_answer',
    theory_answer: 'theory_answer',
    difficulty_level: 'difficulty_level',
    tag: 'tag',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type QuestionScalarFieldEnum = (typeof QuestionScalarFieldEnum)[keyof typeof QuestionScalarFieldEnum]


  export const ExamVisibilityScalarFieldEnum: {
    id: 'id',
    exam_visibility_name: 'exam_visibility_name',
    desc: 'desc',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamVisibilityScalarFieldEnum = (typeof ExamVisibilityScalarFieldEnum)[keyof typeof ExamVisibilityScalarFieldEnum]


  export const ExamScalarFieldEnum: {
    id: 'id',
    class_id: 'class_id',
    term_id: 'term_id',
    subject_id: 'subject_id',
    desc: 'desc',
    exam_date: 'exam_date',
    exam_type: 'exam_type',
    exam_category: 'exam_category',
    exam_visibility: 'exam_visibility',
    max_time_allowed: 'max_time_allowed',
    no_of_life: 'no_of_life',
    exam_objective_max_score: 'exam_objective_max_score',
    exam_theory_max_score: 'exam_theory_max_score',
    objective_max_no_of_question: 'objective_max_no_of_question',
    theory_max_no_of_question: 'theory_max_no_of_question',
    exam_enabled: 'exam_enabled',
    allow_assessment_only_at_specified_time: 'allow_assessment_only_at_specified_time',
    allow_submit_after_time_elapsed: 'allow_submit_after_time_elapsed',
    is_practise_exam: 'is_practise_exam',
    exam_gift_id: 'exam_gift_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamScalarFieldEnum = (typeof ExamScalarFieldEnum)[keyof typeof ExamScalarFieldEnum]


  export const ExamQuestionScalarFieldEnum: {
    id: 'id',
    exam_id: 'exam_id',
    question_id: 'question_id',
    score_attached: 'score_attached',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamQuestionScalarFieldEnum = (typeof ExamQuestionScalarFieldEnum)[keyof typeof ExamQuestionScalarFieldEnum]


  export const ExamScoreSetupLinkScalarFieldEnum: {
    id: 'id',
    exam_id: 'exam_id',
    score_setup_id: 'score_setup_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamScoreSetupLinkScalarFieldEnum = (typeof ExamScoreSetupLinkScalarFieldEnum)[keyof typeof ExamScoreSetupLinkScalarFieldEnum]


  export const ExamAttemptScalarFieldEnum: {
    id: 'id',
    exam_id: 'exam_id',
    person_id: 'person_id',
    model_name: 'model_name',
    start_at: 'start_at',
    submitted_at: 'submitted_at',
    score_obtained: 'score_obtained',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamAttemptScalarFieldEnum = (typeof ExamAttemptScalarFieldEnum)[keyof typeof ExamAttemptScalarFieldEnum]


  export const ExamQuestionAnswerScalarFieldEnum: {
    id: 'id',
    attempt_id: 'attempt_id',
    exam_id: 'exam_id',
    question_id: 'question_id',
    model_name: 'model_name',
    person_id: 'person_id',
    user_objective_answer: 'user_objective_answer',
    user_theory_answer: 'user_theory_answer',
    score_obtained: 'score_obtained',
    marked_by: 'marked_by',
    time_taken: 'time_taken',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamQuestionAnswerScalarFieldEnum = (typeof ExamQuestionAnswerScalarFieldEnum)[keyof typeof ExamQuestionAnswerScalarFieldEnum]


  export const ExamGiftScalarFieldEnum: {
    id: 'id',
    exam_id: 'exam_id',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at'
  };

  export type ExamGiftScalarFieldEnum = (typeof ExamGiftScalarFieldEnum)[keyof typeof ExamGiftScalarFieldEnum]


  export const SchoolRecordScalarFieldEnum: {
    id: 'id',
    school_name: 'school_name',
    school_code: 'school_code',
    school_databasename: 'school_databasename',
    school_active: 'school_active',
    school_approved: 'school_approved',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at'
  };

  export type SchoolRecordScalarFieldEnum = (typeof SchoolRecordScalarFieldEnum)[keyof typeof SchoolRecordScalarFieldEnum]


  export const ComponentGroupScalarFieldEnum: {
    id: 'id',
    component_group_name: 'component_group_name',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type ComponentGroupScalarFieldEnum = (typeof ComponentGroupScalarFieldEnum)[keyof typeof ComponentGroupScalarFieldEnum]


  export const ComponentScalarFieldEnum: {
    id: 'id',
    component_group_id: 'component_group_id',
    component_name: 'component_name',
    component_displayname: 'component_displayname',
    component_desc: 'component_desc',
    component_image_url: 'component_image_url',
    component_file_name: 'component_file_name',
    is_native: 'is_native',
    is_enabled: 'is_enabled',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type ComponentScalarFieldEnum = (typeof ComponentScalarFieldEnum)[keyof typeof ComponentScalarFieldEnum]


  export const CrudPageScalarFieldEnum: {
    id: 'id',
    name: 'name',
    schema: 'schema',
    is_enabled: 'is_enabled',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type CrudPageScalarFieldEnum = (typeof CrudPageScalarFieldEnum)[keyof typeof CrudPageScalarFieldEnum]


  export const AppUserTypeScalarFieldEnum: {
    id: 'id',
    app_user_type: 'app_user_type',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type AppUserTypeScalarFieldEnum = (typeof AppUserTypeScalarFieldEnum)[keyof typeof AppUserTypeScalarFieldEnum]


  export const MenuGroupScalarFieldEnum: {
    id: 'id',
    menu_group_name: 'menu_group_name',
    menu_group_sort: 'menu_group_sort',
    menu_group_icon: 'menu_group_icon',
    menu_active: 'menu_active',
    is_root: 'is_root',
    parent_group_id: 'parent_group_id',
    created_at: 'created_at',
    created_by: 'created_by',
    updated_at: 'updated_at',
    updated_by: 'updated_by',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type MenuGroupScalarFieldEnum = (typeof MenuGroupScalarFieldEnum)[keyof typeof MenuGroupScalarFieldEnum]


  export const SystemConfigurationScalarFieldEnum: {
    id: 'id',
    configuration_name: 'configuration_name',
    configurations: 'configurations',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type SystemConfigurationScalarFieldEnum = (typeof SystemConfigurationScalarFieldEnum)[keyof typeof SystemConfigurationScalarFieldEnum]


  export const CrudFrontScalarFieldEnum: {
    id: 'id',
    name: 'name',
    permission_name: 'permission_name',
    handler_name: 'handler_name',
    post_route: 'post_route',
    read_route: 'read_route',
    update_route: 'update_route',
    delete_route: 'delete_route',
    schema: 'schema',
    is_enabled: 'is_enabled',
    menu_name: 'menu_name',
    menu_icon: 'menu_icon',
    menu_group: 'menu_group',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type CrudFrontScalarFieldEnum = (typeof CrudFrontScalarFieldEnum)[keyof typeof CrudFrontScalarFieldEnum]


  export const CrudUtilScalarFieldEnum: {
    id: 'id',
    name: 'name',
    menu_name: 'menu_name',
    menu_icon: 'menu_icon',
    menu_group: 'menu_group',
    permission_name: 'permission_name',
    menu_sort: 'menu_sort',
    log_update: 'log_update',
    primary_key: 'primary_key',
    show_field: 'show_field',
    paginate_fetch: 'paginate_fetch',
    permission_for_all: 'permission_for_all',
    should_backup: 'should_backup',
    table_name: 'table_name',
    model_name: 'model_name',
    schema: 'schema',
    fetch_all_manually: 'fetch_all_manually',
    fetch_manually: 'fetch_manually',
    create_manually: 'create_manually',
    update_manually: 'update_manually',
    delete_manually: 'delete_manually',
    use_modal: 'use_modal',
    use_custom_form: 'use_custom_form',
    is_fetch_all_public: 'is_fetch_all_public',
    is_fetch_public: 'is_fetch_public',
    is_create_public: 'is_create_public',
    is_update_public: 'is_update_public',
    is_delete_public: 'is_delete_public',
    fetch_all_path: 'fetch_all_path',
    fetch_path: 'fetch_path',
    create_path: 'create_path',
    update_path: 'update_path',
    delete_path: 'delete_path',
    query_parameter: 'query_parameter',
    custom_form_name: 'custom_form_name',
    block_fetch_all: 'block_fetch_all',
    block_fetch: 'block_fetch',
    block_create: 'block_create',
    block_update: 'block_update',
    block_delete: 'block_delete',
    is_enabled: 'is_enabled',
    front_validations: 'front_validations',
    table_columns: 'table_columns',
    backend_validations: 'backend_validations',
    relationships: 'relationships',
    filters: 'filters',
    filters_internal: 'filters_internal',
    hooks: 'hooks',
    children: 'children',
    info_messages: 'info_messages',
    config: 'config',
    buttons: 'buttons',
    others: 'others',
    created_by: 'created_by',
    created_at: 'created_at',
    updated_at: 'updated_at',
    deleted_at: 'deleted_at',
    deleted_by: 'deleted_by'
  };

  export type CrudUtilScalarFieldEnum = (typeof CrudUtilScalarFieldEnum)[keyof typeof CrudUtilScalarFieldEnum]


  export const RegionScalarFieldEnum: {
    id: 'id',
    name: 'name',
    translations: 'translations',
    wikiDataId: 'wikiDataId',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

  export type RegionScalarFieldEnum = (typeof RegionScalarFieldEnum)[keyof typeof RegionScalarFieldEnum]


  export const SubregionScalarFieldEnum: {
    id: 'id',
    name: 'name',
    region_id: 'region_id',
    translations: 'translations',
    wikiDataId: 'wikiDataId',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

  export type SubregionScalarFieldEnum = (typeof SubregionScalarFieldEnum)[keyof typeof SubregionScalarFieldEnum]


  export const CountryScalarFieldEnum: {
    id: 'id',
    name: 'name',
    iso3: 'iso3',
    iso2: 'iso2',
    numeric_code: 'numeric_code',
    phonecode: 'phonecode',
    capital: 'capital',
    currency: 'currency',
    currency_name: 'currency_name',
    currency_symbol: 'currency_symbol',
    tld: 'tld',
    native_reserved: 'native_reserved',
    population: 'population',
    gdp: 'gdp',
    region: 'region',
    region_id: 'region_id',
    subregion: 'subregion',
    subregion_id: 'subregion_id',
    nationality: 'nationality',
    timezones: 'timezones',
    translations: 'translations',
    latitude: 'latitude',
    longitude: 'longitude',
    emoji: 'emoji',
    emojiU: 'emojiU',
    wikiDataId: 'wikiDataId',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

  export type CountryScalarFieldEnum = (typeof CountryScalarFieldEnum)[keyof typeof CountryScalarFieldEnum]


  export const StateScalarFieldEnum: {
    id: 'id',
    name: 'name',
    country_id: 'country_id',
    country_code: 'country_code',
    country_name: 'country_name',
    iso2: 'iso2',
    iso3166_2: 'iso3166_2',
    fips_code: 'fips_code',
    type: 'type',
    level: 'level',
    parent_id: 'parent_id',
    native_reserved: 'native_reserved',
    latitude: 'latitude',
    longitude: 'longitude',
    timezone: 'timezone',
    wikiDataId: 'wikiDataId',
    state_code: 'state_code',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

  export type StateScalarFieldEnum = (typeof StateScalarFieldEnum)[keyof typeof StateScalarFieldEnum]


  export const CityScalarFieldEnum: {
    id: 'id',
    name: 'name',
    state_id: 'state_id',
    state_code: 'state_code',
    state_name: 'state_name',
    country_id: 'country_id',
    country_code: 'country_code',
    country_name: 'country_name',
    latitude: 'latitude',
    longitude: 'longitude',
    timezone: 'timezone',
    wikiDataId: 'wikiDataId',
    createdAt: 'createdAt',
    updatedAt: 'updatedAt'
  };

  export type CityScalarFieldEnum = (typeof CityScalarFieldEnum)[keyof typeof CityScalarFieldEnum]


  export const TableLogScalarFieldEnum: {
    id: 'id',
    table_name: 'table_name',
    row_id: 'row_id',
    previous_fields: 'previous_fields',
    new_fields: 'new_fields',
    created_by: 'created_by',
    created_at: 'created_at'
  };

  export type TableLogScalarFieldEnum = (typeof TableLogScalarFieldEnum)[keyof typeof TableLogScalarFieldEnum]


  export const SortOrder: {
    asc: 'asc',
    desc: 'desc'
  };

  export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]


  export const NullableJsonNullValueInput: {
    DbNull: typeof DbNull,
    JsonNull: typeof JsonNull
  };

  export type NullableJsonNullValueInput = (typeof NullableJsonNullValueInput)[keyof typeof NullableJsonNullValueInput]


  export const JsonNullValueInput: {
    JsonNull: typeof JsonNull
  };

  export type JsonNullValueInput = (typeof JsonNullValueInput)[keyof typeof JsonNullValueInput]


  export const NullsOrder: {
    first: 'first',
    last: 'last'
  };

  export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]


  export const SessionOrderByRelevanceFieldEnum: {
    id: 'id',
    ip_address: 'ip_address',
    user_agent: 'user_agent',
    payload: 'payload'
  };

  export type SessionOrderByRelevanceFieldEnum = (typeof SessionOrderByRelevanceFieldEnum)[keyof typeof SessionOrderByRelevanceFieldEnum]


  export const SchoolOrderByRelevanceFieldEnum: {
    uuid: 'uuid',
    school_name: 'school_name',
    profile_photo_path: 'profile_photo_path',
    aboutus: 'aboutus',
    mission: 'mission',
    vision: 'vision',
    idcard_bg_color: 'idcard_bg_color',
    idcard_design_color: 'idcard_design_color',
    idcard_text_color: 'idcard_text_color',
    idcard_tnc1: 'idcard_tnc1',
    idcard_tnc2: 'idcard_tnc2',
    school_blocked_reason: 'school_blocked_reason'
  };

  export type SchoolOrderByRelevanceFieldEnum = (typeof SchoolOrderByRelevanceFieldEnum)[keyof typeof SchoolOrderByRelevanceFieldEnum]


  export const BranchOrderByRelevanceFieldEnum: {
    branch_name: 'branch_name',
    branch_phone: 'branch_phone',
    branch_email: 'branch_email',
    branch_address: 'branch_address',
    branch_blocked_reason: 'branch_blocked_reason'
  };

  export type BranchOrderByRelevanceFieldEnum = (typeof BranchOrderByRelevanceFieldEnum)[keyof typeof BranchOrderByRelevanceFieldEnum]


  export const BranchLevelOrderByRelevanceFieldEnum: {
    level_name: 'level_name'
  };

  export type BranchLevelOrderByRelevanceFieldEnum = (typeof BranchLevelOrderByRelevanceFieldEnum)[keyof typeof BranchLevelOrderByRelevanceFieldEnum]


  export const ClassTemplateOrderByRelevanceFieldEnum: {
    class_name: 'class_name'
  };

  export type ClassTemplateOrderByRelevanceFieldEnum = (typeof ClassTemplateOrderByRelevanceFieldEnum)[keyof typeof ClassTemplateOrderByRelevanceFieldEnum]


  export const SubjectSetupOrderByRelevanceFieldEnum: {
    subject_name: 'subject_name'
  };

  export type SubjectSetupOrderByRelevanceFieldEnum = (typeof SubjectSetupOrderByRelevanceFieldEnum)[keyof typeof SubjectSetupOrderByRelevanceFieldEnum]


  export const JsonNullValueFilter: {
    DbNull: typeof DbNull,
    JsonNull: typeof JsonNull,
    AnyNull: typeof AnyNull
  };

  export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter]


  export const QueryMode: {
    default: 'default',
    insensitive: 'insensitive'
  };

  export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]


  export const SchoolSubjectOrderByRelevanceFieldEnum: {
    subject_name: 'subject_name'
  };

  export type SchoolSubjectOrderByRelevanceFieldEnum = (typeof SchoolSubjectOrderByRelevanceFieldEnum)[keyof typeof SchoolSubjectOrderByRelevanceFieldEnum]


  export const BranchSessionOrderByRelevanceFieldEnum: {
    session_name: 'session_name'
  };

  export type BranchSessionOrderByRelevanceFieldEnum = (typeof BranchSessionOrderByRelevanceFieldEnum)[keyof typeof BranchSessionOrderByRelevanceFieldEnum]


  export const MultimediaGroupOrderByRelevanceFieldEnum: {
    multimedia_group_name: 'multimedia_group_name',
    multimedia_group_desc: 'multimedia_group_desc'
  };

  export type MultimediaGroupOrderByRelevanceFieldEnum = (typeof MultimediaGroupOrderByRelevanceFieldEnum)[keyof typeof MultimediaGroupOrderByRelevanceFieldEnum]


  export const MultimediaOrderByRelevanceFieldEnum: {
    multimedia_name: 'multimedia_name',
    multimedia_desc: 'multimedia_desc',
    multimedia_path: 'multimedia_path'
  };

  export type MultimediaOrderByRelevanceFieldEnum = (typeof MultimediaOrderByRelevanceFieldEnum)[keyof typeof MultimediaOrderByRelevanceFieldEnum]


  export const LibraryBookOrderByRelevanceFieldEnum: {
    book_name: 'book_name',
    book_desc: 'book_desc',
    book_author_name: 'book_author_name',
    book_cover: 'book_cover',
    book_path: 'book_path'
  };

  export type LibraryBookOrderByRelevanceFieldEnum = (typeof LibraryBookOrderByRelevanceFieldEnum)[keyof typeof LibraryBookOrderByRelevanceFieldEnum]


  export const IdCardOrderByRelevanceFieldEnum: {
    id_card_no: 'id_card_no'
  };

  export type IdCardOrderByRelevanceFieldEnum = (typeof IdCardOrderByRelevanceFieldEnum)[keyof typeof IdCardOrderByRelevanceFieldEnum]


  export const LibraryCardOrderByRelevanceFieldEnum: {
    library_card_no: 'library_card_no'
  };

  export type LibraryCardOrderByRelevanceFieldEnum = (typeof LibraryCardOrderByRelevanceFieldEnum)[keyof typeof LibraryCardOrderByRelevanceFieldEnum]


  export const ResultSerialNumbersOrderByRelevanceFieldEnum: {
    serial_no: 'serial_no'
  };

  export type ResultSerialNumbersOrderByRelevanceFieldEnum = (typeof ResultSerialNumbersOrderByRelevanceFieldEnum)[keyof typeof ResultSerialNumbersOrderByRelevanceFieldEnum]


  export const SessionTermOrderByRelevanceFieldEnum: {
    session_term_name: 'session_term_name'
  };

  export type SessionTermOrderByRelevanceFieldEnum = (typeof SessionTermOrderByRelevanceFieldEnum)[keyof typeof SessionTermOrderByRelevanceFieldEnum]


  export const AllUserOrderByRelevanceFieldEnum: {
    model: 'model'
  };

  export type AllUserOrderByRelevanceFieldEnum = (typeof AllUserOrderByRelevanceFieldEnum)[keyof typeof AllUserOrderByRelevanceFieldEnum]


  export const UserOrderByRelevanceFieldEnum: {
    uuid: 'uuid',
    user_name: 'user_name',
    user_phone: 'user_phone',
    email: 'email',
    user_address: 'user_address',
    user_proffession: 'user_proffession',
    profile_photo_path: 'profile_photo_path',
    breif_bio: 'breif_bio',
    facebook_handle: 'facebook_handle',
    twitter_handle: 'twitter_handle',
    instagram_handle: 'instagram_handle',
    username: 'username',
    password: 'password',
    remember_token: 'remember_token',
    role: 'role',
    user_type: 'user_type',
    user_blocked_reason: 'user_blocked_reason'
  };

  export type UserOrderByRelevanceFieldEnum = (typeof UserOrderByRelevanceFieldEnum)[keyof typeof UserOrderByRelevanceFieldEnum]


  export const StudentOrderByRelevanceFieldEnum: {
    uuid: 'uuid',
    first_name: 'first_name',
    middle_name: 'middle_name',
    last_name: 'last_name',
    email: 'email',
    student_phone: 'student_phone',
    student_address: 'student_address',
    student_bio: 'student_bio',
    profile_photo_path: 'profile_photo_path',
    username: 'username',
    password: 'password',
    student_blocked_reason: 'student_blocked_reason',
    role: 'role',
    user_type: 'user_type'
  };

  export type StudentOrderByRelevanceFieldEnum = (typeof StudentOrderByRelevanceFieldEnum)[keyof typeof StudentOrderByRelevanceFieldEnum]


  export const GuardianOrderByRelevanceFieldEnum: {
    uuid: 'uuid',
    surname: 'surname',
    first_name: 'first_name',
    relation_how_related: 'relation_how_related',
    guardian_proffession: 'guardian_proffession',
    phonenumber: 'phonenumber',
    email: 'email',
    role: 'role',
    user_type: 'user_type',
    password: 'password',
    guardian_blocked_reason: 'guardian_blocked_reason'
  };

  export type GuardianOrderByRelevanceFieldEnum = (typeof GuardianOrderByRelevanceFieldEnum)[keyof typeof GuardianOrderByRelevanceFieldEnum]


  export const PermissionOrderByRelevanceFieldEnum: {
    name: 'name',
    display_name: 'display_name',
    description: 'description'
  };

  export type PermissionOrderByRelevanceFieldEnum = (typeof PermissionOrderByRelevanceFieldEnum)[keyof typeof PermissionOrderByRelevanceFieldEnum]


  export const RoleOrderByRelevanceFieldEnum: {
    name: 'name',
    display_name: 'display_name',
    description: 'description'
  };

  export type RoleOrderByRelevanceFieldEnum = (typeof RoleOrderByRelevanceFieldEnum)[keyof typeof RoleOrderByRelevanceFieldEnum]


  export const UserCrudPermissionOrderByRelevanceFieldEnum: {
    user_type: 'user_type'
  };

  export type UserCrudPermissionOrderByRelevanceFieldEnum = (typeof UserCrudPermissionOrderByRelevanceFieldEnum)[keyof typeof UserCrudPermissionOrderByRelevanceFieldEnum]


  export const UserPermissionOrderByRelevanceFieldEnum: {
    user_type: 'user_type'
  };

  export type UserPermissionOrderByRelevanceFieldEnum = (typeof UserPermissionOrderByRelevanceFieldEnum)[keyof typeof UserPermissionOrderByRelevanceFieldEnum]


  export const UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum: {
    user_type: 'user_type'
  };

  export type UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum = (typeof UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum)[keyof typeof UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum]


  export const UsertypeMaxPermissionOrderByRelevanceFieldEnum: {
    user_type: 'user_type'
  };

  export type UsertypeMaxPermissionOrderByRelevanceFieldEnum = (typeof UsertypeMaxPermissionOrderByRelevanceFieldEnum)[keyof typeof UsertypeMaxPermissionOrderByRelevanceFieldEnum]


  export const QualificationOrderByRelevanceFieldEnum: {
    qualification_name: 'qualification_name'
  };

  export type QualificationOrderByRelevanceFieldEnum = (typeof QualificationOrderByRelevanceFieldEnum)[keyof typeof QualificationOrderByRelevanceFieldEnum]


  export const GenderOrderByRelevanceFieldEnum: {
    gender_name: 'gender_name'
  };

  export type GenderOrderByRelevanceFieldEnum = (typeof GenderOrderByRelevanceFieldEnum)[keyof typeof GenderOrderByRelevanceFieldEnum]


  export const TermOrderByRelevanceFieldEnum: {
    term_name: 'term_name',
    term_alias: 'term_alias'
  };

  export type TermOrderByRelevanceFieldEnum = (typeof TermOrderByRelevanceFieldEnum)[keyof typeof TermOrderByRelevanceFieldEnum]


  export const ReligionOrderByRelevanceFieldEnum: {
    religion_name: 'religion_name'
  };

  export type ReligionOrderByRelevanceFieldEnum = (typeof ReligionOrderByRelevanceFieldEnum)[keyof typeof ReligionOrderByRelevanceFieldEnum]


  export const ComplainFromTeacherOrderByRelevanceFieldEnum: {
    complain: 'complain'
  };

  export type ComplainFromTeacherOrderByRelevanceFieldEnum = (typeof ComplainFromTeacherOrderByRelevanceFieldEnum)[keyof typeof ComplainFromTeacherOrderByRelevanceFieldEnum]


  export const SchoolNoteOrderByRelevanceFieldEnum: {
    topic: 'topic',
    topic_desc: 'topic_desc',
    note: 'note'
  };

  export type SchoolNoteOrderByRelevanceFieldEnum = (typeof SchoolNoteOrderByRelevanceFieldEnum)[keyof typeof SchoolNoteOrderByRelevanceFieldEnum]


  export const FeeOrderByRelevanceFieldEnum: {
    fee_name: 'fee_name',
    desc: 'desc'
  };

  export type FeeOrderByRelevanceFieldEnum = (typeof FeeOrderByRelevanceFieldEnum)[keyof typeof FeeOrderByRelevanceFieldEnum]


  export const PaymentTypeOrderByRelevanceFieldEnum: {
    payment_type_name: 'payment_type_name',
    desc: 'desc'
  };

  export type PaymentTypeOrderByRelevanceFieldEnum = (typeof PaymentTypeOrderByRelevanceFieldEnum)[keyof typeof PaymentTypeOrderByRelevanceFieldEnum]


  export const PaymentDurationOrderByRelevanceFieldEnum: {
    duration: 'duration',
    desc: 'desc'
  };

  export type PaymentDurationOrderByRelevanceFieldEnum = (typeof PaymentDurationOrderByRelevanceFieldEnum)[keyof typeof PaymentDurationOrderByRelevanceFieldEnum]


  export const PaymentOrderByRelevanceFieldEnum: {
    who_would_pay: 'who_would_pay'
  };

  export type PaymentOrderByRelevanceFieldEnum = (typeof PaymentOrderByRelevanceFieldEnum)[keyof typeof PaymentOrderByRelevanceFieldEnum]


  export const PaymentMadeOrderByRelevanceFieldEnum: {
    payer_model: 'payer_model',
    payer_phonenumber: 'payer_phonenumber',
    payer_name: 'payer_name'
  };

  export type PaymentMadeOrderByRelevanceFieldEnum = (typeof PaymentMadeOrderByRelevanceFieldEnum)[keyof typeof PaymentMadeOrderByRelevanceFieldEnum]


  export const PaymentPartMadeOrderByRelevanceFieldEnum: {
    payer_model: 'payer_model',
    payer_phonenumber: 'payer_phonenumber',
    payer_name: 'payer_name'
  };

  export type PaymentPartMadeOrderByRelevanceFieldEnum = (typeof PaymentPartMadeOrderByRelevanceFieldEnum)[keyof typeof PaymentPartMadeOrderByRelevanceFieldEnum]


  export const PaymentAttemptOrderByRelevanceFieldEnum: {
    ref_code: 'ref_code',
    access_code: 'access_code',
    payer_model: 'payer_model'
  };

  export type PaymentAttemptOrderByRelevanceFieldEnum = (typeof PaymentAttemptOrderByRelevanceFieldEnum)[keyof typeof PaymentAttemptOrderByRelevanceFieldEnum]


  export const SessionClassOrderByRelevanceFieldEnum: {
    session_class_name: 'session_class_name'
  };

  export type SessionClassOrderByRelevanceFieldEnum = (typeof SessionClassOrderByRelevanceFieldEnum)[keyof typeof SessionClassOrderByRelevanceFieldEnum]


  export const ClassSpecializationOrderByRelevanceFieldEnum: {
    specialization_name: 'specialization_name'
  };

  export type ClassSpecializationOrderByRelevanceFieldEnum = (typeof ClassSpecializationOrderByRelevanceFieldEnum)[keyof typeof ClassSpecializationOrderByRelevanceFieldEnum]


  export const ClassGroupOrderByRelevanceFieldEnum: {
    group_name: 'group_name'
  };

  export type ClassGroupOrderByRelevanceFieldEnum = (typeof ClassGroupOrderByRelevanceFieldEnum)[keyof typeof ClassGroupOrderByRelevanceFieldEnum]


  export const ScoreTypeOrderByRelevanceFieldEnum: {
    score_type: 'score_type'
  };

  export type ScoreTypeOrderByRelevanceFieldEnum = (typeof ScoreTypeOrderByRelevanceFieldEnum)[keyof typeof ScoreTypeOrderByRelevanceFieldEnum]


  export const ScoreDisplayTypeOrderByRelevanceFieldEnum: {
    display_type: 'display_type'
  };

  export type ScoreDisplayTypeOrderByRelevanceFieldEnum = (typeof ScoreDisplayTypeOrderByRelevanceFieldEnum)[keyof typeof ScoreDisplayTypeOrderByRelevanceFieldEnum]


  export const StudentTotalScoreOrderByRelevanceFieldEnum: {
    teachers_comment: 'teachers_comment'
  };

  export type StudentTotalScoreOrderByRelevanceFieldEnum = (typeof StudentTotalScoreOrderByRelevanceFieldEnum)[keyof typeof StudentTotalScoreOrderByRelevanceFieldEnum]


  export const ClassScoreSetupTemplateOrderByRelevanceFieldEnum: {
    display_name: 'display_name'
  };

  export type ClassScoreSetupTemplateOrderByRelevanceFieldEnum = (typeof ClassScoreSetupTemplateOrderByRelevanceFieldEnum)[keyof typeof ClassScoreSetupTemplateOrderByRelevanceFieldEnum]


  export const SessionClassScoreSetupOrderByRelevanceFieldEnum: {
    display_name: 'display_name'
  };

  export type SessionClassScoreSetupOrderByRelevanceFieldEnum = (typeof SessionClassScoreSetupOrderByRelevanceFieldEnum)[keyof typeof SessionClassScoreSetupOrderByRelevanceFieldEnum]


  export const ExamTypeOrderByRelevanceFieldEnum: {
    exam_type_name: 'exam_type_name',
    desc: 'desc'
  };

  export type ExamTypeOrderByRelevanceFieldEnum = (typeof ExamTypeOrderByRelevanceFieldEnum)[keyof typeof ExamTypeOrderByRelevanceFieldEnum]


  export const ExamCategoryOrderByRelevanceFieldEnum: {
    exam_category_name: 'exam_category_name',
    desc: 'desc'
  };

  export type ExamCategoryOrderByRelevanceFieldEnum = (typeof ExamCategoryOrderByRelevanceFieldEnum)[keyof typeof ExamCategoryOrderByRelevanceFieldEnum]


  export const ExamQuestionMarkerOrderByRelevanceFieldEnum: {
    question_marker_name: 'question_marker_name',
    desc: 'desc'
  };

  export type ExamQuestionMarkerOrderByRelevanceFieldEnum = (typeof ExamQuestionMarkerOrderByRelevanceFieldEnum)[keyof typeof ExamQuestionMarkerOrderByRelevanceFieldEnum]


  export const QuestionTemplateOrderByRelevanceFieldEnum: {
    question: 'question',
    image_path: 'image_path',
    option_a: 'option_a',
    option_b: 'option_b',
    option_c: 'option_c',
    option_d: 'option_d',
    option_answer: 'option_answer',
    theory_answer: 'theory_answer',
    difficulty_level: 'difficulty_level'
  };

  export type QuestionTemplateOrderByRelevanceFieldEnum = (typeof QuestionTemplateOrderByRelevanceFieldEnum)[keyof typeof QuestionTemplateOrderByRelevanceFieldEnum]


  export const QuestionOrderByRelevanceFieldEnum: {
    question: 'question',
    image_path: 'image_path',
    option_a: 'option_a',
    option_b: 'option_b',
    option_c: 'option_c',
    option_d: 'option_d',
    option_answer: 'option_answer',
    theory_answer: 'theory_answer',
    difficulty_level: 'difficulty_level'
  };

  export type QuestionOrderByRelevanceFieldEnum = (typeof QuestionOrderByRelevanceFieldEnum)[keyof typeof QuestionOrderByRelevanceFieldEnum]


  export const ExamVisibilityOrderByRelevanceFieldEnum: {
    exam_visibility_name: 'exam_visibility_name',
    desc: 'desc'
  };

  export type ExamVisibilityOrderByRelevanceFieldEnum = (typeof ExamVisibilityOrderByRelevanceFieldEnum)[keyof typeof ExamVisibilityOrderByRelevanceFieldEnum]


  export const ExamOrderByRelevanceFieldEnum: {
    desc: 'desc'
  };

  export type ExamOrderByRelevanceFieldEnum = (typeof ExamOrderByRelevanceFieldEnum)[keyof typeof ExamOrderByRelevanceFieldEnum]


  export const ExamAttemptOrderByRelevanceFieldEnum: {
    model_name: 'model_name'
  };

  export type ExamAttemptOrderByRelevanceFieldEnum = (typeof ExamAttemptOrderByRelevanceFieldEnum)[keyof typeof ExamAttemptOrderByRelevanceFieldEnum]


  export const ExamQuestionAnswerOrderByRelevanceFieldEnum: {
    model_name: 'model_name',
    user_objective_answer: 'user_objective_answer',
    user_theory_answer: 'user_theory_answer'
  };

  export type ExamQuestionAnswerOrderByRelevanceFieldEnum = (typeof ExamQuestionAnswerOrderByRelevanceFieldEnum)[keyof typeof ExamQuestionAnswerOrderByRelevanceFieldEnum]


  export const SchoolRecordOrderByRelevanceFieldEnum: {
    school_name: 'school_name',
    school_databasename: 'school_databasename'
  };

  export type SchoolRecordOrderByRelevanceFieldEnum = (typeof SchoolRecordOrderByRelevanceFieldEnum)[keyof typeof SchoolRecordOrderByRelevanceFieldEnum]


  export const ComponentGroupOrderByRelevanceFieldEnum: {
    component_group_name: 'component_group_name'
  };

  export type ComponentGroupOrderByRelevanceFieldEnum = (typeof ComponentGroupOrderByRelevanceFieldEnum)[keyof typeof ComponentGroupOrderByRelevanceFieldEnum]


  export const ComponentOrderByRelevanceFieldEnum: {
    component_name: 'component_name',
    component_displayname: 'component_displayname',
    component_desc: 'component_desc',
    component_image_url: 'component_image_url',
    component_file_name: 'component_file_name'
  };

  export type ComponentOrderByRelevanceFieldEnum = (typeof ComponentOrderByRelevanceFieldEnum)[keyof typeof ComponentOrderByRelevanceFieldEnum]


  export const CrudPageOrderByRelevanceFieldEnum: {
    name: 'name'
  };

  export type CrudPageOrderByRelevanceFieldEnum = (typeof CrudPageOrderByRelevanceFieldEnum)[keyof typeof CrudPageOrderByRelevanceFieldEnum]


  export const AppUserTypeOrderByRelevanceFieldEnum: {
    app_user_type: 'app_user_type'
  };

  export type AppUserTypeOrderByRelevanceFieldEnum = (typeof AppUserTypeOrderByRelevanceFieldEnum)[keyof typeof AppUserTypeOrderByRelevanceFieldEnum]


  export const MenuGroupOrderByRelevanceFieldEnum: {
    menu_group_name: 'menu_group_name',
    menu_group_icon: 'menu_group_icon'
  };

  export type MenuGroupOrderByRelevanceFieldEnum = (typeof MenuGroupOrderByRelevanceFieldEnum)[keyof typeof MenuGroupOrderByRelevanceFieldEnum]


  export const SystemConfigurationOrderByRelevanceFieldEnum: {
    configuration_name: 'configuration_name'
  };

  export type SystemConfigurationOrderByRelevanceFieldEnum = (typeof SystemConfigurationOrderByRelevanceFieldEnum)[keyof typeof SystemConfigurationOrderByRelevanceFieldEnum]


  export const CrudFrontOrderByRelevanceFieldEnum: {
    name: 'name',
    permission_name: 'permission_name',
    handler_name: 'handler_name',
    post_route: 'post_route',
    read_route: 'read_route',
    update_route: 'update_route',
    delete_route: 'delete_route',
    menu_name: 'menu_name',
    menu_icon: 'menu_icon',
    menu_group: 'menu_group'
  };

  export type CrudFrontOrderByRelevanceFieldEnum = (typeof CrudFrontOrderByRelevanceFieldEnum)[keyof typeof CrudFrontOrderByRelevanceFieldEnum]


  export const CrudUtilOrderByRelevanceFieldEnum: {
    name: 'name',
    menu_name: 'menu_name',
    menu_icon: 'menu_icon',
    menu_group: 'menu_group',
    permission_name: 'permission_name',
    menu_sort: 'menu_sort',
    primary_key: 'primary_key',
    show_field: 'show_field',
    permission_for_all: 'permission_for_all',
    table_name: 'table_name',
    model_name: 'model_name',
    fetch_all_path: 'fetch_all_path',
    fetch_path: 'fetch_path',
    create_path: 'create_path',
    update_path: 'update_path',
    delete_path: 'delete_path',
    query_parameter: 'query_parameter',
    custom_form_name: 'custom_form_name'
  };

  export type CrudUtilOrderByRelevanceFieldEnum = (typeof CrudUtilOrderByRelevanceFieldEnum)[keyof typeof CrudUtilOrderByRelevanceFieldEnum]


  export const RegionOrderByRelevanceFieldEnum: {
    name: 'name',
    wikiDataId: 'wikiDataId'
  };

  export type RegionOrderByRelevanceFieldEnum = (typeof RegionOrderByRelevanceFieldEnum)[keyof typeof RegionOrderByRelevanceFieldEnum]


  export const SubregionOrderByRelevanceFieldEnum: {
    name: 'name',
    wikiDataId: 'wikiDataId'
  };

  export type SubregionOrderByRelevanceFieldEnum = (typeof SubregionOrderByRelevanceFieldEnum)[keyof typeof SubregionOrderByRelevanceFieldEnum]


  export const CountryOrderByRelevanceFieldEnum: {
    name: 'name',
    iso3: 'iso3',
    iso2: 'iso2',
    numeric_code: 'numeric_code',
    phonecode: 'phonecode',
    capital: 'capital',
    currency: 'currency',
    currency_name: 'currency_name',
    currency_symbol: 'currency_symbol',
    tld: 'tld',
    native_reserved: 'native_reserved',
    region: 'region',
    subregion: 'subregion',
    nationality: 'nationality',
    emoji: 'emoji',
    emojiU: 'emojiU',
    wikiDataId: 'wikiDataId'
  };

  export type CountryOrderByRelevanceFieldEnum = (typeof CountryOrderByRelevanceFieldEnum)[keyof typeof CountryOrderByRelevanceFieldEnum]


  export const StateOrderByRelevanceFieldEnum: {
    name: 'name',
    country_code: 'country_code',
    country_name: 'country_name',
    iso2: 'iso2',
    iso3166_2: 'iso3166_2',
    fips_code: 'fips_code',
    type: 'type',
    level: 'level',
    parent_id: 'parent_id',
    native_reserved: 'native_reserved',
    timezone: 'timezone',
    wikiDataId: 'wikiDataId',
    state_code: 'state_code'
  };

  export type StateOrderByRelevanceFieldEnum = (typeof StateOrderByRelevanceFieldEnum)[keyof typeof StateOrderByRelevanceFieldEnum]


  export const CityOrderByRelevanceFieldEnum: {
    name: 'name',
    state_code: 'state_code',
    state_name: 'state_name',
    country_code: 'country_code',
    country_name: 'country_name',
    timezone: 'timezone',
    wikiDataId: 'wikiDataId'
  };

  export type CityOrderByRelevanceFieldEnum = (typeof CityOrderByRelevanceFieldEnum)[keyof typeof CityOrderByRelevanceFieldEnum]


  export const TableLogOrderByRelevanceFieldEnum: {
    table_name: 'table_name'
  };

  export type TableLogOrderByRelevanceFieldEnum = (typeof TableLogOrderByRelevanceFieldEnum)[keyof typeof TableLogOrderByRelevanceFieldEnum]


  /**
   * Field references
   */


  /**
   * Reference to a field of type 'String'
   */
  export type StringFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'String'>
    


  /**
   * Reference to a field of type 'Int'
   */
  export type IntFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Int'>
    


  /**
   * Reference to a field of type 'DateTime'
   */
  export type DateTimeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'DateTime'>
    


  /**
   * Reference to a field of type 'Json'
   */
  export type JsonFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Json'>
    


  /**
   * Reference to a field of type 'QueryMode'
   */
  export type EnumQueryModeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'QueryMode'>
    


  /**
   * Reference to a field of type 'book_type'
   */
  export type Enumbook_typeFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'book_type'>
    


  /**
   * Reference to a field of type 'Decimal'
   */
  export type DecimalFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Decimal'>
    


  /**
   * Reference to a field of type 'users_staff_dept'
   */
  export type Enumusers_staff_deptFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'users_staff_dept'>
    


  /**
   * Reference to a field of type 'Float'
   */
  export type FloatFieldRefInput<$PrismaModel> = FieldRefInputType<$PrismaModel, 'Float'>
    
  /**
   * Deep Input Types
   */


  export type SessionWhereInput = {
    AND?: SessionWhereInput | SessionWhereInput[]
    OR?: SessionWhereInput[]
    NOT?: SessionWhereInput | SessionWhereInput[]
    id?: StringFilter<"Session"> | string
    user_id?: IntNullableFilter<"Session"> | number | null
    ip_address?: StringNullableFilter<"Session"> | string | null
    user_agent?: StringNullableFilter<"Session"> | string | null
    payload?: StringFilter<"Session"> | string
    last_activity?: IntFilter<"Session"> | number
  }

  export type SessionOrderByWithRelationInput = {
    id?: SortOrder
    user_id?: SortOrderInput | SortOrder
    ip_address?: SortOrderInput | SortOrder
    user_agent?: SortOrderInput | SortOrder
    payload?: SortOrder
    last_activity?: SortOrder
    _relevance?: SessionOrderByRelevanceInput
  }

  export type SessionWhereUniqueInput = Prisma.AtLeast<{
    id?: string
    AND?: SessionWhereInput | SessionWhereInput[]
    OR?: SessionWhereInput[]
    NOT?: SessionWhereInput | SessionWhereInput[]
    user_id?: IntNullableFilter<"Session"> | number | null
    ip_address?: StringNullableFilter<"Session"> | string | null
    user_agent?: StringNullableFilter<"Session"> | string | null
    payload?: StringFilter<"Session"> | string
    last_activity?: IntFilter<"Session"> | number
  }, "id">

  export type SessionOrderByWithAggregationInput = {
    id?: SortOrder
    user_id?: SortOrderInput | SortOrder
    ip_address?: SortOrderInput | SortOrder
    user_agent?: SortOrderInput | SortOrder
    payload?: SortOrder
    last_activity?: SortOrder
    _count?: SessionCountOrderByAggregateInput
    _avg?: SessionAvgOrderByAggregateInput
    _max?: SessionMaxOrderByAggregateInput
    _min?: SessionMinOrderByAggregateInput
    _sum?: SessionSumOrderByAggregateInput
  }

  export type SessionScalarWhereWithAggregatesInput = {
    AND?: SessionScalarWhereWithAggregatesInput | SessionScalarWhereWithAggregatesInput[]
    OR?: SessionScalarWhereWithAggregatesInput[]
    NOT?: SessionScalarWhereWithAggregatesInput | SessionScalarWhereWithAggregatesInput[]
    id?: StringWithAggregatesFilter<"Session"> | string
    user_id?: IntNullableWithAggregatesFilter<"Session"> | number | null
    ip_address?: StringNullableWithAggregatesFilter<"Session"> | string | null
    user_agent?: StringNullableWithAggregatesFilter<"Session"> | string | null
    payload?: StringWithAggregatesFilter<"Session"> | string
    last_activity?: IntWithAggregatesFilter<"Session"> | number
  }

  export type SchoolWhereInput = {
    AND?: SchoolWhereInput | SchoolWhereInput[]
    OR?: SchoolWhereInput[]
    NOT?: SchoolWhereInput | SchoolWhereInput[]
    id?: IntFilter<"School"> | number
    uuid?: StringFilter<"School"> | string
    school_name?: StringFilter<"School"> | string
    school_approved?: IntFilter<"School"> | number
    school_active?: IntFilter<"School"> | number
    profile_photo_path?: StringNullableFilter<"School"> | string | null
    aboutus?: StringNullableFilter<"School"> | string | null
    mission?: StringNullableFilter<"School"> | string | null
    vision?: StringNullableFilter<"School"> | string | null
    idcard_bg_color?: StringNullableFilter<"School"> | string | null
    idcard_design_color?: StringNullableFilter<"School"> | string | null
    idcard_text_color?: StringNullableFilter<"School"> | string | null
    idcard_tnc1?: StringNullableFilter<"School"> | string | null
    idcard_tnc2?: StringNullableFilter<"School"> | string | null
    school_blocked_reason?: StringNullableFilter<"School"> | string | null
    created_by?: IntNullableFilter<"School"> | number | null
    created_at?: DateTimeFilter<"School"> | Date | string
    updated_at?: DateTimeNullableFilter<"School"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"School"> | Date | string | null
    users?: UserListRelationFilter
    branches?: BranchListRelationFilter
    students?: StudentListRelationFilter
    guardians?: GuardianListRelationFilter
  }

  export type SchoolOrderByWithRelationInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_name?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    aboutus?: SortOrderInput | SortOrder
    mission?: SortOrderInput | SortOrder
    vision?: SortOrderInput | SortOrder
    idcard_bg_color?: SortOrderInput | SortOrder
    idcard_design_color?: SortOrderInput | SortOrder
    idcard_text_color?: SortOrderInput | SortOrder
    idcard_tnc1?: SortOrderInput | SortOrder
    idcard_tnc2?: SortOrderInput | SortOrder
    school_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    users?: UserOrderByRelationAggregateInput
    branches?: BranchOrderByRelationAggregateInput
    students?: StudentOrderByRelationAggregateInput
    guardians?: GuardianOrderByRelationAggregateInput
    _relevance?: SchoolOrderByRelevanceInput
  }

  export type SchoolWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    uuid?: string
    AND?: SchoolWhereInput | SchoolWhereInput[]
    OR?: SchoolWhereInput[]
    NOT?: SchoolWhereInput | SchoolWhereInput[]
    school_name?: StringFilter<"School"> | string
    school_approved?: IntFilter<"School"> | number
    school_active?: IntFilter<"School"> | number
    profile_photo_path?: StringNullableFilter<"School"> | string | null
    aboutus?: StringNullableFilter<"School"> | string | null
    mission?: StringNullableFilter<"School"> | string | null
    vision?: StringNullableFilter<"School"> | string | null
    idcard_bg_color?: StringNullableFilter<"School"> | string | null
    idcard_design_color?: StringNullableFilter<"School"> | string | null
    idcard_text_color?: StringNullableFilter<"School"> | string | null
    idcard_tnc1?: StringNullableFilter<"School"> | string | null
    idcard_tnc2?: StringNullableFilter<"School"> | string | null
    school_blocked_reason?: StringNullableFilter<"School"> | string | null
    created_by?: IntNullableFilter<"School"> | number | null
    created_at?: DateTimeFilter<"School"> | Date | string
    updated_at?: DateTimeNullableFilter<"School"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"School"> | Date | string | null
    users?: UserListRelationFilter
    branches?: BranchListRelationFilter
    students?: StudentListRelationFilter
    guardians?: GuardianListRelationFilter
  }, "id" | "uuid">

  export type SchoolOrderByWithAggregationInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_name?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    aboutus?: SortOrderInput | SortOrder
    mission?: SortOrderInput | SortOrder
    vision?: SortOrderInput | SortOrder
    idcard_bg_color?: SortOrderInput | SortOrder
    idcard_design_color?: SortOrderInput | SortOrder
    idcard_text_color?: SortOrderInput | SortOrder
    idcard_tnc1?: SortOrderInput | SortOrder
    idcard_tnc2?: SortOrderInput | SortOrder
    school_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SchoolCountOrderByAggregateInput
    _avg?: SchoolAvgOrderByAggregateInput
    _max?: SchoolMaxOrderByAggregateInput
    _min?: SchoolMinOrderByAggregateInput
    _sum?: SchoolSumOrderByAggregateInput
  }

  export type SchoolScalarWhereWithAggregatesInput = {
    AND?: SchoolScalarWhereWithAggregatesInput | SchoolScalarWhereWithAggregatesInput[]
    OR?: SchoolScalarWhereWithAggregatesInput[]
    NOT?: SchoolScalarWhereWithAggregatesInput | SchoolScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"School"> | number
    uuid?: StringWithAggregatesFilter<"School"> | string
    school_name?: StringWithAggregatesFilter<"School"> | string
    school_approved?: IntWithAggregatesFilter<"School"> | number
    school_active?: IntWithAggregatesFilter<"School"> | number
    profile_photo_path?: StringNullableWithAggregatesFilter<"School"> | string | null
    aboutus?: StringNullableWithAggregatesFilter<"School"> | string | null
    mission?: StringNullableWithAggregatesFilter<"School"> | string | null
    vision?: StringNullableWithAggregatesFilter<"School"> | string | null
    idcard_bg_color?: StringNullableWithAggregatesFilter<"School"> | string | null
    idcard_design_color?: StringNullableWithAggregatesFilter<"School"> | string | null
    idcard_text_color?: StringNullableWithAggregatesFilter<"School"> | string | null
    idcard_tnc1?: StringNullableWithAggregatesFilter<"School"> | string | null
    idcard_tnc2?: StringNullableWithAggregatesFilter<"School"> | string | null
    school_blocked_reason?: StringNullableWithAggregatesFilter<"School"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"School"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"School"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"School"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"School"> | Date | string | null
  }

  export type BranchWhereInput = {
    AND?: BranchWhereInput | BranchWhereInput[]
    OR?: BranchWhereInput[]
    NOT?: BranchWhereInput | BranchWhereInput[]
    id?: IntFilter<"Branch"> | number
    school_id?: IntFilter<"Branch"> | number
    branch_country_id?: IntNullableFilter<"Branch"> | number | null
    branch_state_id?: IntNullableFilter<"Branch"> | number | null
    branch_name?: StringFilter<"Branch"> | string
    branch_phone?: StringFilter<"Branch"> | string
    branch_email?: StringNullableFilter<"Branch"> | string | null
    branch_address?: StringFilter<"Branch"> | string
    branch_state?: IntNullableFilter<"Branch"> | number | null
    branch_active?: IntFilter<"Branch"> | number
    branch_main?: IntFilter<"Branch"> | number
    prevent_users_to_login?: IntFilter<"Branch"> | number
    branch_blocked_reason?: StringNullableFilter<"Branch"> | string | null
    created_by?: IntNullableFilter<"Branch"> | number | null
    created_at?: DateTimeFilter<"Branch"> | Date | string
    updated_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
    school?: XOR<SchoolScalarRelationFilter, SchoolWhereInput>
    branchLevels?: BranchLevelListRelationFilter
    students?: StudentListRelationFilter
    users?: UserListRelationFilter
    multimedia?: MultimediaListRelationFilter
    librarybooks?: LibraryBookListRelationFilter
    guardians?: GuardianListRelationFilter
  }

  export type BranchOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrderInput | SortOrder
    branch_state_id?: SortOrderInput | SortOrder
    branch_name?: SortOrder
    branch_phone?: SortOrder
    branch_email?: SortOrderInput | SortOrder
    branch_address?: SortOrder
    branch_state?: SortOrderInput | SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    branch_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    school?: SchoolOrderByWithRelationInput
    branchLevels?: BranchLevelOrderByRelationAggregateInput
    students?: StudentOrderByRelationAggregateInput
    users?: UserOrderByRelationAggregateInput
    multimedia?: MultimediaOrderByRelationAggregateInput
    librarybooks?: LibraryBookOrderByRelationAggregateInput
    guardians?: GuardianOrderByRelationAggregateInput
    _relevance?: BranchOrderByRelevanceInput
  }

  export type BranchWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: BranchWhereInput | BranchWhereInput[]
    OR?: BranchWhereInput[]
    NOT?: BranchWhereInput | BranchWhereInput[]
    school_id?: IntFilter<"Branch"> | number
    branch_country_id?: IntNullableFilter<"Branch"> | number | null
    branch_state_id?: IntNullableFilter<"Branch"> | number | null
    branch_name?: StringFilter<"Branch"> | string
    branch_phone?: StringFilter<"Branch"> | string
    branch_email?: StringNullableFilter<"Branch"> | string | null
    branch_address?: StringFilter<"Branch"> | string
    branch_state?: IntNullableFilter<"Branch"> | number | null
    branch_active?: IntFilter<"Branch"> | number
    branch_main?: IntFilter<"Branch"> | number
    prevent_users_to_login?: IntFilter<"Branch"> | number
    branch_blocked_reason?: StringNullableFilter<"Branch"> | string | null
    created_by?: IntNullableFilter<"Branch"> | number | null
    created_at?: DateTimeFilter<"Branch"> | Date | string
    updated_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
    school?: XOR<SchoolScalarRelationFilter, SchoolWhereInput>
    branchLevels?: BranchLevelListRelationFilter
    students?: StudentListRelationFilter
    users?: UserListRelationFilter
    multimedia?: MultimediaListRelationFilter
    librarybooks?: LibraryBookListRelationFilter
    guardians?: GuardianListRelationFilter
  }, "id">

  export type BranchOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrderInput | SortOrder
    branch_state_id?: SortOrderInput | SortOrder
    branch_name?: SortOrder
    branch_phone?: SortOrder
    branch_email?: SortOrderInput | SortOrder
    branch_address?: SortOrder
    branch_state?: SortOrderInput | SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    branch_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: BranchCountOrderByAggregateInput
    _avg?: BranchAvgOrderByAggregateInput
    _max?: BranchMaxOrderByAggregateInput
    _min?: BranchMinOrderByAggregateInput
    _sum?: BranchSumOrderByAggregateInput
  }

  export type BranchScalarWhereWithAggregatesInput = {
    AND?: BranchScalarWhereWithAggregatesInput | BranchScalarWhereWithAggregatesInput[]
    OR?: BranchScalarWhereWithAggregatesInput[]
    NOT?: BranchScalarWhereWithAggregatesInput | BranchScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Branch"> | number
    school_id?: IntWithAggregatesFilter<"Branch"> | number
    branch_country_id?: IntNullableWithAggregatesFilter<"Branch"> | number | null
    branch_state_id?: IntNullableWithAggregatesFilter<"Branch"> | number | null
    branch_name?: StringWithAggregatesFilter<"Branch"> | string
    branch_phone?: StringWithAggregatesFilter<"Branch"> | string
    branch_email?: StringNullableWithAggregatesFilter<"Branch"> | string | null
    branch_address?: StringWithAggregatesFilter<"Branch"> | string
    branch_state?: IntNullableWithAggregatesFilter<"Branch"> | number | null
    branch_active?: IntWithAggregatesFilter<"Branch"> | number
    branch_main?: IntWithAggregatesFilter<"Branch"> | number
    prevent_users_to_login?: IntWithAggregatesFilter<"Branch"> | number
    branch_blocked_reason?: StringNullableWithAggregatesFilter<"Branch"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"Branch"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Branch"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Branch"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Branch"> | Date | string | null
  }

  export type BranchLevelWhereInput = {
    AND?: BranchLevelWhereInput | BranchLevelWhereInput[]
    OR?: BranchLevelWhereInput[]
    NOT?: BranchLevelWhereInput | BranchLevelWhereInput[]
    id?: IntFilter<"BranchLevel"> | number
    branch_id?: IntFilter<"BranchLevel"> | number
    level_name?: StringFilter<"BranchLevel"> | string
    level_leader?: IntNullableFilter<"BranchLevel"> | number | null
    level_active?: IntFilter<"BranchLevel"> | number
    created_by?: IntNullableFilter<"BranchLevel"> | number | null
    created_at?: DateTimeFilter<"BranchLevel"> | Date | string
    updated_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
    branch?: XOR<BranchScalarRelationFilter, BranchWhereInput>
  }

  export type BranchLevelOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_name?: SortOrder
    level_leader?: SortOrderInput | SortOrder
    level_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    branch?: BranchOrderByWithRelationInput
    _relevance?: BranchLevelOrderByRelevanceInput
  }

  export type BranchLevelWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: BranchLevelWhereInput | BranchLevelWhereInput[]
    OR?: BranchLevelWhereInput[]
    NOT?: BranchLevelWhereInput | BranchLevelWhereInput[]
    branch_id?: IntFilter<"BranchLevel"> | number
    level_name?: StringFilter<"BranchLevel"> | string
    level_leader?: IntNullableFilter<"BranchLevel"> | number | null
    level_active?: IntFilter<"BranchLevel"> | number
    created_by?: IntNullableFilter<"BranchLevel"> | number | null
    created_at?: DateTimeFilter<"BranchLevel"> | Date | string
    updated_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
    branch?: XOR<BranchScalarRelationFilter, BranchWhereInput>
  }, "id">

  export type BranchLevelOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_name?: SortOrder
    level_leader?: SortOrderInput | SortOrder
    level_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: BranchLevelCountOrderByAggregateInput
    _avg?: BranchLevelAvgOrderByAggregateInput
    _max?: BranchLevelMaxOrderByAggregateInput
    _min?: BranchLevelMinOrderByAggregateInput
    _sum?: BranchLevelSumOrderByAggregateInput
  }

  export type BranchLevelScalarWhereWithAggregatesInput = {
    AND?: BranchLevelScalarWhereWithAggregatesInput | BranchLevelScalarWhereWithAggregatesInput[]
    OR?: BranchLevelScalarWhereWithAggregatesInput[]
    NOT?: BranchLevelScalarWhereWithAggregatesInput | BranchLevelScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"BranchLevel"> | number
    branch_id?: IntWithAggregatesFilter<"BranchLevel"> | number
    level_name?: StringWithAggregatesFilter<"BranchLevel"> | string
    level_leader?: IntNullableWithAggregatesFilter<"BranchLevel"> | number | null
    level_active?: IntWithAggregatesFilter<"BranchLevel"> | number
    created_by?: IntNullableWithAggregatesFilter<"BranchLevel"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"BranchLevel"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"BranchLevel"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"BranchLevel"> | Date | string | null
  }

  export type ClassTemplateWhereInput = {
    AND?: ClassTemplateWhereInput | ClassTemplateWhereInput[]
    OR?: ClassTemplateWhereInput[]
    NOT?: ClassTemplateWhereInput | ClassTemplateWhereInput[]
    id?: IntFilter<"ClassTemplate"> | number
    branch_level_id?: IntFilter<"ClassTemplate"> | number
    class_name?: StringFilter<"ClassTemplate"> | string
    no_of_group?: IntFilter<"ClassTemplate"> | number
    has_multiple_teacher?: IntFilter<"ClassTemplate"> | number
    has_specialization?: IntFilter<"ClassTemplate"> | number
    has_optionals_subject?: IntFilter<"ClassTemplate"> | number
    rank?: IntNullableFilter<"ClassTemplate"> | number | null
    class_active?: IntFilter<"ClassTemplate"> | number
    created_by?: IntNullableFilter<"ClassTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassTemplate"> | Date | string | null
    SessionClass?: SessionClassListRelationFilter
    exam?: ExamListRelationFilter
  }

  export type ClassTemplateOrderByWithRelationInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrderInput | SortOrder
    class_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    SessionClass?: SessionClassOrderByRelationAggregateInput
    exam?: ExamOrderByRelationAggregateInput
    _relevance?: ClassTemplateOrderByRelevanceInput
  }

  export type ClassTemplateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    class_name?: string
    AND?: ClassTemplateWhereInput | ClassTemplateWhereInput[]
    OR?: ClassTemplateWhereInput[]
    NOT?: ClassTemplateWhereInput | ClassTemplateWhereInput[]
    branch_level_id?: IntFilter<"ClassTemplate"> | number
    no_of_group?: IntFilter<"ClassTemplate"> | number
    has_multiple_teacher?: IntFilter<"ClassTemplate"> | number
    has_specialization?: IntFilter<"ClassTemplate"> | number
    has_optionals_subject?: IntFilter<"ClassTemplate"> | number
    rank?: IntNullableFilter<"ClassTemplate"> | number | null
    class_active?: IntFilter<"ClassTemplate"> | number
    created_by?: IntNullableFilter<"ClassTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassTemplate"> | Date | string | null
    SessionClass?: SessionClassListRelationFilter
    exam?: ExamListRelationFilter
  }, "id" | "class_name">

  export type ClassTemplateOrderByWithAggregationInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrderInput | SortOrder
    class_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ClassTemplateCountOrderByAggregateInput
    _avg?: ClassTemplateAvgOrderByAggregateInput
    _max?: ClassTemplateMaxOrderByAggregateInput
    _min?: ClassTemplateMinOrderByAggregateInput
    _sum?: ClassTemplateSumOrderByAggregateInput
  }

  export type ClassTemplateScalarWhereWithAggregatesInput = {
    AND?: ClassTemplateScalarWhereWithAggregatesInput | ClassTemplateScalarWhereWithAggregatesInput[]
    OR?: ClassTemplateScalarWhereWithAggregatesInput[]
    NOT?: ClassTemplateScalarWhereWithAggregatesInput | ClassTemplateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ClassTemplate"> | number
    branch_level_id?: IntWithAggregatesFilter<"ClassTemplate"> | number
    class_name?: StringWithAggregatesFilter<"ClassTemplate"> | string
    no_of_group?: IntWithAggregatesFilter<"ClassTemplate"> | number
    has_multiple_teacher?: IntWithAggregatesFilter<"ClassTemplate"> | number
    has_specialization?: IntWithAggregatesFilter<"ClassTemplate"> | number
    has_optionals_subject?: IntWithAggregatesFilter<"ClassTemplate"> | number
    rank?: IntNullableWithAggregatesFilter<"ClassTemplate"> | number | null
    class_active?: IntWithAggregatesFilter<"ClassTemplate"> | number
    created_by?: IntNullableWithAggregatesFilter<"ClassTemplate"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ClassTemplate"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ClassTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ClassTemplate"> | Date | string | null
  }

  export type SubjectSetupWhereInput = {
    AND?: SubjectSetupWhereInput | SubjectSetupWhereInput[]
    OR?: SubjectSetupWhereInput[]
    NOT?: SubjectSetupWhereInput | SubjectSetupWhereInput[]
    id?: IntFilter<"SubjectSetup"> | number
    subject_name?: StringFilter<"SubjectSetup"> | string
    created_by?: IntNullableFilter<"SubjectSetup"> | number | null
    created_at?: DateTimeFilter<"SubjectSetup"> | Date | string
    updated_at?: DateTimeNullableFilter<"SubjectSetup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SubjectSetup"> | Date | string | null
  }

  export type SubjectSetupOrderByWithRelationInput = {
    id?: SortOrder
    subject_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: SubjectSetupOrderByRelevanceInput
  }

  export type SubjectSetupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SubjectSetupWhereInput | SubjectSetupWhereInput[]
    OR?: SubjectSetupWhereInput[]
    NOT?: SubjectSetupWhereInput | SubjectSetupWhereInput[]
    subject_name?: StringFilter<"SubjectSetup"> | string
    created_by?: IntNullableFilter<"SubjectSetup"> | number | null
    created_at?: DateTimeFilter<"SubjectSetup"> | Date | string
    updated_at?: DateTimeNullableFilter<"SubjectSetup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SubjectSetup"> | Date | string | null
  }, "id">

  export type SubjectSetupOrderByWithAggregationInput = {
    id?: SortOrder
    subject_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SubjectSetupCountOrderByAggregateInput
    _avg?: SubjectSetupAvgOrderByAggregateInput
    _max?: SubjectSetupMaxOrderByAggregateInput
    _min?: SubjectSetupMinOrderByAggregateInput
    _sum?: SubjectSetupSumOrderByAggregateInput
  }

  export type SubjectSetupScalarWhereWithAggregatesInput = {
    AND?: SubjectSetupScalarWhereWithAggregatesInput | SubjectSetupScalarWhereWithAggregatesInput[]
    OR?: SubjectSetupScalarWhereWithAggregatesInput[]
    NOT?: SubjectSetupScalarWhereWithAggregatesInput | SubjectSetupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SubjectSetup"> | number
    subject_name?: StringWithAggregatesFilter<"SubjectSetup"> | string
    created_by?: IntNullableWithAggregatesFilter<"SubjectSetup"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SubjectSetup"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SubjectSetup"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SubjectSetup"> | Date | string | null
  }

  export type SchoolSubjectWhereInput = {
    AND?: SchoolSubjectWhereInput | SchoolSubjectWhereInput[]
    OR?: SchoolSubjectWhereInput[]
    NOT?: SchoolSubjectWhereInput | SchoolSubjectWhereInput[]
    id?: IntFilter<"SchoolSubject"> | number
    school_id?: IntFilter<"SchoolSubject"> | number
    subject_name?: StringFilter<"SchoolSubject"> | string
    branch_config?: JsonNullableFilter<"SchoolSubject">
    school_subjects_active?: IntFilter<"SchoolSubject"> | number
    is_compulsory?: IntFilter<"SchoolSubject"> | number
    created_by?: IntNullableFilter<"SchoolSubject"> | number | null
    created_at?: DateTimeFilter<"SchoolSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolSubject"> | Date | string | null
    SessionClassSubject?: SessionClassSubjectListRelationFilter
    ClassSubjectTemplate?: ClassSubjectTemplateListRelationFilter
    exam?: ExamListRelationFilter
  }

  export type SchoolSubjectOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    subject_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    SessionClassSubject?: SessionClassSubjectOrderByRelationAggregateInput
    ClassSubjectTemplate?: ClassSubjectTemplateOrderByRelationAggregateInput
    exam?: ExamOrderByRelationAggregateInput
    _relevance?: SchoolSubjectOrderByRelevanceInput
  }

  export type SchoolSubjectWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SchoolSubjectWhereInput | SchoolSubjectWhereInput[]
    OR?: SchoolSubjectWhereInput[]
    NOT?: SchoolSubjectWhereInput | SchoolSubjectWhereInput[]
    school_id?: IntFilter<"SchoolSubject"> | number
    subject_name?: StringFilter<"SchoolSubject"> | string
    branch_config?: JsonNullableFilter<"SchoolSubject">
    school_subjects_active?: IntFilter<"SchoolSubject"> | number
    is_compulsory?: IntFilter<"SchoolSubject"> | number
    created_by?: IntNullableFilter<"SchoolSubject"> | number | null
    created_at?: DateTimeFilter<"SchoolSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolSubject"> | Date | string | null
    SessionClassSubject?: SessionClassSubjectListRelationFilter
    ClassSubjectTemplate?: ClassSubjectTemplateListRelationFilter
    exam?: ExamListRelationFilter
  }, "id">

  export type SchoolSubjectOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    subject_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SchoolSubjectCountOrderByAggregateInput
    _avg?: SchoolSubjectAvgOrderByAggregateInput
    _max?: SchoolSubjectMaxOrderByAggregateInput
    _min?: SchoolSubjectMinOrderByAggregateInput
    _sum?: SchoolSubjectSumOrderByAggregateInput
  }

  export type SchoolSubjectScalarWhereWithAggregatesInput = {
    AND?: SchoolSubjectScalarWhereWithAggregatesInput | SchoolSubjectScalarWhereWithAggregatesInput[]
    OR?: SchoolSubjectScalarWhereWithAggregatesInput[]
    NOT?: SchoolSubjectScalarWhereWithAggregatesInput | SchoolSubjectScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SchoolSubject"> | number
    school_id?: IntWithAggregatesFilter<"SchoolSubject"> | number
    subject_name?: StringWithAggregatesFilter<"SchoolSubject"> | string
    branch_config?: JsonNullableWithAggregatesFilter<"SchoolSubject">
    school_subjects_active?: IntWithAggregatesFilter<"SchoolSubject"> | number
    is_compulsory?: IntWithAggregatesFilter<"SchoolSubject"> | number
    created_by?: IntNullableWithAggregatesFilter<"SchoolSubject"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SchoolSubject"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SchoolSubject"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SchoolSubject"> | Date | string | null
  }

  export type BranchSessionWhereInput = {
    AND?: BranchSessionWhereInput | BranchSessionWhereInput[]
    OR?: BranchSessionWhereInput[]
    NOT?: BranchSessionWhereInput | BranchSessionWhereInput[]
    id?: IntFilter<"BranchSession"> | number
    branch_id?: IntFilter<"BranchSession"> | number
    session_name?: StringFilter<"BranchSession"> | string
    no_of_terms?: IntFilter<"BranchSession"> | number
    created_by?: IntNullableFilter<"BranchSession"> | number | null
    created_at?: DateTimeFilter<"BranchSession"> | Date | string
    updated_at?: DateTimeNullableFilter<"BranchSession"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"BranchSession"> | Date | string | null
    SessionTerm?: SessionTermListRelationFilter
  }

  export type BranchSessionOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_name?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    SessionTerm?: SessionTermOrderByRelationAggregateInput
    _relevance?: BranchSessionOrderByRelevanceInput
  }

  export type BranchSessionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    branch_id_session_name?: BranchSessionBranch_idSession_nameCompoundUniqueInput
    AND?: BranchSessionWhereInput | BranchSessionWhereInput[]
    OR?: BranchSessionWhereInput[]
    NOT?: BranchSessionWhereInput | BranchSessionWhereInput[]
    branch_id?: IntFilter<"BranchSession"> | number
    session_name?: StringFilter<"BranchSession"> | string
    no_of_terms?: IntFilter<"BranchSession"> | number
    created_by?: IntNullableFilter<"BranchSession"> | number | null
    created_at?: DateTimeFilter<"BranchSession"> | Date | string
    updated_at?: DateTimeNullableFilter<"BranchSession"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"BranchSession"> | Date | string | null
    SessionTerm?: SessionTermListRelationFilter
  }, "id" | "branch_id_session_name">

  export type BranchSessionOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_name?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: BranchSessionCountOrderByAggregateInput
    _avg?: BranchSessionAvgOrderByAggregateInput
    _max?: BranchSessionMaxOrderByAggregateInput
    _min?: BranchSessionMinOrderByAggregateInput
    _sum?: BranchSessionSumOrderByAggregateInput
  }

  export type BranchSessionScalarWhereWithAggregatesInput = {
    AND?: BranchSessionScalarWhereWithAggregatesInput | BranchSessionScalarWhereWithAggregatesInput[]
    OR?: BranchSessionScalarWhereWithAggregatesInput[]
    NOT?: BranchSessionScalarWhereWithAggregatesInput | BranchSessionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"BranchSession"> | number
    branch_id?: IntWithAggregatesFilter<"BranchSession"> | number
    session_name?: StringWithAggregatesFilter<"BranchSession"> | string
    no_of_terms?: IntWithAggregatesFilter<"BranchSession"> | number
    created_by?: IntNullableWithAggregatesFilter<"BranchSession"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"BranchSession"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"BranchSession"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"BranchSession"> | Date | string | null
  }

  export type SchoolSettingWhereInput = {
    AND?: SchoolSettingWhereInput | SchoolSettingWhereInput[]
    OR?: SchoolSettingWhereInput[]
    NOT?: SchoolSettingWhereInput | SchoolSettingWhereInput[]
    id?: IntFilter<"SchoolSetting"> | number
    school_id?: IntFilter<"SchoolSetting"> | number
    branch_id?: IntNullableFilter<"SchoolSetting"> | number | null
    isolate_branch_library?: IntFilter<"SchoolSetting"> | number
    isolate_branch_multimedia?: IntFilter<"SchoolSetting"> | number
    id_card_amount?: IntFilter<"SchoolSetting"> | number
    library_card_amount?: IntFilter<"SchoolSetting"> | number
    result_serial_ammount?: IntFilter<"SchoolSetting"> | number
    id_card_no_of_years?: IntNullableFilter<"SchoolSetting"> | number | null
    library_card_no_of_years?: IntNullableFilter<"SchoolSetting"> | number | null
    created_by?: IntNullableFilter<"SchoolSetting"> | number | null
    created_at?: DateTimeFilter<"SchoolSetting"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolSetting"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolSetting"> | Date | string | null
  }

  export type SchoolSettingOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrderInput | SortOrder
    library_card_no_of_years?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type SchoolSettingWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SchoolSettingWhereInput | SchoolSettingWhereInput[]
    OR?: SchoolSettingWhereInput[]
    NOT?: SchoolSettingWhereInput | SchoolSettingWhereInput[]
    school_id?: IntFilter<"SchoolSetting"> | number
    branch_id?: IntNullableFilter<"SchoolSetting"> | number | null
    isolate_branch_library?: IntFilter<"SchoolSetting"> | number
    isolate_branch_multimedia?: IntFilter<"SchoolSetting"> | number
    id_card_amount?: IntFilter<"SchoolSetting"> | number
    library_card_amount?: IntFilter<"SchoolSetting"> | number
    result_serial_ammount?: IntFilter<"SchoolSetting"> | number
    id_card_no_of_years?: IntNullableFilter<"SchoolSetting"> | number | null
    library_card_no_of_years?: IntNullableFilter<"SchoolSetting"> | number | null
    created_by?: IntNullableFilter<"SchoolSetting"> | number | null
    created_at?: DateTimeFilter<"SchoolSetting"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolSetting"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolSetting"> | Date | string | null
  }, "id">

  export type SchoolSettingOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrderInput | SortOrder
    library_card_no_of_years?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SchoolSettingCountOrderByAggregateInput
    _avg?: SchoolSettingAvgOrderByAggregateInput
    _max?: SchoolSettingMaxOrderByAggregateInput
    _min?: SchoolSettingMinOrderByAggregateInput
    _sum?: SchoolSettingSumOrderByAggregateInput
  }

  export type SchoolSettingScalarWhereWithAggregatesInput = {
    AND?: SchoolSettingScalarWhereWithAggregatesInput | SchoolSettingScalarWhereWithAggregatesInput[]
    OR?: SchoolSettingScalarWhereWithAggregatesInput[]
    NOT?: SchoolSettingScalarWhereWithAggregatesInput | SchoolSettingScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SchoolSetting"> | number
    school_id?: IntWithAggregatesFilter<"SchoolSetting"> | number
    branch_id?: IntNullableWithAggregatesFilter<"SchoolSetting"> | number | null
    isolate_branch_library?: IntWithAggregatesFilter<"SchoolSetting"> | number
    isolate_branch_multimedia?: IntWithAggregatesFilter<"SchoolSetting"> | number
    id_card_amount?: IntWithAggregatesFilter<"SchoolSetting"> | number
    library_card_amount?: IntWithAggregatesFilter<"SchoolSetting"> | number
    result_serial_ammount?: IntWithAggregatesFilter<"SchoolSetting"> | number
    id_card_no_of_years?: IntNullableWithAggregatesFilter<"SchoolSetting"> | number | null
    library_card_no_of_years?: IntNullableWithAggregatesFilter<"SchoolSetting"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"SchoolSetting"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SchoolSetting"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SchoolSetting"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SchoolSetting"> | Date | string | null
  }

  export type MultimediaGroupWhereInput = {
    AND?: MultimediaGroupWhereInput | MultimediaGroupWhereInput[]
    OR?: MultimediaGroupWhereInput[]
    NOT?: MultimediaGroupWhereInput | MultimediaGroupWhereInput[]
    id?: IntFilter<"MultimediaGroup"> | number
    school_id?: IntFilter<"MultimediaGroup"> | number
    branch_id?: IntNullableFilter<"MultimediaGroup"> | number | null
    multimedia_group_name?: StringFilter<"MultimediaGroup"> | string
    multimedia_group_desc?: StringNullableFilter<"MultimediaGroup"> | string | null
    multimedia_group_active?: IntFilter<"MultimediaGroup"> | number
    created_by?: IntNullableFilter<"MultimediaGroup"> | number | null
    created_at?: DateTimeFilter<"MultimediaGroup"> | Date | string
    updated_at?: DateTimeNullableFilter<"MultimediaGroup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"MultimediaGroup"> | Date | string | null
  }

  export type MultimediaGroupOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    multimedia_group_name?: SortOrder
    multimedia_group_desc?: SortOrderInput | SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: MultimediaGroupOrderByRelevanceInput
  }

  export type MultimediaGroupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: MultimediaGroupWhereInput | MultimediaGroupWhereInput[]
    OR?: MultimediaGroupWhereInput[]
    NOT?: MultimediaGroupWhereInput | MultimediaGroupWhereInput[]
    school_id?: IntFilter<"MultimediaGroup"> | number
    branch_id?: IntNullableFilter<"MultimediaGroup"> | number | null
    multimedia_group_name?: StringFilter<"MultimediaGroup"> | string
    multimedia_group_desc?: StringNullableFilter<"MultimediaGroup"> | string | null
    multimedia_group_active?: IntFilter<"MultimediaGroup"> | number
    created_by?: IntNullableFilter<"MultimediaGroup"> | number | null
    created_at?: DateTimeFilter<"MultimediaGroup"> | Date | string
    updated_at?: DateTimeNullableFilter<"MultimediaGroup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"MultimediaGroup"> | Date | string | null
  }, "id">

  export type MultimediaGroupOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    multimedia_group_name?: SortOrder
    multimedia_group_desc?: SortOrderInput | SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: MultimediaGroupCountOrderByAggregateInput
    _avg?: MultimediaGroupAvgOrderByAggregateInput
    _max?: MultimediaGroupMaxOrderByAggregateInput
    _min?: MultimediaGroupMinOrderByAggregateInput
    _sum?: MultimediaGroupSumOrderByAggregateInput
  }

  export type MultimediaGroupScalarWhereWithAggregatesInput = {
    AND?: MultimediaGroupScalarWhereWithAggregatesInput | MultimediaGroupScalarWhereWithAggregatesInput[]
    OR?: MultimediaGroupScalarWhereWithAggregatesInput[]
    NOT?: MultimediaGroupScalarWhereWithAggregatesInput | MultimediaGroupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"MultimediaGroup"> | number
    school_id?: IntWithAggregatesFilter<"MultimediaGroup"> | number
    branch_id?: IntNullableWithAggregatesFilter<"MultimediaGroup"> | number | null
    multimedia_group_name?: StringWithAggregatesFilter<"MultimediaGroup"> | string
    multimedia_group_desc?: StringNullableWithAggregatesFilter<"MultimediaGroup"> | string | null
    multimedia_group_active?: IntWithAggregatesFilter<"MultimediaGroup"> | number
    created_by?: IntNullableWithAggregatesFilter<"MultimediaGroup"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"MultimediaGroup"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"MultimediaGroup"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"MultimediaGroup"> | Date | string | null
  }

  export type MultimediaWhereInput = {
    AND?: MultimediaWhereInput | MultimediaWhereInput[]
    OR?: MultimediaWhereInput[]
    NOT?: MultimediaWhereInput | MultimediaWhereInput[]
    id?: IntFilter<"Multimedia"> | number
    school_id?: IntFilter<"Multimedia"> | number
    branch_id?: IntNullableFilter<"Multimedia"> | number | null
    multimedia_is_image?: IntFilter<"Multimedia"> | number
    multimedia_name?: StringFilter<"Multimedia"> | string
    multimedia_desc?: StringNullableFilter<"Multimedia"> | string | null
    multimedia_path?: StringFilter<"Multimedia"> | string
    multimedia_active?: IntFilter<"Multimedia"> | number
    created_by?: IntNullableFilter<"Multimedia"> | number | null
    created_at?: DateTimeFilter<"Multimedia"> | Date | string
    updated_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }

  export type MultimediaOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    multimedia_is_image?: SortOrder
    multimedia_name?: SortOrder
    multimedia_desc?: SortOrderInput | SortOrder
    multimedia_path?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    branch?: BranchOrderByWithRelationInput
    _relevance?: MultimediaOrderByRelevanceInput
  }

  export type MultimediaWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: MultimediaWhereInput | MultimediaWhereInput[]
    OR?: MultimediaWhereInput[]
    NOT?: MultimediaWhereInput | MultimediaWhereInput[]
    school_id?: IntFilter<"Multimedia"> | number
    branch_id?: IntNullableFilter<"Multimedia"> | number | null
    multimedia_is_image?: IntFilter<"Multimedia"> | number
    multimedia_name?: StringFilter<"Multimedia"> | string
    multimedia_desc?: StringNullableFilter<"Multimedia"> | string | null
    multimedia_path?: StringFilter<"Multimedia"> | string
    multimedia_active?: IntFilter<"Multimedia"> | number
    created_by?: IntNullableFilter<"Multimedia"> | number | null
    created_at?: DateTimeFilter<"Multimedia"> | Date | string
    updated_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }, "id">

  export type MultimediaOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    multimedia_is_image?: SortOrder
    multimedia_name?: SortOrder
    multimedia_desc?: SortOrderInput | SortOrder
    multimedia_path?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: MultimediaCountOrderByAggregateInput
    _avg?: MultimediaAvgOrderByAggregateInput
    _max?: MultimediaMaxOrderByAggregateInput
    _min?: MultimediaMinOrderByAggregateInput
    _sum?: MultimediaSumOrderByAggregateInput
  }

  export type MultimediaScalarWhereWithAggregatesInput = {
    AND?: MultimediaScalarWhereWithAggregatesInput | MultimediaScalarWhereWithAggregatesInput[]
    OR?: MultimediaScalarWhereWithAggregatesInput[]
    NOT?: MultimediaScalarWhereWithAggregatesInput | MultimediaScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Multimedia"> | number
    school_id?: IntWithAggregatesFilter<"Multimedia"> | number
    branch_id?: IntNullableWithAggregatesFilter<"Multimedia"> | number | null
    multimedia_is_image?: IntWithAggregatesFilter<"Multimedia"> | number
    multimedia_name?: StringWithAggregatesFilter<"Multimedia"> | string
    multimedia_desc?: StringNullableWithAggregatesFilter<"Multimedia"> | string | null
    multimedia_path?: StringWithAggregatesFilter<"Multimedia"> | string
    multimedia_active?: IntWithAggregatesFilter<"Multimedia"> | number
    created_by?: IntNullableWithAggregatesFilter<"Multimedia"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Multimedia"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Multimedia"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Multimedia"> | Date | string | null
  }

  export type LibraryBookWhereInput = {
    AND?: LibraryBookWhereInput | LibraryBookWhereInput[]
    OR?: LibraryBookWhereInput[]
    NOT?: LibraryBookWhereInput | LibraryBookWhereInput[]
    id?: IntFilter<"LibraryBook"> | number
    school_id?: IntNullableFilter<"LibraryBook"> | number | null
    branch_id?: IntFilter<"LibraryBook"> | number
    book_name?: StringFilter<"LibraryBook"> | string
    book_desc?: StringFilter<"LibraryBook"> | string
    book_author_name?: StringFilter<"LibraryBook"> | string
    book_cover?: StringNullableFilter<"LibraryBook"> | string | null
    book_path?: StringNullableFilter<"LibraryBook"> | string | null
    book_type?: Enumbook_typeFilter<"LibraryBook"> | $Enums.book_type
    created_by?: IntNullableFilter<"LibraryBook"> | number | null
    created_at?: DateTimeFilter<"LibraryBook"> | Date | string
    updated_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }

  export type LibraryBookOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrderInput | SortOrder
    branch_id?: SortOrder
    book_name?: SortOrder
    book_desc?: SortOrder
    book_author_name?: SortOrder
    book_cover?: SortOrderInput | SortOrder
    book_path?: SortOrderInput | SortOrder
    book_type?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    branch?: BranchOrderByWithRelationInput
    _relevance?: LibraryBookOrderByRelevanceInput
  }

  export type LibraryBookWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: LibraryBookWhereInput | LibraryBookWhereInput[]
    OR?: LibraryBookWhereInput[]
    NOT?: LibraryBookWhereInput | LibraryBookWhereInput[]
    school_id?: IntNullableFilter<"LibraryBook"> | number | null
    branch_id?: IntFilter<"LibraryBook"> | number
    book_name?: StringFilter<"LibraryBook"> | string
    book_desc?: StringFilter<"LibraryBook"> | string
    book_author_name?: StringFilter<"LibraryBook"> | string
    book_cover?: StringNullableFilter<"LibraryBook"> | string | null
    book_path?: StringNullableFilter<"LibraryBook"> | string | null
    book_type?: Enumbook_typeFilter<"LibraryBook"> | $Enums.book_type
    created_by?: IntNullableFilter<"LibraryBook"> | number | null
    created_at?: DateTimeFilter<"LibraryBook"> | Date | string
    updated_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }, "id">

  export type LibraryBookOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrderInput | SortOrder
    branch_id?: SortOrder
    book_name?: SortOrder
    book_desc?: SortOrder
    book_author_name?: SortOrder
    book_cover?: SortOrderInput | SortOrder
    book_path?: SortOrderInput | SortOrder
    book_type?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: LibraryBookCountOrderByAggregateInput
    _avg?: LibraryBookAvgOrderByAggregateInput
    _max?: LibraryBookMaxOrderByAggregateInput
    _min?: LibraryBookMinOrderByAggregateInput
    _sum?: LibraryBookSumOrderByAggregateInput
  }

  export type LibraryBookScalarWhereWithAggregatesInput = {
    AND?: LibraryBookScalarWhereWithAggregatesInput | LibraryBookScalarWhereWithAggregatesInput[]
    OR?: LibraryBookScalarWhereWithAggregatesInput[]
    NOT?: LibraryBookScalarWhereWithAggregatesInput | LibraryBookScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"LibraryBook"> | number
    school_id?: IntNullableWithAggregatesFilter<"LibraryBook"> | number | null
    branch_id?: IntWithAggregatesFilter<"LibraryBook"> | number
    book_name?: StringWithAggregatesFilter<"LibraryBook"> | string
    book_desc?: StringWithAggregatesFilter<"LibraryBook"> | string
    book_author_name?: StringWithAggregatesFilter<"LibraryBook"> | string
    book_cover?: StringNullableWithAggregatesFilter<"LibraryBook"> | string | null
    book_path?: StringNullableWithAggregatesFilter<"LibraryBook"> | string | null
    book_type?: Enumbook_typeWithAggregatesFilter<"LibraryBook"> | $Enums.book_type
    created_by?: IntNullableWithAggregatesFilter<"LibraryBook"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"LibraryBook"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"LibraryBook"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"LibraryBook"> | Date | string | null
  }

  export type IdCardWhereInput = {
    AND?: IdCardWhereInput | IdCardWhereInput[]
    OR?: IdCardWhereInput[]
    NOT?: IdCardWhereInput | IdCardWhereInput[]
    id?: IntFilter<"IdCard"> | number
    id_card_no?: StringFilter<"IdCard"> | string
    issued_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    fare_amont?: DecimalFilter<"IdCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"IdCard"> | number
    acknowledged_from_school_by?: IntNullableFilter<"IdCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"IdCard"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"IdCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"IdCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    created_by?: IntNullableFilter<"IdCard"> | number | null
    created_at?: DateTimeFilter<"IdCard"> | Date | string
    updated_at?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"IdCard"> | Date | string | null
  }

  export type IdCardOrderByWithRelationInput = {
    id?: SortOrder
    id_card_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: IdCardOrderByRelevanceInput
  }

  export type IdCardWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: IdCardWhereInput | IdCardWhereInput[]
    OR?: IdCardWhereInput[]
    NOT?: IdCardWhereInput | IdCardWhereInput[]
    id_card_no?: StringFilter<"IdCard"> | string
    issued_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    fare_amont?: DecimalFilter<"IdCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"IdCard"> | number
    acknowledged_from_school_by?: IntNullableFilter<"IdCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"IdCard"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"IdCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"IdCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    created_by?: IntNullableFilter<"IdCard"> | number | null
    created_at?: DateTimeFilter<"IdCard"> | Date | string
    updated_at?: DateTimeNullableFilter<"IdCard"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"IdCard"> | Date | string | null
  }, "id">

  export type IdCardOrderByWithAggregationInput = {
    id?: SortOrder
    id_card_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: IdCardCountOrderByAggregateInput
    _avg?: IdCardAvgOrderByAggregateInput
    _max?: IdCardMaxOrderByAggregateInput
    _min?: IdCardMinOrderByAggregateInput
    _sum?: IdCardSumOrderByAggregateInput
  }

  export type IdCardScalarWhereWithAggregatesInput = {
    AND?: IdCardScalarWhereWithAggregatesInput | IdCardScalarWhereWithAggregatesInput[]
    OR?: IdCardScalarWhereWithAggregatesInput[]
    NOT?: IdCardScalarWhereWithAggregatesInput | IdCardScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"IdCard"> | number
    id_card_no?: StringWithAggregatesFilter<"IdCard"> | string
    issued_on?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    expired_on?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    fare_amont?: DecimalWithAggregatesFilter<"IdCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntWithAggregatesFilter<"IdCard"> | number
    acknowledged_from_school_by?: IntNullableWithAggregatesFilter<"IdCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    acknowledged_from_admin?: IntWithAggregatesFilter<"IdCard"> | number
    acknowledged_from_admin_by?: IntNullableWithAggregatesFilter<"IdCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    acknowledged_from_superadmin?: IntWithAggregatesFilter<"IdCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    created_by?: IntNullableWithAggregatesFilter<"IdCard"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"IdCard"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"IdCard"> | Date | string | null
  }

  export type LibraryCardWhereInput = {
    AND?: LibraryCardWhereInput | LibraryCardWhereInput[]
    OR?: LibraryCardWhereInput[]
    NOT?: LibraryCardWhereInput | LibraryCardWhereInput[]
    id?: IntFilter<"LibraryCard"> | number
    library_card_no?: StringFilter<"LibraryCard"> | string
    issued_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    fare_amont?: DecimalFilter<"LibraryCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"LibraryCard"> | number
    acknowledged_from_school_by?: IntNullableFilter<"LibraryCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"LibraryCard"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"LibraryCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"LibraryCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    created_by?: IntNullableFilter<"LibraryCard"> | number | null
    created_at?: DateTimeFilter<"LibraryCard"> | Date | string
    updated_at?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
  }

  export type LibraryCardOrderByWithRelationInput = {
    id?: SortOrder
    library_card_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: LibraryCardOrderByRelevanceInput
  }

  export type LibraryCardWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: LibraryCardWhereInput | LibraryCardWhereInput[]
    OR?: LibraryCardWhereInput[]
    NOT?: LibraryCardWhereInput | LibraryCardWhereInput[]
    library_card_no?: StringFilter<"LibraryCard"> | string
    issued_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    fare_amont?: DecimalFilter<"LibraryCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"LibraryCard"> | number
    acknowledged_from_school_by?: IntNullableFilter<"LibraryCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"LibraryCard"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"LibraryCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"LibraryCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    created_by?: IntNullableFilter<"LibraryCard"> | number | null
    created_at?: DateTimeFilter<"LibraryCard"> | Date | string
    updated_at?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"LibraryCard"> | Date | string | null
  }, "id">

  export type LibraryCardOrderByWithAggregationInput = {
    id?: SortOrder
    library_card_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: LibraryCardCountOrderByAggregateInput
    _avg?: LibraryCardAvgOrderByAggregateInput
    _max?: LibraryCardMaxOrderByAggregateInput
    _min?: LibraryCardMinOrderByAggregateInput
    _sum?: LibraryCardSumOrderByAggregateInput
  }

  export type LibraryCardScalarWhereWithAggregatesInput = {
    AND?: LibraryCardScalarWhereWithAggregatesInput | LibraryCardScalarWhereWithAggregatesInput[]
    OR?: LibraryCardScalarWhereWithAggregatesInput[]
    NOT?: LibraryCardScalarWhereWithAggregatesInput | LibraryCardScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"LibraryCard"> | number
    library_card_no?: StringWithAggregatesFilter<"LibraryCard"> | string
    issued_on?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    expired_on?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    fare_amont?: DecimalWithAggregatesFilter<"LibraryCard"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntWithAggregatesFilter<"LibraryCard"> | number
    acknowledged_from_school_by?: IntNullableWithAggregatesFilter<"LibraryCard"> | number | null
    acknowledged_from_school_on?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_admin?: IntWithAggregatesFilter<"LibraryCard"> | number
    acknowledged_from_admin_by?: IntNullableWithAggregatesFilter<"LibraryCard"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    acknowledged_from_superadmin?: IntWithAggregatesFilter<"LibraryCard"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    created_by?: IntNullableWithAggregatesFilter<"LibraryCard"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"LibraryCard"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"LibraryCard"> | Date | string | null
  }

  export type ResultSerialNumbersWhereInput = {
    AND?: ResultSerialNumbersWhereInput | ResultSerialNumbersWhereInput[]
    OR?: ResultSerialNumbersWhereInput[]
    NOT?: ResultSerialNumbersWhereInput | ResultSerialNumbersWhereInput[]
    id?: IntFilter<"ResultSerialNumbers"> | number
    serial_no?: StringFilter<"ResultSerialNumbers"> | string
    issued_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    fare_amont?: DecimalFilter<"ResultSerialNumbers"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_school_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    created_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    created_at?: DateTimeFilter<"ResultSerialNumbers"> | Date | string
    updated_at?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
  }

  export type ResultSerialNumbersOrderByWithRelationInput = {
    id?: SortOrder
    serial_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ResultSerialNumbersOrderByRelevanceInput
  }

  export type ResultSerialNumbersWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ResultSerialNumbersWhereInput | ResultSerialNumbersWhereInput[]
    OR?: ResultSerialNumbersWhereInput[]
    NOT?: ResultSerialNumbersWhereInput | ResultSerialNumbersWhereInput[]
    serial_no?: StringFilter<"ResultSerialNumbers"> | string
    issued_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    expired_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    fare_amont?: DecimalFilter<"ResultSerialNumbers"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_school_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_school_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_admin?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_admin_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_superadmin?: IntFilter<"ResultSerialNumbers"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    created_by?: IntNullableFilter<"ResultSerialNumbers"> | number | null
    created_at?: DateTimeFilter<"ResultSerialNumbers"> | Date | string
    updated_at?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ResultSerialNumbers"> | Date | string | null
  }, "id">

  export type ResultSerialNumbersOrderByWithAggregationInput = {
    id?: SortOrder
    serial_no?: SortOrder
    issued_on?: SortOrderInput | SortOrder
    expired_on?: SortOrderInput | SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrderInput | SortOrder
    acknowledged_from_school_on?: SortOrderInput | SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrderInput | SortOrder
    acknowledged_from_admin_on?: SortOrderInput | SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ResultSerialNumbersCountOrderByAggregateInput
    _avg?: ResultSerialNumbersAvgOrderByAggregateInput
    _max?: ResultSerialNumbersMaxOrderByAggregateInput
    _min?: ResultSerialNumbersMinOrderByAggregateInput
    _sum?: ResultSerialNumbersSumOrderByAggregateInput
  }

  export type ResultSerialNumbersScalarWhereWithAggregatesInput = {
    AND?: ResultSerialNumbersScalarWhereWithAggregatesInput | ResultSerialNumbersScalarWhereWithAggregatesInput[]
    OR?: ResultSerialNumbersScalarWhereWithAggregatesInput[]
    NOT?: ResultSerialNumbersScalarWhereWithAggregatesInput | ResultSerialNumbersScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ResultSerialNumbers"> | number
    serial_no?: StringWithAggregatesFilter<"ResultSerialNumbers"> | string
    issued_on?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    expired_on?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    fare_amont?: DecimalWithAggregatesFilter<"ResultSerialNumbers"> | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntWithAggregatesFilter<"ResultSerialNumbers"> | number
    acknowledged_from_school_by?: IntNullableWithAggregatesFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_school_on?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_admin?: IntWithAggregatesFilter<"ResultSerialNumbers"> | number
    acknowledged_from_admin_by?: IntNullableWithAggregatesFilter<"ResultSerialNumbers"> | number | null
    acknowledged_from_admin_on?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    acknowledged_from_superadmin?: IntWithAggregatesFilter<"ResultSerialNumbers"> | number
    acknowledged_from_superadmin_on?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    created_by?: IntNullableWithAggregatesFilter<"ResultSerialNumbers"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ResultSerialNumbers"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ResultSerialNumbers"> | Date | string | null
  }

  export type SessionTermWhereInput = {
    AND?: SessionTermWhereInput | SessionTermWhereInput[]
    OR?: SessionTermWhereInput[]
    NOT?: SessionTermWhereInput | SessionTermWhereInput[]
    id?: IntFilter<"SessionTerm"> | number
    session_id?: IntFilter<"SessionTerm"> | number
    term_id?: IntFilter<"SessionTerm"> | number
    session_term_name?: StringFilter<"SessionTerm"> | string
    session_term_visible?: IntFilter<"SessionTerm"> | number
    session_term_locked?: IntFilter<"SessionTerm"> | number
    session_term_current?: IntFilter<"SessionTerm"> | number
    session_term_clone_details?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from_id?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_classinstances?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_subjects?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_scoresetup?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_start?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_end?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_next_begin?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    created_by?: IntNullableFilter<"SessionTerm"> | number | null
    created_at?: DateTimeFilter<"SessionTerm"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session?: XOR<BranchSessionNullableScalarRelationFilter, BranchSessionWhereInput> | null
    term?: XOR<TermNullableScalarRelationFilter, TermWhereInput> | null
    sessionclass?: SessionClassListRelationFilter
  }

  export type SessionTermOrderByWithRelationInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_name?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrderInput | SortOrder
    session_term_clone_details_from?: SortOrderInput | SortOrder
    session_term_clone_details_from_id?: SortOrderInput | SortOrder
    session_term_clone_classinstances?: SortOrderInput | SortOrder
    session_terms_clone_subjects?: SortOrderInput | SortOrder
    session_terms_clone_scoresetup?: SortOrderInput | SortOrder
    session_term_start?: SortOrderInput | SortOrder
    session_term_end?: SortOrderInput | SortOrder
    session_term_next_begin?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    session?: BranchSessionOrderByWithRelationInput
    term?: TermOrderByWithRelationInput
    sessionclass?: SessionClassOrderByRelationAggregateInput
    _relevance?: SessionTermOrderByRelevanceInput
  }

  export type SessionTermWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_id_term_id?: SessionTermSession_idTerm_idCompoundUniqueInput
    AND?: SessionTermWhereInput | SessionTermWhereInput[]
    OR?: SessionTermWhereInput[]
    NOT?: SessionTermWhereInput | SessionTermWhereInput[]
    session_id?: IntFilter<"SessionTerm"> | number
    term_id?: IntFilter<"SessionTerm"> | number
    session_term_name?: StringFilter<"SessionTerm"> | string
    session_term_visible?: IntFilter<"SessionTerm"> | number
    session_term_locked?: IntFilter<"SessionTerm"> | number
    session_term_current?: IntFilter<"SessionTerm"> | number
    session_term_clone_details?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from_id?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_classinstances?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_subjects?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_scoresetup?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_start?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_end?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_next_begin?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    created_by?: IntNullableFilter<"SessionTerm"> | number | null
    created_at?: DateTimeFilter<"SessionTerm"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session?: XOR<BranchSessionNullableScalarRelationFilter, BranchSessionWhereInput> | null
    term?: XOR<TermNullableScalarRelationFilter, TermWhereInput> | null
    sessionclass?: SessionClassListRelationFilter
  }, "id" | "session_id_term_id">

  export type SessionTermOrderByWithAggregationInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_name?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrderInput | SortOrder
    session_term_clone_details_from?: SortOrderInput | SortOrder
    session_term_clone_details_from_id?: SortOrderInput | SortOrder
    session_term_clone_classinstances?: SortOrderInput | SortOrder
    session_terms_clone_subjects?: SortOrderInput | SortOrder
    session_terms_clone_scoresetup?: SortOrderInput | SortOrder
    session_term_start?: SortOrderInput | SortOrder
    session_term_end?: SortOrderInput | SortOrder
    session_term_next_begin?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SessionTermCountOrderByAggregateInput
    _avg?: SessionTermAvgOrderByAggregateInput
    _max?: SessionTermMaxOrderByAggregateInput
    _min?: SessionTermMinOrderByAggregateInput
    _sum?: SessionTermSumOrderByAggregateInput
  }

  export type SessionTermScalarWhereWithAggregatesInput = {
    AND?: SessionTermScalarWhereWithAggregatesInput | SessionTermScalarWhereWithAggregatesInput[]
    OR?: SessionTermScalarWhereWithAggregatesInput[]
    NOT?: SessionTermScalarWhereWithAggregatesInput | SessionTermScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SessionTerm"> | number
    session_id?: IntWithAggregatesFilter<"SessionTerm"> | number
    term_id?: IntWithAggregatesFilter<"SessionTerm"> | number
    session_term_name?: StringWithAggregatesFilter<"SessionTerm"> | string
    session_term_visible?: IntWithAggregatesFilter<"SessionTerm"> | number
    session_term_locked?: IntWithAggregatesFilter<"SessionTerm"> | number
    session_term_current?: IntWithAggregatesFilter<"SessionTerm"> | number
    session_term_clone_details?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_term_clone_details_from?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_term_clone_details_from_id?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_term_clone_classinstances?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_terms_clone_subjects?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_terms_clone_scoresetup?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    session_term_start?: DateTimeNullableWithAggregatesFilter<"SessionTerm"> | Date | string | null
    session_term_end?: DateTimeNullableWithAggregatesFilter<"SessionTerm"> | Date | string | null
    session_term_next_begin?: DateTimeNullableWithAggregatesFilter<"SessionTerm"> | Date | string | null
    created_by?: IntNullableWithAggregatesFilter<"SessionTerm"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SessionTerm"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SessionTerm"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SessionTerm"> | Date | string | null
  }

  export type UserLevelWhereInput = {
    AND?: UserLevelWhereInput | UserLevelWhereInput[]
    OR?: UserLevelWhereInput[]
    NOT?: UserLevelWhereInput | UserLevelWhereInput[]
    id?: IntFilter<"UserLevel"> | number
    branch_id?: IntFilter<"UserLevel"> | number
    level_id?: IntFilter<"UserLevel"> | number
    user_id?: IntFilter<"UserLevel"> | number
    created_by?: IntNullableFilter<"UserLevel"> | number | null
    created_at?: DateTimeFilter<"UserLevel"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserLevel"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserLevel"> | Date | string | null
  }

  export type UserLevelOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type UserLevelWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UserLevelWhereInput | UserLevelWhereInput[]
    OR?: UserLevelWhereInput[]
    NOT?: UserLevelWhereInput | UserLevelWhereInput[]
    branch_id?: IntFilter<"UserLevel"> | number
    level_id?: IntFilter<"UserLevel"> | number
    user_id?: IntFilter<"UserLevel"> | number
    created_by?: IntNullableFilter<"UserLevel"> | number | null
    created_at?: DateTimeFilter<"UserLevel"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserLevel"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserLevel"> | Date | string | null
  }, "id">

  export type UserLevelOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: UserLevelCountOrderByAggregateInput
    _avg?: UserLevelAvgOrderByAggregateInput
    _max?: UserLevelMaxOrderByAggregateInput
    _min?: UserLevelMinOrderByAggregateInput
    _sum?: UserLevelSumOrderByAggregateInput
  }

  export type UserLevelScalarWhereWithAggregatesInput = {
    AND?: UserLevelScalarWhereWithAggregatesInput | UserLevelScalarWhereWithAggregatesInput[]
    OR?: UserLevelScalarWhereWithAggregatesInput[]
    NOT?: UserLevelScalarWhereWithAggregatesInput | UserLevelScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UserLevel"> | number
    branch_id?: IntWithAggregatesFilter<"UserLevel"> | number
    level_id?: IntWithAggregatesFilter<"UserLevel"> | number
    user_id?: IntWithAggregatesFilter<"UserLevel"> | number
    created_by?: IntNullableWithAggregatesFilter<"UserLevel"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"UserLevel"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"UserLevel"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UserLevel"> | Date | string | null
  }

  export type UserTrackingWhereInput = {
    AND?: UserTrackingWhereInput | UserTrackingWhereInput[]
    OR?: UserTrackingWhereInput[]
    NOT?: UserTrackingWhereInput | UserTrackingWhereInput[]
    id?: IntFilter<"UserTracking"> | number
    class_id?: IntFilter<"UserTracking"> | number
    specialization_id?: IntFilter<"UserTracking"> | number
    group_id?: IntFilter<"UserTracking"> | number
    user_id?: IntFilter<"UserTracking"> | number
    created_by?: IntNullableFilter<"UserTracking"> | number | null
    created_at?: DateTimeFilter<"UserTracking"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserTracking"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserTracking"> | Date | string | null
  }

  export type UserTrackingOrderByWithRelationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type UserTrackingWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UserTrackingWhereInput | UserTrackingWhereInput[]
    OR?: UserTrackingWhereInput[]
    NOT?: UserTrackingWhereInput | UserTrackingWhereInput[]
    class_id?: IntFilter<"UserTracking"> | number
    specialization_id?: IntFilter<"UserTracking"> | number
    group_id?: IntFilter<"UserTracking"> | number
    user_id?: IntFilter<"UserTracking"> | number
    created_by?: IntNullableFilter<"UserTracking"> | number | null
    created_at?: DateTimeFilter<"UserTracking"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserTracking"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserTracking"> | Date | string | null
  }, "id">

  export type UserTrackingOrderByWithAggregationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: UserTrackingCountOrderByAggregateInput
    _avg?: UserTrackingAvgOrderByAggregateInput
    _max?: UserTrackingMaxOrderByAggregateInput
    _min?: UserTrackingMinOrderByAggregateInput
    _sum?: UserTrackingSumOrderByAggregateInput
  }

  export type UserTrackingScalarWhereWithAggregatesInput = {
    AND?: UserTrackingScalarWhereWithAggregatesInput | UserTrackingScalarWhereWithAggregatesInput[]
    OR?: UserTrackingScalarWhereWithAggregatesInput[]
    NOT?: UserTrackingScalarWhereWithAggregatesInput | UserTrackingScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UserTracking"> | number
    class_id?: IntWithAggregatesFilter<"UserTracking"> | number
    specialization_id?: IntWithAggregatesFilter<"UserTracking"> | number
    group_id?: IntWithAggregatesFilter<"UserTracking"> | number
    user_id?: IntWithAggregatesFilter<"UserTracking"> | number
    created_by?: IntNullableWithAggregatesFilter<"UserTracking"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"UserTracking"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"UserTracking"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UserTracking"> | Date | string | null
  }

  export type UserTrackingSubjectWhereInput = {
    AND?: UserTrackingSubjectWhereInput | UserTrackingSubjectWhereInput[]
    OR?: UserTrackingSubjectWhereInput[]
    NOT?: UserTrackingSubjectWhereInput | UserTrackingSubjectWhereInput[]
    id?: IntFilter<"UserTrackingSubject"> | number
    class_id?: IntFilter<"UserTrackingSubject"> | number
    specialization_id?: IntFilter<"UserTrackingSubject"> | number
    group_id?: IntFilter<"UserTrackingSubject"> | number
    subject_id?: IntFilter<"UserTrackingSubject"> | number
    user_id?: IntFilter<"UserTrackingSubject"> | number
    created_by?: IntNullableFilter<"UserTrackingSubject"> | number | null
    created_at?: DateTimeFilter<"UserTrackingSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserTrackingSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserTrackingSubject"> | Date | string | null
  }

  export type UserTrackingSubjectOrderByWithRelationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type UserTrackingSubjectWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UserTrackingSubjectWhereInput | UserTrackingSubjectWhereInput[]
    OR?: UserTrackingSubjectWhereInput[]
    NOT?: UserTrackingSubjectWhereInput | UserTrackingSubjectWhereInput[]
    class_id?: IntFilter<"UserTrackingSubject"> | number
    specialization_id?: IntFilter<"UserTrackingSubject"> | number
    group_id?: IntFilter<"UserTrackingSubject"> | number
    subject_id?: IntFilter<"UserTrackingSubject"> | number
    user_id?: IntFilter<"UserTrackingSubject"> | number
    created_by?: IntNullableFilter<"UserTrackingSubject"> | number | null
    created_at?: DateTimeFilter<"UserTrackingSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"UserTrackingSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"UserTrackingSubject"> | Date | string | null
  }, "id">

  export type UserTrackingSubjectOrderByWithAggregationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: UserTrackingSubjectCountOrderByAggregateInput
    _avg?: UserTrackingSubjectAvgOrderByAggregateInput
    _max?: UserTrackingSubjectMaxOrderByAggregateInput
    _min?: UserTrackingSubjectMinOrderByAggregateInput
    _sum?: UserTrackingSubjectSumOrderByAggregateInput
  }

  export type UserTrackingSubjectScalarWhereWithAggregatesInput = {
    AND?: UserTrackingSubjectScalarWhereWithAggregatesInput | UserTrackingSubjectScalarWhereWithAggregatesInput[]
    OR?: UserTrackingSubjectScalarWhereWithAggregatesInput[]
    NOT?: UserTrackingSubjectScalarWhereWithAggregatesInput | UserTrackingSubjectScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    class_id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    specialization_id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    group_id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    subject_id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    user_id?: IntWithAggregatesFilter<"UserTrackingSubject"> | number
    created_by?: IntNullableWithAggregatesFilter<"UserTrackingSubject"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"UserTrackingSubject"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"UserTrackingSubject"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UserTrackingSubject"> | Date | string | null
  }

  export type AllUserWhereInput = {
    AND?: AllUserWhereInput | AllUserWhereInput[]
    OR?: AllUserWhereInput[]
    NOT?: AllUserWhereInput | AllUserWhereInput[]
    id?: IntFilter<"AllUser"> | number
    model?: StringFilter<"AllUser"> | string
    model_id?: IntFilter<"AllUser"> | number
  }

  export type AllUserOrderByWithRelationInput = {
    id?: SortOrder
    model?: SortOrder
    model_id?: SortOrder
    _relevance?: AllUserOrderByRelevanceInput
  }

  export type AllUserWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: AllUserWhereInput | AllUserWhereInput[]
    OR?: AllUserWhereInput[]
    NOT?: AllUserWhereInput | AllUserWhereInput[]
    model?: StringFilter<"AllUser"> | string
    model_id?: IntFilter<"AllUser"> | number
  }, "id">

  export type AllUserOrderByWithAggregationInput = {
    id?: SortOrder
    model?: SortOrder
    model_id?: SortOrder
    _count?: AllUserCountOrderByAggregateInput
    _avg?: AllUserAvgOrderByAggregateInput
    _max?: AllUserMaxOrderByAggregateInput
    _min?: AllUserMinOrderByAggregateInput
    _sum?: AllUserSumOrderByAggregateInput
  }

  export type AllUserScalarWhereWithAggregatesInput = {
    AND?: AllUserScalarWhereWithAggregatesInput | AllUserScalarWhereWithAggregatesInput[]
    OR?: AllUserScalarWhereWithAggregatesInput[]
    NOT?: AllUserScalarWhereWithAggregatesInput | AllUserScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"AllUser"> | number
    model?: StringWithAggregatesFilter<"AllUser"> | string
    model_id?: IntWithAggregatesFilter<"AllUser"> | number
  }

  export type UserWhereInput = {
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    id?: IntFilter<"User"> | number
    uuid?: StringFilter<"User"> | string
    user_country_id?: IntNullableFilter<"User"> | number | null
    user_state_id?: IntNullableFilter<"User"> | number | null
    user_city_id?: IntNullableFilter<"User"> | number | null
    school_id?: IntNullableFilter<"User"> | number | null
    branch_id?: IntNullableFilter<"User"> | number | null
    local_id?: IntNullableFilter<"User"> | number | null
    staff_dept?: Enumusers_staff_deptFilter<"User"> | $Enums.users_staff_dept
    user_name?: StringFilter<"User"> | string
    user_phone?: StringFilter<"User"> | string
    user_sex?: IntFilter<"User"> | number
    email?: StringFilter<"User"> | string
    email_verified_at?: DateTimeNullableFilter<"User"> | Date | string | null
    user_address?: StringFilter<"User"> | string
    qualification_id?: IntNullableFilter<"User"> | number | null
    user_proffession?: StringNullableFilter<"User"> | string | null
    profile_photo_path?: StringNullableFilter<"User"> | string | null
    date_of_birth?: DateTimeNullableFilter<"User"> | Date | string | null
    breif_bio?: StringNullableFilter<"User"> | string | null
    facebook_handle?: StringNullableFilter<"User"> | string | null
    twitter_handle?: StringNullableFilter<"User"> | string | null
    instagram_handle?: StringNullableFilter<"User"> | string | null
    username?: StringNullableFilter<"User"> | string | null
    password?: StringFilter<"User"> | string
    remember_token?: StringNullableFilter<"User"> | string | null
    user_active?: IntFilter<"User"> | number
    user_must_change_password?: IntFilter<"User"> | number
    role?: StringNullableFilter<"User"> | string | null
    user_type?: StringNullableFilter<"User"> | string | null
    use_role?: IntFilter<"User"> | number
    user_blocked_reason?: StringNullableFilter<"User"> | string | null
    created_by?: IntNullableFilter<"User"> | number | null
    created_at?: DateTimeFilter<"User"> | Date | string
    updated_at?: DateTimeNullableFilter<"User"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"User"> | Date | string | null
    CrudUserPermission?: UserCrudPermissionListRelationFilter
    PermissionUser?: UserPermissionListRelationFilter
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }

  export type UserOrderByWithRelationInput = {
    id?: SortOrder
    uuid?: SortOrder
    user_country_id?: SortOrderInput | SortOrder
    user_state_id?: SortOrderInput | SortOrder
    user_city_id?: SortOrderInput | SortOrder
    school_id?: SortOrderInput | SortOrder
    branch_id?: SortOrderInput | SortOrder
    local_id?: SortOrderInput | SortOrder
    staff_dept?: SortOrder
    user_name?: SortOrder
    user_phone?: SortOrder
    user_sex?: SortOrder
    email?: SortOrder
    email_verified_at?: SortOrderInput | SortOrder
    user_address?: SortOrder
    qualification_id?: SortOrderInput | SortOrder
    user_proffession?: SortOrderInput | SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    date_of_birth?: SortOrderInput | SortOrder
    breif_bio?: SortOrderInput | SortOrder
    facebook_handle?: SortOrderInput | SortOrder
    twitter_handle?: SortOrderInput | SortOrder
    instagram_handle?: SortOrderInput | SortOrder
    username?: SortOrderInput | SortOrder
    password?: SortOrder
    remember_token?: SortOrderInput | SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    use_role?: SortOrder
    user_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    CrudUserPermission?: UserCrudPermissionOrderByRelationAggregateInput
    PermissionUser?: UserPermissionOrderByRelationAggregateInput
    school?: SchoolOrderByWithRelationInput
    branch?: BranchOrderByWithRelationInput
    _relevance?: UserOrderByRelevanceInput
  }

  export type UserWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    uuid?: string
    email?: string
    AND?: UserWhereInput | UserWhereInput[]
    OR?: UserWhereInput[]
    NOT?: UserWhereInput | UserWhereInput[]
    user_country_id?: IntNullableFilter<"User"> | number | null
    user_state_id?: IntNullableFilter<"User"> | number | null
    user_city_id?: IntNullableFilter<"User"> | number | null
    school_id?: IntNullableFilter<"User"> | number | null
    branch_id?: IntNullableFilter<"User"> | number | null
    local_id?: IntNullableFilter<"User"> | number | null
    staff_dept?: Enumusers_staff_deptFilter<"User"> | $Enums.users_staff_dept
    user_name?: StringFilter<"User"> | string
    user_phone?: StringFilter<"User"> | string
    user_sex?: IntFilter<"User"> | number
    email_verified_at?: DateTimeNullableFilter<"User"> | Date | string | null
    user_address?: StringFilter<"User"> | string
    qualification_id?: IntNullableFilter<"User"> | number | null
    user_proffession?: StringNullableFilter<"User"> | string | null
    profile_photo_path?: StringNullableFilter<"User"> | string | null
    date_of_birth?: DateTimeNullableFilter<"User"> | Date | string | null
    breif_bio?: StringNullableFilter<"User"> | string | null
    facebook_handle?: StringNullableFilter<"User"> | string | null
    twitter_handle?: StringNullableFilter<"User"> | string | null
    instagram_handle?: StringNullableFilter<"User"> | string | null
    username?: StringNullableFilter<"User"> | string | null
    password?: StringFilter<"User"> | string
    remember_token?: StringNullableFilter<"User"> | string | null
    user_active?: IntFilter<"User"> | number
    user_must_change_password?: IntFilter<"User"> | number
    role?: StringNullableFilter<"User"> | string | null
    user_type?: StringNullableFilter<"User"> | string | null
    use_role?: IntFilter<"User"> | number
    user_blocked_reason?: StringNullableFilter<"User"> | string | null
    created_by?: IntNullableFilter<"User"> | number | null
    created_at?: DateTimeFilter<"User"> | Date | string
    updated_at?: DateTimeNullableFilter<"User"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"User"> | Date | string | null
    CrudUserPermission?: UserCrudPermissionListRelationFilter
    PermissionUser?: UserPermissionListRelationFilter
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }, "id" | "uuid" | "email">

  export type UserOrderByWithAggregationInput = {
    id?: SortOrder
    uuid?: SortOrder
    user_country_id?: SortOrderInput | SortOrder
    user_state_id?: SortOrderInput | SortOrder
    user_city_id?: SortOrderInput | SortOrder
    school_id?: SortOrderInput | SortOrder
    branch_id?: SortOrderInput | SortOrder
    local_id?: SortOrderInput | SortOrder
    staff_dept?: SortOrder
    user_name?: SortOrder
    user_phone?: SortOrder
    user_sex?: SortOrder
    email?: SortOrder
    email_verified_at?: SortOrderInput | SortOrder
    user_address?: SortOrder
    qualification_id?: SortOrderInput | SortOrder
    user_proffession?: SortOrderInput | SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    date_of_birth?: SortOrderInput | SortOrder
    breif_bio?: SortOrderInput | SortOrder
    facebook_handle?: SortOrderInput | SortOrder
    twitter_handle?: SortOrderInput | SortOrder
    instagram_handle?: SortOrderInput | SortOrder
    username?: SortOrderInput | SortOrder
    password?: SortOrder
    remember_token?: SortOrderInput | SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    use_role?: SortOrder
    user_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: UserCountOrderByAggregateInput
    _avg?: UserAvgOrderByAggregateInput
    _max?: UserMaxOrderByAggregateInput
    _min?: UserMinOrderByAggregateInput
    _sum?: UserSumOrderByAggregateInput
  }

  export type UserScalarWhereWithAggregatesInput = {
    AND?: UserScalarWhereWithAggregatesInput | UserScalarWhereWithAggregatesInput[]
    OR?: UserScalarWhereWithAggregatesInput[]
    NOT?: UserScalarWhereWithAggregatesInput | UserScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"User"> | number
    uuid?: StringWithAggregatesFilter<"User"> | string
    user_country_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    user_state_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    user_city_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    school_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    branch_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    local_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    staff_dept?: Enumusers_staff_deptWithAggregatesFilter<"User"> | $Enums.users_staff_dept
    user_name?: StringWithAggregatesFilter<"User"> | string
    user_phone?: StringWithAggregatesFilter<"User"> | string
    user_sex?: IntWithAggregatesFilter<"User"> | number
    email?: StringWithAggregatesFilter<"User"> | string
    email_verified_at?: DateTimeNullableWithAggregatesFilter<"User"> | Date | string | null
    user_address?: StringWithAggregatesFilter<"User"> | string
    qualification_id?: IntNullableWithAggregatesFilter<"User"> | number | null
    user_proffession?: StringNullableWithAggregatesFilter<"User"> | string | null
    profile_photo_path?: StringNullableWithAggregatesFilter<"User"> | string | null
    date_of_birth?: DateTimeNullableWithAggregatesFilter<"User"> | Date | string | null
    breif_bio?: StringNullableWithAggregatesFilter<"User"> | string | null
    facebook_handle?: StringNullableWithAggregatesFilter<"User"> | string | null
    twitter_handle?: StringNullableWithAggregatesFilter<"User"> | string | null
    instagram_handle?: StringNullableWithAggregatesFilter<"User"> | string | null
    username?: StringNullableWithAggregatesFilter<"User"> | string | null
    password?: StringWithAggregatesFilter<"User"> | string
    remember_token?: StringNullableWithAggregatesFilter<"User"> | string | null
    user_active?: IntWithAggregatesFilter<"User"> | number
    user_must_change_password?: IntWithAggregatesFilter<"User"> | number
    role?: StringNullableWithAggregatesFilter<"User"> | string | null
    user_type?: StringNullableWithAggregatesFilter<"User"> | string | null
    use_role?: IntWithAggregatesFilter<"User"> | number
    user_blocked_reason?: StringNullableWithAggregatesFilter<"User"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"User"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"User"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"User"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"User"> | Date | string | null
  }

  export type StudentWhereInput = {
    AND?: StudentWhereInput | StudentWhereInput[]
    OR?: StudentWhereInput[]
    NOT?: StudentWhereInput | StudentWhereInput[]
    id?: IntFilter<"Student"> | number
    uuid?: StringNullableFilter<"Student"> | string | null
    school_id?: IntFilter<"Student"> | number
    branch_id?: IntFilter<"Student"> | number
    local_id?: IntNullableFilter<"Student"> | number | null
    student_country_id?: IntNullableFilter<"Student"> | number | null
    student_state_id?: IntNullableFilter<"Student"> | number | null
    guardian_id?: IntNullableFilter<"Student"> | number | null
    religion_id?: IntNullableFilter<"Student"> | number | null
    first_name?: StringFilter<"Student"> | string
    middle_name?: StringNullableFilter<"Student"> | string | null
    last_name?: StringFilter<"Student"> | string
    email?: StringNullableFilter<"Student"> | string | null
    student_phone?: StringNullableFilter<"Student"> | string | null
    student_address?: StringNullableFilter<"Student"> | string | null
    student_sex?: IntFilter<"Student"> | number
    student_bio?: StringNullableFilter<"Student"> | string | null
    profile_photo_path?: StringNullableFilter<"Student"> | string | null
    username?: StringNullableFilter<"Student"> | string | null
    password?: StringNullableFilter<"Student"> | string | null
    student_active?: IntFilter<"Student"> | number
    student_blocked_reason?: StringNullableFilter<"Student"> | string | null
    role?: StringNullableFilter<"Student"> | string | null
    user_type?: StringNullableFilter<"Student"> | string | null
    use_role?: IntFilter<"Student"> | number
    created_by?: IntNullableFilter<"Student"> | number | null
    created_at?: DateTimeFilter<"Student"> | Date | string
    updated_at?: DateTimeNullableFilter<"Student"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Student"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    StudentTracking?: StudentTrackingListRelationFilter
  }

  export type StudentOrderByWithRelationInput = {
    id?: SortOrder
    uuid?: SortOrderInput | SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrderInput | SortOrder
    student_country_id?: SortOrderInput | SortOrder
    student_state_id?: SortOrderInput | SortOrder
    guardian_id?: SortOrderInput | SortOrder
    religion_id?: SortOrderInput | SortOrder
    first_name?: SortOrder
    middle_name?: SortOrderInput | SortOrder
    last_name?: SortOrder
    email?: SortOrderInput | SortOrder
    student_phone?: SortOrderInput | SortOrder
    student_address?: SortOrderInput | SortOrder
    student_sex?: SortOrder
    student_bio?: SortOrderInput | SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    username?: SortOrderInput | SortOrder
    password?: SortOrderInput | SortOrder
    student_active?: SortOrder
    student_blocked_reason?: SortOrderInput | SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    use_role?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    branch?: BranchOrderByWithRelationInput
    school?: SchoolOrderByWithRelationInput
    StudentTracking?: StudentTrackingOrderByRelationAggregateInput
    _relevance?: StudentOrderByRelevanceInput
  }

  export type StudentWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    uuid?: string
    email?: string
    AND?: StudentWhereInput | StudentWhereInput[]
    OR?: StudentWhereInput[]
    NOT?: StudentWhereInput | StudentWhereInput[]
    school_id?: IntFilter<"Student"> | number
    branch_id?: IntFilter<"Student"> | number
    local_id?: IntNullableFilter<"Student"> | number | null
    student_country_id?: IntNullableFilter<"Student"> | number | null
    student_state_id?: IntNullableFilter<"Student"> | number | null
    guardian_id?: IntNullableFilter<"Student"> | number | null
    religion_id?: IntNullableFilter<"Student"> | number | null
    first_name?: StringFilter<"Student"> | string
    middle_name?: StringNullableFilter<"Student"> | string | null
    last_name?: StringFilter<"Student"> | string
    student_phone?: StringNullableFilter<"Student"> | string | null
    student_address?: StringNullableFilter<"Student"> | string | null
    student_sex?: IntFilter<"Student"> | number
    student_bio?: StringNullableFilter<"Student"> | string | null
    profile_photo_path?: StringNullableFilter<"Student"> | string | null
    username?: StringNullableFilter<"Student"> | string | null
    password?: StringNullableFilter<"Student"> | string | null
    student_active?: IntFilter<"Student"> | number
    student_blocked_reason?: StringNullableFilter<"Student"> | string | null
    role?: StringNullableFilter<"Student"> | string | null
    user_type?: StringNullableFilter<"Student"> | string | null
    use_role?: IntFilter<"Student"> | number
    created_by?: IntNullableFilter<"Student"> | number | null
    created_at?: DateTimeFilter<"Student"> | Date | string
    updated_at?: DateTimeNullableFilter<"Student"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Student"> | Date | string | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    StudentTracking?: StudentTrackingListRelationFilter
  }, "id" | "uuid" | "email">

  export type StudentOrderByWithAggregationInput = {
    id?: SortOrder
    uuid?: SortOrderInput | SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrderInput | SortOrder
    student_country_id?: SortOrderInput | SortOrder
    student_state_id?: SortOrderInput | SortOrder
    guardian_id?: SortOrderInput | SortOrder
    religion_id?: SortOrderInput | SortOrder
    first_name?: SortOrder
    middle_name?: SortOrderInput | SortOrder
    last_name?: SortOrder
    email?: SortOrderInput | SortOrder
    student_phone?: SortOrderInput | SortOrder
    student_address?: SortOrderInput | SortOrder
    student_sex?: SortOrder
    student_bio?: SortOrderInput | SortOrder
    profile_photo_path?: SortOrderInput | SortOrder
    username?: SortOrderInput | SortOrder
    password?: SortOrderInput | SortOrder
    student_active?: SortOrder
    student_blocked_reason?: SortOrderInput | SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    use_role?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: StudentCountOrderByAggregateInput
    _avg?: StudentAvgOrderByAggregateInput
    _max?: StudentMaxOrderByAggregateInput
    _min?: StudentMinOrderByAggregateInput
    _sum?: StudentSumOrderByAggregateInput
  }

  export type StudentScalarWhereWithAggregatesInput = {
    AND?: StudentScalarWhereWithAggregatesInput | StudentScalarWhereWithAggregatesInput[]
    OR?: StudentScalarWhereWithAggregatesInput[]
    NOT?: StudentScalarWhereWithAggregatesInput | StudentScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Student"> | number
    uuid?: StringNullableWithAggregatesFilter<"Student"> | string | null
    school_id?: IntWithAggregatesFilter<"Student"> | number
    branch_id?: IntWithAggregatesFilter<"Student"> | number
    local_id?: IntNullableWithAggregatesFilter<"Student"> | number | null
    student_country_id?: IntNullableWithAggregatesFilter<"Student"> | number | null
    student_state_id?: IntNullableWithAggregatesFilter<"Student"> | number | null
    guardian_id?: IntNullableWithAggregatesFilter<"Student"> | number | null
    religion_id?: IntNullableWithAggregatesFilter<"Student"> | number | null
    first_name?: StringWithAggregatesFilter<"Student"> | string
    middle_name?: StringNullableWithAggregatesFilter<"Student"> | string | null
    last_name?: StringWithAggregatesFilter<"Student"> | string
    email?: StringNullableWithAggregatesFilter<"Student"> | string | null
    student_phone?: StringNullableWithAggregatesFilter<"Student"> | string | null
    student_address?: StringNullableWithAggregatesFilter<"Student"> | string | null
    student_sex?: IntWithAggregatesFilter<"Student"> | number
    student_bio?: StringNullableWithAggregatesFilter<"Student"> | string | null
    profile_photo_path?: StringNullableWithAggregatesFilter<"Student"> | string | null
    username?: StringNullableWithAggregatesFilter<"Student"> | string | null
    password?: StringNullableWithAggregatesFilter<"Student"> | string | null
    student_active?: IntWithAggregatesFilter<"Student"> | number
    student_blocked_reason?: StringNullableWithAggregatesFilter<"Student"> | string | null
    role?: StringNullableWithAggregatesFilter<"Student"> | string | null
    user_type?: StringNullableWithAggregatesFilter<"Student"> | string | null
    use_role?: IntWithAggregatesFilter<"Student"> | number
    created_by?: IntNullableWithAggregatesFilter<"Student"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Student"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Student"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Student"> | Date | string | null
  }

  export type GuardianWhereInput = {
    AND?: GuardianWhereInput | GuardianWhereInput[]
    OR?: GuardianWhereInput[]
    NOT?: GuardianWhereInput | GuardianWhereInput[]
    id?: IntFilter<"Guardian"> | number
    uuid?: StringNullableFilter<"Guardian"> | string | null
    school_id?: IntFilter<"Guardian"> | number
    branch_id?: IntFilter<"Guardian"> | number
    surname?: StringFilter<"Guardian"> | string
    first_name?: StringNullableFilter<"Guardian"> | string | null
    guardian_sex?: IntFilter<"Guardian"> | number
    is_married?: IntFilter<"Guardian"> | number
    marriage_disolved?: IntFilter<"Guardian"> | number
    is_parent?: IntFilter<"Guardian"> | number
    relation_how_related?: StringNullableFilter<"Guardian"> | string | null
    guardian_proffession?: StringNullableFilter<"Guardian"> | string | null
    phonenumber?: StringNullableFilter<"Guardian"> | string | null
    email?: StringFilter<"Guardian"> | string
    role?: StringNullableFilter<"Guardian"> | string | null
    user_type?: StringNullableFilter<"Guardian"> | string | null
    password?: StringNullableFilter<"Guardian"> | string | null
    use_role?: IntFilter<"Guardian"> | number
    guardian_active?: IntFilter<"Guardian"> | number
    guardian_blocked_reason?: StringNullableFilter<"Guardian"> | string | null
    created_by?: IntNullableFilter<"Guardian"> | number | null
    created_at?: DateTimeFilter<"Guardian"> | Date | string
    updated_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }

  export type GuardianOrderByWithRelationInput = {
    id?: SortOrder
    uuid?: SortOrderInput | SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    surname?: SortOrder
    first_name?: SortOrderInput | SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    relation_how_related?: SortOrderInput | SortOrder
    guardian_proffession?: SortOrderInput | SortOrder
    phonenumber?: SortOrderInput | SortOrder
    email?: SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    password?: SortOrderInput | SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    guardian_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    school?: SchoolOrderByWithRelationInput
    branch?: BranchOrderByWithRelationInput
    _relevance?: GuardianOrderByRelevanceInput
  }

  export type GuardianWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    uuid?: string
    email?: string
    AND?: GuardianWhereInput | GuardianWhereInput[]
    OR?: GuardianWhereInput[]
    NOT?: GuardianWhereInput | GuardianWhereInput[]
    school_id?: IntFilter<"Guardian"> | number
    branch_id?: IntFilter<"Guardian"> | number
    surname?: StringFilter<"Guardian"> | string
    first_name?: StringNullableFilter<"Guardian"> | string | null
    guardian_sex?: IntFilter<"Guardian"> | number
    is_married?: IntFilter<"Guardian"> | number
    marriage_disolved?: IntFilter<"Guardian"> | number
    is_parent?: IntFilter<"Guardian"> | number
    relation_how_related?: StringNullableFilter<"Guardian"> | string | null
    guardian_proffession?: StringNullableFilter<"Guardian"> | string | null
    phonenumber?: StringNullableFilter<"Guardian"> | string | null
    role?: StringNullableFilter<"Guardian"> | string | null
    user_type?: StringNullableFilter<"Guardian"> | string | null
    password?: StringNullableFilter<"Guardian"> | string | null
    use_role?: IntFilter<"Guardian"> | number
    guardian_active?: IntFilter<"Guardian"> | number
    guardian_blocked_reason?: StringNullableFilter<"Guardian"> | string | null
    created_by?: IntNullableFilter<"Guardian"> | number | null
    created_at?: DateTimeFilter<"Guardian"> | Date | string
    updated_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
    school?: XOR<SchoolNullableScalarRelationFilter, SchoolWhereInput> | null
    branch?: XOR<BranchNullableScalarRelationFilter, BranchWhereInput> | null
  }, "id" | "uuid" | "email">

  export type GuardianOrderByWithAggregationInput = {
    id?: SortOrder
    uuid?: SortOrderInput | SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    surname?: SortOrder
    first_name?: SortOrderInput | SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    relation_how_related?: SortOrderInput | SortOrder
    guardian_proffession?: SortOrderInput | SortOrder
    phonenumber?: SortOrderInput | SortOrder
    email?: SortOrder
    role?: SortOrderInput | SortOrder
    user_type?: SortOrderInput | SortOrder
    password?: SortOrderInput | SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    guardian_blocked_reason?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: GuardianCountOrderByAggregateInput
    _avg?: GuardianAvgOrderByAggregateInput
    _max?: GuardianMaxOrderByAggregateInput
    _min?: GuardianMinOrderByAggregateInput
    _sum?: GuardianSumOrderByAggregateInput
  }

  export type GuardianScalarWhereWithAggregatesInput = {
    AND?: GuardianScalarWhereWithAggregatesInput | GuardianScalarWhereWithAggregatesInput[]
    OR?: GuardianScalarWhereWithAggregatesInput[]
    NOT?: GuardianScalarWhereWithAggregatesInput | GuardianScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Guardian"> | number
    uuid?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    school_id?: IntWithAggregatesFilter<"Guardian"> | number
    branch_id?: IntWithAggregatesFilter<"Guardian"> | number
    surname?: StringWithAggregatesFilter<"Guardian"> | string
    first_name?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    guardian_sex?: IntWithAggregatesFilter<"Guardian"> | number
    is_married?: IntWithAggregatesFilter<"Guardian"> | number
    marriage_disolved?: IntWithAggregatesFilter<"Guardian"> | number
    is_parent?: IntWithAggregatesFilter<"Guardian"> | number
    relation_how_related?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    guardian_proffession?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    phonenumber?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    email?: StringWithAggregatesFilter<"Guardian"> | string
    role?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    user_type?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    password?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    use_role?: IntWithAggregatesFilter<"Guardian"> | number
    guardian_active?: IntWithAggregatesFilter<"Guardian"> | number
    guardian_blocked_reason?: StringNullableWithAggregatesFilter<"Guardian"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"Guardian"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Guardian"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Guardian"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Guardian"> | Date | string | null
  }

  export type StudentGuardianWhereInput = {
    AND?: StudentGuardianWhereInput | StudentGuardianWhereInput[]
    OR?: StudentGuardianWhereInput[]
    NOT?: StudentGuardianWhereInput | StudentGuardianWhereInput[]
    id?: IntFilter<"StudentGuardian"> | number
    branch_id?: IntFilter<"StudentGuardian"> | number
    student_id?: IntFilter<"StudentGuardian"> | number
    guardian_id?: IntFilter<"StudentGuardian"> | number
    created_by?: IntNullableFilter<"StudentGuardian"> | number | null
    created_at?: DateTimeFilter<"StudentGuardian"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentGuardian"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentGuardian"> | Date | string | null
    deleted_by?: IntNullableFilter<"StudentGuardian"> | number | null
  }

  export type StudentGuardianOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
  }

  export type StudentGuardianWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    student_id_guardian_id?: StudentGuardianStudent_idGuardian_idCompoundUniqueInput
    AND?: StudentGuardianWhereInput | StudentGuardianWhereInput[]
    OR?: StudentGuardianWhereInput[]
    NOT?: StudentGuardianWhereInput | StudentGuardianWhereInput[]
    branch_id?: IntFilter<"StudentGuardian"> | number
    student_id?: IntFilter<"StudentGuardian"> | number
    guardian_id?: IntFilter<"StudentGuardian"> | number
    created_by?: IntNullableFilter<"StudentGuardian"> | number | null
    created_at?: DateTimeFilter<"StudentGuardian"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentGuardian"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentGuardian"> | Date | string | null
    deleted_by?: IntNullableFilter<"StudentGuardian"> | number | null
  }, "id" | "student_id_guardian_id">

  export type StudentGuardianOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: StudentGuardianCountOrderByAggregateInput
    _avg?: StudentGuardianAvgOrderByAggregateInput
    _max?: StudentGuardianMaxOrderByAggregateInput
    _min?: StudentGuardianMinOrderByAggregateInput
    _sum?: StudentGuardianSumOrderByAggregateInput
  }

  export type StudentGuardianScalarWhereWithAggregatesInput = {
    AND?: StudentGuardianScalarWhereWithAggregatesInput | StudentGuardianScalarWhereWithAggregatesInput[]
    OR?: StudentGuardianScalarWhereWithAggregatesInput[]
    NOT?: StudentGuardianScalarWhereWithAggregatesInput | StudentGuardianScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"StudentGuardian"> | number
    branch_id?: IntWithAggregatesFilter<"StudentGuardian"> | number
    student_id?: IntWithAggregatesFilter<"StudentGuardian"> | number
    guardian_id?: IntWithAggregatesFilter<"StudentGuardian"> | number
    created_by?: IntNullableWithAggregatesFilter<"StudentGuardian"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"StudentGuardian"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"StudentGuardian"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"StudentGuardian"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"StudentGuardian"> | number | null
  }

  export type PermissionWhereInput = {
    AND?: PermissionWhereInput | PermissionWhereInput[]
    OR?: PermissionWhereInput[]
    NOT?: PermissionWhereInput | PermissionWhereInput[]
    id?: IntFilter<"Permission"> | number
    name?: StringFilter<"Permission"> | string
    display_name?: StringFilter<"Permission"> | string
    description?: StringNullableFilter<"Permission"> | string | null
    is_crud?: IntFilter<"Permission"> | number
    created_at?: DateTimeFilter<"Permission"> | Date | string
    created_by?: IntNullableFilter<"Permission"> | number | null
    updated_at?: DateTimeNullableFilter<"Permission"> | Date | string | null
    updated_by?: IntNullableFilter<"Permission"> | number | null
    deleted_at?: DateTimeNullableFilter<"Permission"> | Date | string | null
    deleted_by?: IntNullableFilter<"Permission"> | number | null
    RoleCrudPermission?: RoleCrudPermissionListRelationFilter
    UserCrudPermission?: UserCrudPermissionListRelationFilter
    RolePermission?: RolePermissionListRelationFilter
    UserPermission?: UserPermissionListRelationFilter
  }

  export type PermissionOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrderInput | SortOrder
    is_crud?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    RoleCrudPermission?: RoleCrudPermissionOrderByRelationAggregateInput
    UserCrudPermission?: UserCrudPermissionOrderByRelationAggregateInput
    RolePermission?: RolePermissionOrderByRelationAggregateInput
    UserPermission?: UserPermissionOrderByRelationAggregateInput
    _relevance?: PermissionOrderByRelevanceInput
  }

  export type PermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    AND?: PermissionWhereInput | PermissionWhereInput[]
    OR?: PermissionWhereInput[]
    NOT?: PermissionWhereInput | PermissionWhereInput[]
    display_name?: StringFilter<"Permission"> | string
    description?: StringNullableFilter<"Permission"> | string | null
    is_crud?: IntFilter<"Permission"> | number
    created_at?: DateTimeFilter<"Permission"> | Date | string
    created_by?: IntNullableFilter<"Permission"> | number | null
    updated_at?: DateTimeNullableFilter<"Permission"> | Date | string | null
    updated_by?: IntNullableFilter<"Permission"> | number | null
    deleted_at?: DateTimeNullableFilter<"Permission"> | Date | string | null
    deleted_by?: IntNullableFilter<"Permission"> | number | null
    RoleCrudPermission?: RoleCrudPermissionListRelationFilter
    UserCrudPermission?: UserCrudPermissionListRelationFilter
    RolePermission?: RolePermissionListRelationFilter
    UserPermission?: UserPermissionListRelationFilter
  }, "id" | "name">

  export type PermissionOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrderInput | SortOrder
    is_crud?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: PermissionCountOrderByAggregateInput
    _avg?: PermissionAvgOrderByAggregateInput
    _max?: PermissionMaxOrderByAggregateInput
    _min?: PermissionMinOrderByAggregateInput
    _sum?: PermissionSumOrderByAggregateInput
  }

  export type PermissionScalarWhereWithAggregatesInput = {
    AND?: PermissionScalarWhereWithAggregatesInput | PermissionScalarWhereWithAggregatesInput[]
    OR?: PermissionScalarWhereWithAggregatesInput[]
    NOT?: PermissionScalarWhereWithAggregatesInput | PermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Permission"> | number
    name?: StringWithAggregatesFilter<"Permission"> | string
    display_name?: StringWithAggregatesFilter<"Permission"> | string
    description?: StringNullableWithAggregatesFilter<"Permission"> | string | null
    is_crud?: IntWithAggregatesFilter<"Permission"> | number
    created_at?: DateTimeWithAggregatesFilter<"Permission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"Permission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"Permission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"Permission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Permission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"Permission"> | number | null
  }

  export type RoleCrudPermissionWhereInput = {
    AND?: RoleCrudPermissionWhereInput | RoleCrudPermissionWhereInput[]
    OR?: RoleCrudPermissionWhereInput[]
    NOT?: RoleCrudPermissionWhereInput | RoleCrudPermissionWhereInput[]
    id?: IntFilter<"RoleCrudPermission"> | number
    role_id?: IntFilter<"RoleCrudPermission"> | number
    permission_id?: IntFilter<"RoleCrudPermission"> | number
    permission_menu?: IntFilter<"RoleCrudPermission"> | number
    permission_create?: IntFilter<"RoleCrudPermission"> | number
    permission_read?: IntFilter<"RoleCrudPermission"> | number
    permission_update?: IntFilter<"RoleCrudPermission"> | number
    permission_delete?: IntFilter<"RoleCrudPermission"> | number
    created_at?: DateTimeFilter<"RoleCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    role?: XOR<RoleScalarRelationFilter, RoleWhereInput>
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
  }

  export type RoleCrudPermissionOrderByWithRelationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    role?: RoleOrderByWithRelationInput
    permission?: PermissionOrderByWithRelationInput
  }

  export type RoleCrudPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: RoleCrudPermissionWhereInput | RoleCrudPermissionWhereInput[]
    OR?: RoleCrudPermissionWhereInput[]
    NOT?: RoleCrudPermissionWhereInput | RoleCrudPermissionWhereInput[]
    role_id?: IntFilter<"RoleCrudPermission"> | number
    permission_id?: IntFilter<"RoleCrudPermission"> | number
    permission_menu?: IntFilter<"RoleCrudPermission"> | number
    permission_create?: IntFilter<"RoleCrudPermission"> | number
    permission_read?: IntFilter<"RoleCrudPermission"> | number
    permission_update?: IntFilter<"RoleCrudPermission"> | number
    permission_delete?: IntFilter<"RoleCrudPermission"> | number
    created_at?: DateTimeFilter<"RoleCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    role?: XOR<RoleScalarRelationFilter, RoleWhereInput>
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
  }, "id">

  export type RoleCrudPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: RoleCrudPermissionCountOrderByAggregateInput
    _avg?: RoleCrudPermissionAvgOrderByAggregateInput
    _max?: RoleCrudPermissionMaxOrderByAggregateInput
    _min?: RoleCrudPermissionMinOrderByAggregateInput
    _sum?: RoleCrudPermissionSumOrderByAggregateInput
  }

  export type RoleCrudPermissionScalarWhereWithAggregatesInput = {
    AND?: RoleCrudPermissionScalarWhereWithAggregatesInput | RoleCrudPermissionScalarWhereWithAggregatesInput[]
    OR?: RoleCrudPermissionScalarWhereWithAggregatesInput[]
    NOT?: RoleCrudPermissionScalarWhereWithAggregatesInput | RoleCrudPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    role_id?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_id?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_menu?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_create?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_read?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_update?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    permission_delete?: IntWithAggregatesFilter<"RoleCrudPermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"RoleCrudPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"RoleCrudPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"RoleCrudPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"RoleCrudPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"RoleCrudPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"RoleCrudPermission"> | number | null
  }

  export type RoleMaxCrudPermissionsWhereInput = {
    AND?: RoleMaxCrudPermissionsWhereInput | RoleMaxCrudPermissionsWhereInput[]
    OR?: RoleMaxCrudPermissionsWhereInput[]
    NOT?: RoleMaxCrudPermissionsWhereInput | RoleMaxCrudPermissionsWhereInput[]
    id?: IntFilter<"RoleMaxCrudPermissions"> | number
    role_id?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_id?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_menu?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_create?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_read?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_update?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_delete?: IntFilter<"RoleMaxCrudPermissions"> | number
    created_at?: DateTimeFilter<"RoleMaxCrudPermissions"> | Date | string
    created_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleMaxCrudPermissions"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleMaxCrudPermissions"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
  }

  export type RoleMaxCrudPermissionsOrderByWithRelationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
  }

  export type RoleMaxCrudPermissionsWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: RoleMaxCrudPermissionsWhereInput | RoleMaxCrudPermissionsWhereInput[]
    OR?: RoleMaxCrudPermissionsWhereInput[]
    NOT?: RoleMaxCrudPermissionsWhereInput | RoleMaxCrudPermissionsWhereInput[]
    role_id?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_id?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_menu?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_create?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_read?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_update?: IntFilter<"RoleMaxCrudPermissions"> | number
    permission_delete?: IntFilter<"RoleMaxCrudPermissions"> | number
    created_at?: DateTimeFilter<"RoleMaxCrudPermissions"> | Date | string
    created_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleMaxCrudPermissions"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleMaxCrudPermissions"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleMaxCrudPermissions"> | number | null
  }, "id">

  export type RoleMaxCrudPermissionsOrderByWithAggregationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: RoleMaxCrudPermissionsCountOrderByAggregateInput
    _avg?: RoleMaxCrudPermissionsAvgOrderByAggregateInput
    _max?: RoleMaxCrudPermissionsMaxOrderByAggregateInput
    _min?: RoleMaxCrudPermissionsMinOrderByAggregateInput
    _sum?: RoleMaxCrudPermissionsSumOrderByAggregateInput
  }

  export type RoleMaxCrudPermissionsScalarWhereWithAggregatesInput = {
    AND?: RoleMaxCrudPermissionsScalarWhereWithAggregatesInput | RoleMaxCrudPermissionsScalarWhereWithAggregatesInput[]
    OR?: RoleMaxCrudPermissionsScalarWhereWithAggregatesInput[]
    NOT?: RoleMaxCrudPermissionsScalarWhereWithAggregatesInput | RoleMaxCrudPermissionsScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    role_id?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_id?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_menu?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_create?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_read?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_update?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    permission_delete?: IntWithAggregatesFilter<"RoleMaxCrudPermissions"> | number
    created_at?: DateTimeWithAggregatesFilter<"RoleMaxCrudPermissions"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"RoleMaxCrudPermissions"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"RoleMaxCrudPermissions"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"RoleMaxCrudPermissions"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"RoleMaxCrudPermissions"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"RoleMaxCrudPermissions"> | number | null
  }

  export type RoleMaxPermissionWhereInput = {
    AND?: RoleMaxPermissionWhereInput | RoleMaxPermissionWhereInput[]
    OR?: RoleMaxPermissionWhereInput[]
    NOT?: RoleMaxPermissionWhereInput | RoleMaxPermissionWhereInput[]
    id?: IntFilter<"RoleMaxPermission"> | number
    role_id?: IntFilter<"RoleMaxPermission"> | number
    permission_id?: IntFilter<"RoleMaxPermission"> | number
    created_at?: DateTimeFilter<"RoleMaxPermission"> | Date | string
    created_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleMaxPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleMaxPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
  }

  export type RoleMaxPermissionOrderByWithRelationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
  }

  export type RoleMaxPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: RoleMaxPermissionWhereInput | RoleMaxPermissionWhereInput[]
    OR?: RoleMaxPermissionWhereInput[]
    NOT?: RoleMaxPermissionWhereInput | RoleMaxPermissionWhereInput[]
    role_id?: IntFilter<"RoleMaxPermission"> | number
    permission_id?: IntFilter<"RoleMaxPermission"> | number
    created_at?: DateTimeFilter<"RoleMaxPermission"> | Date | string
    created_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleMaxPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleMaxPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleMaxPermission"> | number | null
  }, "id">

  export type RoleMaxPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: RoleMaxPermissionCountOrderByAggregateInput
    _avg?: RoleMaxPermissionAvgOrderByAggregateInput
    _max?: RoleMaxPermissionMaxOrderByAggregateInput
    _min?: RoleMaxPermissionMinOrderByAggregateInput
    _sum?: RoleMaxPermissionSumOrderByAggregateInput
  }

  export type RoleMaxPermissionScalarWhereWithAggregatesInput = {
    AND?: RoleMaxPermissionScalarWhereWithAggregatesInput | RoleMaxPermissionScalarWhereWithAggregatesInput[]
    OR?: RoleMaxPermissionScalarWhereWithAggregatesInput[]
    NOT?: RoleMaxPermissionScalarWhereWithAggregatesInput | RoleMaxPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"RoleMaxPermission"> | number
    role_id?: IntWithAggregatesFilter<"RoleMaxPermission"> | number
    permission_id?: IntWithAggregatesFilter<"RoleMaxPermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"RoleMaxPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"RoleMaxPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"RoleMaxPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"RoleMaxPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"RoleMaxPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"RoleMaxPermission"> | number | null
  }

  export type RolePermissionWhereInput = {
    AND?: RolePermissionWhereInput | RolePermissionWhereInput[]
    OR?: RolePermissionWhereInput[]
    NOT?: RolePermissionWhereInput | RolePermissionWhereInput[]
    id?: IntFilter<"RolePermission"> | number
    role_id?: IntFilter<"RolePermission"> | number
    permission_id?: IntFilter<"RolePermission"> | number
    created_at?: DateTimeFilter<"RolePermission"> | Date | string
    created_by?: IntNullableFilter<"RolePermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RolePermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RolePermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
  }

  export type RolePermissionOrderByWithRelationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    permission?: PermissionOrderByWithRelationInput
  }

  export type RolePermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    role_id_permission_id?: RolePermissionRole_idPermission_idCompoundUniqueInput
    AND?: RolePermissionWhereInput | RolePermissionWhereInput[]
    OR?: RolePermissionWhereInput[]
    NOT?: RolePermissionWhereInput | RolePermissionWhereInput[]
    role_id?: IntFilter<"RolePermission"> | number
    permission_id?: IntFilter<"RolePermission"> | number
    created_at?: DateTimeFilter<"RolePermission"> | Date | string
    created_by?: IntNullableFilter<"RolePermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RolePermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RolePermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
  }, "id" | "role_id_permission_id">

  export type RolePermissionOrderByWithAggregationInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: RolePermissionCountOrderByAggregateInput
    _avg?: RolePermissionAvgOrderByAggregateInput
    _max?: RolePermissionMaxOrderByAggregateInput
    _min?: RolePermissionMinOrderByAggregateInput
    _sum?: RolePermissionSumOrderByAggregateInput
  }

  export type RolePermissionScalarWhereWithAggregatesInput = {
    AND?: RolePermissionScalarWhereWithAggregatesInput | RolePermissionScalarWhereWithAggregatesInput[]
    OR?: RolePermissionScalarWhereWithAggregatesInput[]
    NOT?: RolePermissionScalarWhereWithAggregatesInput | RolePermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"RolePermission"> | number
    role_id?: IntWithAggregatesFilter<"RolePermission"> | number
    permission_id?: IntWithAggregatesFilter<"RolePermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"RolePermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"RolePermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"RolePermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"RolePermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"RolePermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"RolePermission"> | number | null
  }

  export type RoleWhereInput = {
    AND?: RoleWhereInput | RoleWhereInput[]
    OR?: RoleWhereInput[]
    NOT?: RoleWhereInput | RoleWhereInput[]
    id?: IntFilter<"Role"> | number
    name?: StringFilter<"Role"> | string
    display_name?: StringFilter<"Role"> | string
    description?: StringFilter<"Role"> | string
    created_at?: DateTimeFilter<"Role"> | Date | string
    created_by?: IntNullableFilter<"Role"> | number | null
    updated_at?: DateTimeNullableFilter<"Role"> | Date | string | null
    updated_by?: IntNullableFilter<"Role"> | number | null
    deleted_at?: DateTimeNullableFilter<"Role"> | Date | string | null
    deleted_by?: IntNullableFilter<"Role"> | number | null
    RoleCrudPermission?: RoleCrudPermissionListRelationFilter
  }

  export type RoleOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    RoleCrudPermission?: RoleCrudPermissionOrderByRelationAggregateInput
    _relevance?: RoleOrderByRelevanceInput
  }

  export type RoleWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    AND?: RoleWhereInput | RoleWhereInput[]
    OR?: RoleWhereInput[]
    NOT?: RoleWhereInput | RoleWhereInput[]
    display_name?: StringFilter<"Role"> | string
    description?: StringFilter<"Role"> | string
    created_at?: DateTimeFilter<"Role"> | Date | string
    created_by?: IntNullableFilter<"Role"> | number | null
    updated_at?: DateTimeNullableFilter<"Role"> | Date | string | null
    updated_by?: IntNullableFilter<"Role"> | number | null
    deleted_at?: DateTimeNullableFilter<"Role"> | Date | string | null
    deleted_by?: IntNullableFilter<"Role"> | number | null
    RoleCrudPermission?: RoleCrudPermissionListRelationFilter
  }, "id" | "name">

  export type RoleOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: RoleCountOrderByAggregateInput
    _avg?: RoleAvgOrderByAggregateInput
    _max?: RoleMaxOrderByAggregateInput
    _min?: RoleMinOrderByAggregateInput
    _sum?: RoleSumOrderByAggregateInput
  }

  export type RoleScalarWhereWithAggregatesInput = {
    AND?: RoleScalarWhereWithAggregatesInput | RoleScalarWhereWithAggregatesInput[]
    OR?: RoleScalarWhereWithAggregatesInput[]
    NOT?: RoleScalarWhereWithAggregatesInput | RoleScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Role"> | number
    name?: StringWithAggregatesFilter<"Role"> | string
    display_name?: StringWithAggregatesFilter<"Role"> | string
    description?: StringWithAggregatesFilter<"Role"> | string
    created_at?: DateTimeWithAggregatesFilter<"Role"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"Role"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"Role"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"Role"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Role"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"Role"> | number | null
  }

  export type UserCrudPermissionWhereInput = {
    AND?: UserCrudPermissionWhereInput | UserCrudPermissionWhereInput[]
    OR?: UserCrudPermissionWhereInput[]
    NOT?: UserCrudPermissionWhereInput | UserCrudPermissionWhereInput[]
    id?: IntFilter<"UserCrudPermission"> | number
    user_id?: IntFilter<"UserCrudPermission"> | number
    user_type?: StringFilter<"UserCrudPermission"> | string
    permission_id?: IntFilter<"UserCrudPermission"> | number
    permission_menu?: IntFilter<"UserCrudPermission"> | number
    permission_create?: IntFilter<"UserCrudPermission"> | number
    permission_read?: IntFilter<"UserCrudPermission"> | number
    permission_update?: IntFilter<"UserCrudPermission"> | number
    permission_delete?: IntFilter<"UserCrudPermission"> | number
    created_at?: DateTimeFilter<"UserCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
    User?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }

  export type UserCrudPermissionOrderByWithRelationInput = {
    id?: SortOrder
    user_id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    permission?: PermissionOrderByWithRelationInput
    User?: UserOrderByWithRelationInput
    _relevance?: UserCrudPermissionOrderByRelevanceInput
  }

  export type UserCrudPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UserCrudPermissionWhereInput | UserCrudPermissionWhereInput[]
    OR?: UserCrudPermissionWhereInput[]
    NOT?: UserCrudPermissionWhereInput | UserCrudPermissionWhereInput[]
    user_id?: IntFilter<"UserCrudPermission"> | number
    user_type?: StringFilter<"UserCrudPermission"> | string
    permission_id?: IntFilter<"UserCrudPermission"> | number
    permission_menu?: IntFilter<"UserCrudPermission"> | number
    permission_create?: IntFilter<"UserCrudPermission"> | number
    permission_read?: IntFilter<"UserCrudPermission"> | number
    permission_update?: IntFilter<"UserCrudPermission"> | number
    permission_delete?: IntFilter<"UserCrudPermission"> | number
    created_at?: DateTimeFilter<"UserCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
    User?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }, "id">

  export type UserCrudPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    user_id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: UserCrudPermissionCountOrderByAggregateInput
    _avg?: UserCrudPermissionAvgOrderByAggregateInput
    _max?: UserCrudPermissionMaxOrderByAggregateInput
    _min?: UserCrudPermissionMinOrderByAggregateInput
    _sum?: UserCrudPermissionSumOrderByAggregateInput
  }

  export type UserCrudPermissionScalarWhereWithAggregatesInput = {
    AND?: UserCrudPermissionScalarWhereWithAggregatesInput | UserCrudPermissionScalarWhereWithAggregatesInput[]
    OR?: UserCrudPermissionScalarWhereWithAggregatesInput[]
    NOT?: UserCrudPermissionScalarWhereWithAggregatesInput | UserCrudPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    user_id?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    user_type?: StringWithAggregatesFilter<"UserCrudPermission"> | string
    permission_id?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    permission_menu?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    permission_create?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    permission_read?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    permission_update?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    permission_delete?: IntWithAggregatesFilter<"UserCrudPermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"UserCrudPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"UserCrudPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"UserCrudPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"UserCrudPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UserCrudPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"UserCrudPermission"> | number | null
  }

  export type UserPermissionWhereInput = {
    AND?: UserPermissionWhereInput | UserPermissionWhereInput[]
    OR?: UserPermissionWhereInput[]
    NOT?: UserPermissionWhereInput | UserPermissionWhereInput[]
    id?: IntFilter<"UserPermission"> | number
    user_id?: IntFilter<"UserPermission"> | number
    permission_id?: IntFilter<"UserPermission"> | number
    user_type?: StringFilter<"UserPermission"> | string
    created_at?: DateTimeFilter<"UserPermission"> | Date | string
    created_by?: IntNullableFilter<"UserPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserPermission"> | number | null
    userId?: IntNullableFilter<"UserPermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
    User?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }

  export type UserPermissionOrderByWithRelationInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    userId?: SortOrderInput | SortOrder
    permission?: PermissionOrderByWithRelationInput
    User?: UserOrderByWithRelationInput
    _relevance?: UserPermissionOrderByRelevanceInput
  }

  export type UserPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    user_id_permission_id_user_type?: UserPermissionUser_idPermission_idUser_typeCompoundUniqueInput
    AND?: UserPermissionWhereInput | UserPermissionWhereInput[]
    OR?: UserPermissionWhereInput[]
    NOT?: UserPermissionWhereInput | UserPermissionWhereInput[]
    user_id?: IntFilter<"UserPermission"> | number
    permission_id?: IntFilter<"UserPermission"> | number
    user_type?: StringFilter<"UserPermission"> | string
    created_at?: DateTimeFilter<"UserPermission"> | Date | string
    created_by?: IntNullableFilter<"UserPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserPermission"> | number | null
    userId?: IntNullableFilter<"UserPermission"> | number | null
    permission?: XOR<PermissionScalarRelationFilter, PermissionWhereInput>
    User?: XOR<UserNullableScalarRelationFilter, UserWhereInput> | null
  }, "id" | "user_id_permission_id_user_type">

  export type UserPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    userId?: SortOrderInput | SortOrder
    _count?: UserPermissionCountOrderByAggregateInput
    _avg?: UserPermissionAvgOrderByAggregateInput
    _max?: UserPermissionMaxOrderByAggregateInput
    _min?: UserPermissionMinOrderByAggregateInput
    _sum?: UserPermissionSumOrderByAggregateInput
  }

  export type UserPermissionScalarWhereWithAggregatesInput = {
    AND?: UserPermissionScalarWhereWithAggregatesInput | UserPermissionScalarWhereWithAggregatesInput[]
    OR?: UserPermissionScalarWhereWithAggregatesInput[]
    NOT?: UserPermissionScalarWhereWithAggregatesInput | UserPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UserPermission"> | number
    user_id?: IntWithAggregatesFilter<"UserPermission"> | number
    permission_id?: IntWithAggregatesFilter<"UserPermission"> | number
    user_type?: StringWithAggregatesFilter<"UserPermission"> | string
    created_at?: DateTimeWithAggregatesFilter<"UserPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"UserPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"UserPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"UserPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UserPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"UserPermission"> | number | null
    userId?: IntNullableWithAggregatesFilter<"UserPermission"> | number | null
  }

  export type UsertypeMaxCrudPermissionWhereInput = {
    AND?: UsertypeMaxCrudPermissionWhereInput | UsertypeMaxCrudPermissionWhereInput[]
    OR?: UsertypeMaxCrudPermissionWhereInput[]
    NOT?: UsertypeMaxCrudPermissionWhereInput | UsertypeMaxCrudPermissionWhereInput[]
    id?: IntFilter<"UsertypeMaxCrudPermission"> | number
    user_type?: StringFilter<"UsertypeMaxCrudPermission"> | string
    permission_id?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_menu?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_create?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_read?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_update?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_delete?: IntFilter<"UsertypeMaxCrudPermission"> | number
    created_at?: DateTimeFilter<"UsertypeMaxCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
  }

  export type UsertypeMaxCrudPermissionOrderByWithRelationInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: UsertypeMaxCrudPermissionOrderByRelevanceInput
  }

  export type UsertypeMaxCrudPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UsertypeMaxCrudPermissionWhereInput | UsertypeMaxCrudPermissionWhereInput[]
    OR?: UsertypeMaxCrudPermissionWhereInput[]
    NOT?: UsertypeMaxCrudPermissionWhereInput | UsertypeMaxCrudPermissionWhereInput[]
    user_type?: StringFilter<"UsertypeMaxCrudPermission"> | string
    permission_id?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_menu?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_create?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_read?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_update?: IntFilter<"UsertypeMaxCrudPermission"> | number
    permission_delete?: IntFilter<"UsertypeMaxCrudPermission"> | number
    created_at?: DateTimeFilter<"UsertypeMaxCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UsertypeMaxCrudPermission"> | number | null
  }, "id">

  export type UsertypeMaxCrudPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: UsertypeMaxCrudPermissionCountOrderByAggregateInput
    _avg?: UsertypeMaxCrudPermissionAvgOrderByAggregateInput
    _max?: UsertypeMaxCrudPermissionMaxOrderByAggregateInput
    _min?: UsertypeMaxCrudPermissionMinOrderByAggregateInput
    _sum?: UsertypeMaxCrudPermissionSumOrderByAggregateInput
  }

  export type UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput = {
    AND?: UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput | UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput[]
    OR?: UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput[]
    NOT?: UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput | UsertypeMaxCrudPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    user_type?: StringWithAggregatesFilter<"UsertypeMaxCrudPermission"> | string
    permission_id?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    permission_menu?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    permission_create?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    permission_read?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    permission_update?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    permission_delete?: IntWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"UsertypeMaxCrudPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UsertypeMaxCrudPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"UsertypeMaxCrudPermission"> | number | null
  }

  export type UsertypeMaxPermissionWhereInput = {
    AND?: UsertypeMaxPermissionWhereInput | UsertypeMaxPermissionWhereInput[]
    OR?: UsertypeMaxPermissionWhereInput[]
    NOT?: UsertypeMaxPermissionWhereInput | UsertypeMaxPermissionWhereInput[]
    id?: IntFilter<"UsertypeMaxPermission"> | number
    user_type?: StringFilter<"UsertypeMaxPermission"> | string
    permission_id?: IntFilter<"UsertypeMaxPermission"> | number
    created_at?: DateTimeFilter<"UsertypeMaxPermission"> | Date | string
    created_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UsertypeMaxPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UsertypeMaxPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
  }

  export type UsertypeMaxPermissionOrderByWithRelationInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: UsertypeMaxPermissionOrderByRelevanceInput
  }

  export type UsertypeMaxPermissionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: UsertypeMaxPermissionWhereInput | UsertypeMaxPermissionWhereInput[]
    OR?: UsertypeMaxPermissionWhereInput[]
    NOT?: UsertypeMaxPermissionWhereInput | UsertypeMaxPermissionWhereInput[]
    user_type?: StringFilter<"UsertypeMaxPermission"> | string
    permission_id?: IntFilter<"UsertypeMaxPermission"> | number
    created_at?: DateTimeFilter<"UsertypeMaxPermission"> | Date | string
    created_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UsertypeMaxPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UsertypeMaxPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UsertypeMaxPermission"> | number | null
  }, "id">

  export type UsertypeMaxPermissionOrderByWithAggregationInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: UsertypeMaxPermissionCountOrderByAggregateInput
    _avg?: UsertypeMaxPermissionAvgOrderByAggregateInput
    _max?: UsertypeMaxPermissionMaxOrderByAggregateInput
    _min?: UsertypeMaxPermissionMinOrderByAggregateInput
    _sum?: UsertypeMaxPermissionSumOrderByAggregateInput
  }

  export type UsertypeMaxPermissionScalarWhereWithAggregatesInput = {
    AND?: UsertypeMaxPermissionScalarWhereWithAggregatesInput | UsertypeMaxPermissionScalarWhereWithAggregatesInput[]
    OR?: UsertypeMaxPermissionScalarWhereWithAggregatesInput[]
    NOT?: UsertypeMaxPermissionScalarWhereWithAggregatesInput | UsertypeMaxPermissionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"UsertypeMaxPermission"> | number
    user_type?: StringWithAggregatesFilter<"UsertypeMaxPermission"> | string
    permission_id?: IntWithAggregatesFilter<"UsertypeMaxPermission"> | number
    created_at?: DateTimeWithAggregatesFilter<"UsertypeMaxPermission"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"UsertypeMaxPermission"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"UsertypeMaxPermission"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"UsertypeMaxPermission"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"UsertypeMaxPermission"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"UsertypeMaxPermission"> | number | null
  }

  export type QualificationWhereInput = {
    AND?: QualificationWhereInput | QualificationWhereInput[]
    OR?: QualificationWhereInput[]
    NOT?: QualificationWhereInput | QualificationWhereInput[]
    id?: IntFilter<"Qualification"> | number
    qualification_name?: StringFilter<"Qualification"> | string
    created_by?: IntNullableFilter<"Qualification"> | number | null
    created_at?: DateTimeFilter<"Qualification"> | Date | string
    updated_at?: DateTimeNullableFilter<"Qualification"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Qualification"> | Date | string | null
  }

  export type QualificationOrderByWithRelationInput = {
    id?: SortOrder
    qualification_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: QualificationOrderByRelevanceInput
  }

  export type QualificationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: QualificationWhereInput | QualificationWhereInput[]
    OR?: QualificationWhereInput[]
    NOT?: QualificationWhereInput | QualificationWhereInput[]
    qualification_name?: StringFilter<"Qualification"> | string
    created_by?: IntNullableFilter<"Qualification"> | number | null
    created_at?: DateTimeFilter<"Qualification"> | Date | string
    updated_at?: DateTimeNullableFilter<"Qualification"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Qualification"> | Date | string | null
  }, "id">

  export type QualificationOrderByWithAggregationInput = {
    id?: SortOrder
    qualification_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: QualificationCountOrderByAggregateInput
    _avg?: QualificationAvgOrderByAggregateInput
    _max?: QualificationMaxOrderByAggregateInput
    _min?: QualificationMinOrderByAggregateInput
    _sum?: QualificationSumOrderByAggregateInput
  }

  export type QualificationScalarWhereWithAggregatesInput = {
    AND?: QualificationScalarWhereWithAggregatesInput | QualificationScalarWhereWithAggregatesInput[]
    OR?: QualificationScalarWhereWithAggregatesInput[]
    NOT?: QualificationScalarWhereWithAggregatesInput | QualificationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Qualification"> | number
    qualification_name?: StringWithAggregatesFilter<"Qualification"> | string
    created_by?: IntNullableWithAggregatesFilter<"Qualification"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Qualification"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Qualification"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Qualification"> | Date | string | null
  }

  export type GenderWhereInput = {
    AND?: GenderWhereInput | GenderWhereInput[]
    OR?: GenderWhereInput[]
    NOT?: GenderWhereInput | GenderWhereInput[]
    id?: IntFilter<"Gender"> | number
    gender_name?: StringFilter<"Gender"> | string
    created_by?: IntNullableFilter<"Gender"> | number | null
    created_at?: DateTimeFilter<"Gender"> | Date | string
    updated_at?: DateTimeNullableFilter<"Gender"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Gender"> | Date | string | null
  }

  export type GenderOrderByWithRelationInput = {
    id?: SortOrder
    gender_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: GenderOrderByRelevanceInput
  }

  export type GenderWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: GenderWhereInput | GenderWhereInput[]
    OR?: GenderWhereInput[]
    NOT?: GenderWhereInput | GenderWhereInput[]
    gender_name?: StringFilter<"Gender"> | string
    created_by?: IntNullableFilter<"Gender"> | number | null
    created_at?: DateTimeFilter<"Gender"> | Date | string
    updated_at?: DateTimeNullableFilter<"Gender"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Gender"> | Date | string | null
  }, "id">

  export type GenderOrderByWithAggregationInput = {
    id?: SortOrder
    gender_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: GenderCountOrderByAggregateInput
    _avg?: GenderAvgOrderByAggregateInput
    _max?: GenderMaxOrderByAggregateInput
    _min?: GenderMinOrderByAggregateInput
    _sum?: GenderSumOrderByAggregateInput
  }

  export type GenderScalarWhereWithAggregatesInput = {
    AND?: GenderScalarWhereWithAggregatesInput | GenderScalarWhereWithAggregatesInput[]
    OR?: GenderScalarWhereWithAggregatesInput[]
    NOT?: GenderScalarWhereWithAggregatesInput | GenderScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Gender"> | number
    gender_name?: StringWithAggregatesFilter<"Gender"> | string
    created_by?: IntNullableWithAggregatesFilter<"Gender"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Gender"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Gender"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Gender"> | Date | string | null
  }

  export type TermWhereInput = {
    AND?: TermWhereInput | TermWhereInput[]
    OR?: TermWhereInput[]
    NOT?: TermWhereInput | TermWhereInput[]
    id?: IntFilter<"Term"> | number
    term_name?: StringFilter<"Term"> | string
    term_alias?: StringFilter<"Term"> | string
    created_by?: IntNullableFilter<"Term"> | number | null
    created_at?: DateTimeFilter<"Term"> | Date | string
    updated_at?: DateTimeNullableFilter<"Term"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Term"> | Date | string | null
    SessionTerm?: SessionTermListRelationFilter
    exams?: ExamListRelationFilter
  }

  export type TermOrderByWithRelationInput = {
    id?: SortOrder
    term_name?: SortOrder
    term_alias?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    SessionTerm?: SessionTermOrderByRelationAggregateInput
    exams?: ExamOrderByRelationAggregateInput
    _relevance?: TermOrderByRelevanceInput
  }

  export type TermWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: TermWhereInput | TermWhereInput[]
    OR?: TermWhereInput[]
    NOT?: TermWhereInput | TermWhereInput[]
    term_name?: StringFilter<"Term"> | string
    term_alias?: StringFilter<"Term"> | string
    created_by?: IntNullableFilter<"Term"> | number | null
    created_at?: DateTimeFilter<"Term"> | Date | string
    updated_at?: DateTimeNullableFilter<"Term"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Term"> | Date | string | null
    SessionTerm?: SessionTermListRelationFilter
    exams?: ExamListRelationFilter
  }, "id">

  export type TermOrderByWithAggregationInput = {
    id?: SortOrder
    term_name?: SortOrder
    term_alias?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: TermCountOrderByAggregateInput
    _avg?: TermAvgOrderByAggregateInput
    _max?: TermMaxOrderByAggregateInput
    _min?: TermMinOrderByAggregateInput
    _sum?: TermSumOrderByAggregateInput
  }

  export type TermScalarWhereWithAggregatesInput = {
    AND?: TermScalarWhereWithAggregatesInput | TermScalarWhereWithAggregatesInput[]
    OR?: TermScalarWhereWithAggregatesInput[]
    NOT?: TermScalarWhereWithAggregatesInput | TermScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Term"> | number
    term_name?: StringWithAggregatesFilter<"Term"> | string
    term_alias?: StringWithAggregatesFilter<"Term"> | string
    created_by?: IntNullableWithAggregatesFilter<"Term"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Term"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Term"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Term"> | Date | string | null
  }

  export type ReligionWhereInput = {
    AND?: ReligionWhereInput | ReligionWhereInput[]
    OR?: ReligionWhereInput[]
    NOT?: ReligionWhereInput | ReligionWhereInput[]
    id?: IntFilter<"Religion"> | number
    religion_name?: StringFilter<"Religion"> | string
    created_by?: IntNullableFilter<"Religion"> | number | null
    created_at?: DateTimeFilter<"Religion"> | Date | string
    updated_at?: DateTimeNullableFilter<"Religion"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Religion"> | Date | string | null
  }

  export type ReligionOrderByWithRelationInput = {
    id?: SortOrder
    religion_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ReligionOrderByRelevanceInput
  }

  export type ReligionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ReligionWhereInput | ReligionWhereInput[]
    OR?: ReligionWhereInput[]
    NOT?: ReligionWhereInput | ReligionWhereInput[]
    religion_name?: StringFilter<"Religion"> | string
    created_by?: IntNullableFilter<"Religion"> | number | null
    created_at?: DateTimeFilter<"Religion"> | Date | string
    updated_at?: DateTimeNullableFilter<"Religion"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Religion"> | Date | string | null
  }, "id">

  export type ReligionOrderByWithAggregationInput = {
    id?: SortOrder
    religion_name?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ReligionCountOrderByAggregateInput
    _avg?: ReligionAvgOrderByAggregateInput
    _max?: ReligionMaxOrderByAggregateInput
    _min?: ReligionMinOrderByAggregateInput
    _sum?: ReligionSumOrderByAggregateInput
  }

  export type ReligionScalarWhereWithAggregatesInput = {
    AND?: ReligionScalarWhereWithAggregatesInput | ReligionScalarWhereWithAggregatesInput[]
    OR?: ReligionScalarWhereWithAggregatesInput[]
    NOT?: ReligionScalarWhereWithAggregatesInput | ReligionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Religion"> | number
    religion_name?: StringWithAggregatesFilter<"Religion"> | string
    created_by?: IntNullableWithAggregatesFilter<"Religion"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Religion"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Religion"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Religion"> | Date | string | null
  }

  export type ComplainFromTeacherWhereInput = {
    AND?: ComplainFromTeacherWhereInput | ComplainFromTeacherWhereInput[]
    OR?: ComplainFromTeacherWhereInput[]
    NOT?: ComplainFromTeacherWhereInput | ComplainFromTeacherWhereInput[]
    id?: IntFilter<"ComplainFromTeacher"> | number
    branch_id?: IntFilter<"ComplainFromTeacher"> | number
    session_class_id?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    student_id?: IntFilter<"ComplainFromTeacher"> | number
    complain?: StringFilter<"ComplainFromTeacher"> | string
    is_urgent?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    created_by?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    created_at?: DateTimeFilter<"ComplainFromTeacher"> | Date | string
    updated_at?: DateTimeNullableFilter<"ComplainFromTeacher"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ComplainFromTeacher"> | Date | string | null
  }

  export type ComplainFromTeacherOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    student_id?: SortOrder
    complain?: SortOrder
    is_urgent?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ComplainFromTeacherOrderByRelevanceInput
  }

  export type ComplainFromTeacherWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ComplainFromTeacherWhereInput | ComplainFromTeacherWhereInput[]
    OR?: ComplainFromTeacherWhereInput[]
    NOT?: ComplainFromTeacherWhereInput | ComplainFromTeacherWhereInput[]
    branch_id?: IntFilter<"ComplainFromTeacher"> | number
    session_class_id?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    student_id?: IntFilter<"ComplainFromTeacher"> | number
    complain?: StringFilter<"ComplainFromTeacher"> | string
    is_urgent?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    created_by?: IntNullableFilter<"ComplainFromTeacher"> | number | null
    created_at?: DateTimeFilter<"ComplainFromTeacher"> | Date | string
    updated_at?: DateTimeNullableFilter<"ComplainFromTeacher"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ComplainFromTeacher"> | Date | string | null
  }, "id">

  export type ComplainFromTeacherOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    student_id?: SortOrder
    complain?: SortOrder
    is_urgent?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ComplainFromTeacherCountOrderByAggregateInput
    _avg?: ComplainFromTeacherAvgOrderByAggregateInput
    _max?: ComplainFromTeacherMaxOrderByAggregateInput
    _min?: ComplainFromTeacherMinOrderByAggregateInput
    _sum?: ComplainFromTeacherSumOrderByAggregateInput
  }

  export type ComplainFromTeacherScalarWhereWithAggregatesInput = {
    AND?: ComplainFromTeacherScalarWhereWithAggregatesInput | ComplainFromTeacherScalarWhereWithAggregatesInput[]
    OR?: ComplainFromTeacherScalarWhereWithAggregatesInput[]
    NOT?: ComplainFromTeacherScalarWhereWithAggregatesInput | ComplainFromTeacherScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ComplainFromTeacher"> | number
    branch_id?: IntWithAggregatesFilter<"ComplainFromTeacher"> | number
    session_class_id?: IntNullableWithAggregatesFilter<"ComplainFromTeacher"> | number | null
    student_id?: IntWithAggregatesFilter<"ComplainFromTeacher"> | number
    complain?: StringWithAggregatesFilter<"ComplainFromTeacher"> | string
    is_urgent?: IntNullableWithAggregatesFilter<"ComplainFromTeacher"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"ComplainFromTeacher"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ComplainFromTeacher"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ComplainFromTeacher"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ComplainFromTeacher"> | Date | string | null
  }

  export type AttendanceWhereInput = {
    AND?: AttendanceWhereInput | AttendanceWhereInput[]
    OR?: AttendanceWhereInput[]
    NOT?: AttendanceWhereInput | AttendanceWhereInput[]
    id?: IntFilter<"Attendance"> | number
    branch_id?: IntFilter<"Attendance"> | number
    session_class_id?: IntNullableFilter<"Attendance"> | number | null
    student_id?: IntNullableFilter<"Attendance"> | number | null
    staff_id?: IntNullableFilter<"Attendance"> | number | null
    attendance_date?: DateTimeFilter<"Attendance"> | Date | string
    status?: IntNullableFilter<"Attendance"> | number | null
    created_by?: IntNullableFilter<"Attendance"> | number | null
    created_at?: DateTimeFilter<"Attendance"> | Date | string
    updated_at?: DateTimeNullableFilter<"Attendance"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Attendance"> | Date | string | null
  }

  export type AttendanceOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    student_id?: SortOrderInput | SortOrder
    staff_id?: SortOrderInput | SortOrder
    attendance_date?: SortOrder
    status?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type AttendanceWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: AttendanceWhereInput | AttendanceWhereInput[]
    OR?: AttendanceWhereInput[]
    NOT?: AttendanceWhereInput | AttendanceWhereInput[]
    branch_id?: IntFilter<"Attendance"> | number
    session_class_id?: IntNullableFilter<"Attendance"> | number | null
    student_id?: IntNullableFilter<"Attendance"> | number | null
    staff_id?: IntNullableFilter<"Attendance"> | number | null
    attendance_date?: DateTimeFilter<"Attendance"> | Date | string
    status?: IntNullableFilter<"Attendance"> | number | null
    created_by?: IntNullableFilter<"Attendance"> | number | null
    created_at?: DateTimeFilter<"Attendance"> | Date | string
    updated_at?: DateTimeNullableFilter<"Attendance"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Attendance"> | Date | string | null
  }, "id">

  export type AttendanceOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    student_id?: SortOrderInput | SortOrder
    staff_id?: SortOrderInput | SortOrder
    attendance_date?: SortOrder
    status?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: AttendanceCountOrderByAggregateInput
    _avg?: AttendanceAvgOrderByAggregateInput
    _max?: AttendanceMaxOrderByAggregateInput
    _min?: AttendanceMinOrderByAggregateInput
    _sum?: AttendanceSumOrderByAggregateInput
  }

  export type AttendanceScalarWhereWithAggregatesInput = {
    AND?: AttendanceScalarWhereWithAggregatesInput | AttendanceScalarWhereWithAggregatesInput[]
    OR?: AttendanceScalarWhereWithAggregatesInput[]
    NOT?: AttendanceScalarWhereWithAggregatesInput | AttendanceScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Attendance"> | number
    branch_id?: IntWithAggregatesFilter<"Attendance"> | number
    session_class_id?: IntNullableWithAggregatesFilter<"Attendance"> | number | null
    student_id?: IntNullableWithAggregatesFilter<"Attendance"> | number | null
    staff_id?: IntNullableWithAggregatesFilter<"Attendance"> | number | null
    attendance_date?: DateTimeWithAggregatesFilter<"Attendance"> | Date | string
    status?: IntNullableWithAggregatesFilter<"Attendance"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"Attendance"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Attendance"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Attendance"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Attendance"> | Date | string | null
  }

  export type SchoolNoteWhereInput = {
    AND?: SchoolNoteWhereInput | SchoolNoteWhereInput[]
    OR?: SchoolNoteWhereInput[]
    NOT?: SchoolNoteWhereInput | SchoolNoteWhereInput[]
    id?: IntFilter<"SchoolNote"> | number
    school_id?: IntFilter<"SchoolNote"> | number
    branch_id?: IntNullableFilter<"SchoolNote"> | number | null
    class_template_id?: IntFilter<"SchoolNote"> | number
    school_subject_id?: IntFilter<"SchoolNote"> | number
    term_id?: IntFilter<"SchoolNote"> | number
    week?: IntFilter<"SchoolNote"> | number
    order?: IntFilter<"SchoolNote"> | number
    topic?: StringFilter<"SchoolNote"> | string
    topic_desc?: StringNullableFilter<"SchoolNote"> | string | null
    students_question_to_answer?: JsonNullableFilter<"SchoolNote">
    note?: StringFilter<"SchoolNote"> | string
    created_by?: IntNullableFilter<"SchoolNote"> | number | null
    created_at?: DateTimeFilter<"SchoolNote"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolNote"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolNote"> | Date | string | null
  }

  export type SchoolNoteOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    topic?: SortOrder
    topic_desc?: SortOrderInput | SortOrder
    students_question_to_answer?: SortOrderInput | SortOrder
    note?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: SchoolNoteOrderByRelevanceInput
  }

  export type SchoolNoteWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SchoolNoteWhereInput | SchoolNoteWhereInput[]
    OR?: SchoolNoteWhereInput[]
    NOT?: SchoolNoteWhereInput | SchoolNoteWhereInput[]
    school_id?: IntFilter<"SchoolNote"> | number
    branch_id?: IntNullableFilter<"SchoolNote"> | number | null
    class_template_id?: IntFilter<"SchoolNote"> | number
    school_subject_id?: IntFilter<"SchoolNote"> | number
    term_id?: IntFilter<"SchoolNote"> | number
    week?: IntFilter<"SchoolNote"> | number
    order?: IntFilter<"SchoolNote"> | number
    topic?: StringFilter<"SchoolNote"> | string
    topic_desc?: StringNullableFilter<"SchoolNote"> | string | null
    students_question_to_answer?: JsonNullableFilter<"SchoolNote">
    note?: StringFilter<"SchoolNote"> | string
    created_by?: IntNullableFilter<"SchoolNote"> | number | null
    created_at?: DateTimeFilter<"SchoolNote"> | Date | string
    updated_at?: DateTimeNullableFilter<"SchoolNote"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SchoolNote"> | Date | string | null
  }, "id">

  export type SchoolNoteOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    topic?: SortOrder
    topic_desc?: SortOrderInput | SortOrder
    students_question_to_answer?: SortOrderInput | SortOrder
    note?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SchoolNoteCountOrderByAggregateInput
    _avg?: SchoolNoteAvgOrderByAggregateInput
    _max?: SchoolNoteMaxOrderByAggregateInput
    _min?: SchoolNoteMinOrderByAggregateInput
    _sum?: SchoolNoteSumOrderByAggregateInput
  }

  export type SchoolNoteScalarWhereWithAggregatesInput = {
    AND?: SchoolNoteScalarWhereWithAggregatesInput | SchoolNoteScalarWhereWithAggregatesInput[]
    OR?: SchoolNoteScalarWhereWithAggregatesInput[]
    NOT?: SchoolNoteScalarWhereWithAggregatesInput | SchoolNoteScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SchoolNote"> | number
    school_id?: IntWithAggregatesFilter<"SchoolNote"> | number
    branch_id?: IntNullableWithAggregatesFilter<"SchoolNote"> | number | null
    class_template_id?: IntWithAggregatesFilter<"SchoolNote"> | number
    school_subject_id?: IntWithAggregatesFilter<"SchoolNote"> | number
    term_id?: IntWithAggregatesFilter<"SchoolNote"> | number
    week?: IntWithAggregatesFilter<"SchoolNote"> | number
    order?: IntWithAggregatesFilter<"SchoolNote"> | number
    topic?: StringWithAggregatesFilter<"SchoolNote"> | string
    topic_desc?: StringNullableWithAggregatesFilter<"SchoolNote"> | string | null
    students_question_to_answer?: JsonNullableWithAggregatesFilter<"SchoolNote">
    note?: StringWithAggregatesFilter<"SchoolNote"> | string
    created_by?: IntNullableWithAggregatesFilter<"SchoolNote"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SchoolNote"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SchoolNote"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SchoolNote"> | Date | string | null
  }

  export type FeeWhereInput = {
    AND?: FeeWhereInput | FeeWhereInput[]
    OR?: FeeWhereInput[]
    NOT?: FeeWhereInput | FeeWhereInput[]
    id?: IntFilter<"Fee"> | number
    branch_id?: IntNullableFilter<"Fee"> | number | null
    fee_name?: StringFilter<"Fee"> | string
    price_template?: DecimalNullableFilter<"Fee"> | Decimal | DecimalJsLike | number | string | null
    desc?: StringNullableFilter<"Fee"> | string | null
    created_by?: IntNullableFilter<"Fee"> | number | null
    created_at?: DateTimeFilter<"Fee"> | Date | string
    updated_at?: DateTimeNullableFilter<"Fee"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Fee"> | Date | string | null
  }

  export type FeeOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    fee_name?: SortOrder
    price_template?: SortOrderInput | SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: FeeOrderByRelevanceInput
  }

  export type FeeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: FeeWhereInput | FeeWhereInput[]
    OR?: FeeWhereInput[]
    NOT?: FeeWhereInput | FeeWhereInput[]
    branch_id?: IntNullableFilter<"Fee"> | number | null
    fee_name?: StringFilter<"Fee"> | string
    price_template?: DecimalNullableFilter<"Fee"> | Decimal | DecimalJsLike | number | string | null
    desc?: StringNullableFilter<"Fee"> | string | null
    created_by?: IntNullableFilter<"Fee"> | number | null
    created_at?: DateTimeFilter<"Fee"> | Date | string
    updated_at?: DateTimeNullableFilter<"Fee"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Fee"> | Date | string | null
  }, "id">

  export type FeeOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrderInput | SortOrder
    fee_name?: SortOrder
    price_template?: SortOrderInput | SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: FeeCountOrderByAggregateInput
    _avg?: FeeAvgOrderByAggregateInput
    _max?: FeeMaxOrderByAggregateInput
    _min?: FeeMinOrderByAggregateInput
    _sum?: FeeSumOrderByAggregateInput
  }

  export type FeeScalarWhereWithAggregatesInput = {
    AND?: FeeScalarWhereWithAggregatesInput | FeeScalarWhereWithAggregatesInput[]
    OR?: FeeScalarWhereWithAggregatesInput[]
    NOT?: FeeScalarWhereWithAggregatesInput | FeeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Fee"> | number
    branch_id?: IntNullableWithAggregatesFilter<"Fee"> | number | null
    fee_name?: StringWithAggregatesFilter<"Fee"> | string
    price_template?: DecimalNullableWithAggregatesFilter<"Fee"> | Decimal | DecimalJsLike | number | string | null
    desc?: StringNullableWithAggregatesFilter<"Fee"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"Fee"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Fee"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Fee"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Fee"> | Date | string | null
  }

  export type PaymentTypeWhereInput = {
    AND?: PaymentTypeWhereInput | PaymentTypeWhereInput[]
    OR?: PaymentTypeWhereInput[]
    NOT?: PaymentTypeWhereInput | PaymentTypeWhereInput[]
    id?: IntFilter<"PaymentType"> | number
    payment_type_name?: StringFilter<"PaymentType"> | string
    desc?: StringNullableFilter<"PaymentType"> | string | null
    created_by?: IntNullableFilter<"PaymentType"> | number | null
    created_at?: DateTimeFilter<"PaymentType"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentType"> | Date | string | null
  }

  export type PaymentTypeOrderByWithRelationInput = {
    id?: SortOrder
    payment_type_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentTypeOrderByRelevanceInput
  }

  export type PaymentTypeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentTypeWhereInput | PaymentTypeWhereInput[]
    OR?: PaymentTypeWhereInput[]
    NOT?: PaymentTypeWhereInput | PaymentTypeWhereInput[]
    payment_type_name?: StringFilter<"PaymentType"> | string
    desc?: StringNullableFilter<"PaymentType"> | string | null
    created_by?: IntNullableFilter<"PaymentType"> | number | null
    created_at?: DateTimeFilter<"PaymentType"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentType"> | Date | string | null
  }, "id">

  export type PaymentTypeOrderByWithAggregationInput = {
    id?: SortOrder
    payment_type_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentTypeCountOrderByAggregateInput
    _avg?: PaymentTypeAvgOrderByAggregateInput
    _max?: PaymentTypeMaxOrderByAggregateInput
    _min?: PaymentTypeMinOrderByAggregateInput
    _sum?: PaymentTypeSumOrderByAggregateInput
  }

  export type PaymentTypeScalarWhereWithAggregatesInput = {
    AND?: PaymentTypeScalarWhereWithAggregatesInput | PaymentTypeScalarWhereWithAggregatesInput[]
    OR?: PaymentTypeScalarWhereWithAggregatesInput[]
    NOT?: PaymentTypeScalarWhereWithAggregatesInput | PaymentTypeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"PaymentType"> | number
    payment_type_name?: StringWithAggregatesFilter<"PaymentType"> | string
    desc?: StringNullableWithAggregatesFilter<"PaymentType"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"PaymentType"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"PaymentType"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"PaymentType"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"PaymentType"> | Date | string | null
  }

  export type PaymentDurationWhereInput = {
    AND?: PaymentDurationWhereInput | PaymentDurationWhereInput[]
    OR?: PaymentDurationWhereInput[]
    NOT?: PaymentDurationWhereInput | PaymentDurationWhereInput[]
    id?: IntFilter<"PaymentDuration"> | number
    duration?: StringFilter<"PaymentDuration"> | string
    desc?: StringNullableFilter<"PaymentDuration"> | string | null
    created_by?: IntNullableFilter<"PaymentDuration"> | number | null
    created_at?: DateTimeFilter<"PaymentDuration"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentDuration"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentDuration"> | Date | string | null
  }

  export type PaymentDurationOrderByWithRelationInput = {
    id?: SortOrder
    duration?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentDurationOrderByRelevanceInput
  }

  export type PaymentDurationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentDurationWhereInput | PaymentDurationWhereInput[]
    OR?: PaymentDurationWhereInput[]
    NOT?: PaymentDurationWhereInput | PaymentDurationWhereInput[]
    duration?: StringFilter<"PaymentDuration"> | string
    desc?: StringNullableFilter<"PaymentDuration"> | string | null
    created_by?: IntNullableFilter<"PaymentDuration"> | number | null
    created_at?: DateTimeFilter<"PaymentDuration"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentDuration"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentDuration"> | Date | string | null
  }, "id">

  export type PaymentDurationOrderByWithAggregationInput = {
    id?: SortOrder
    duration?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentDurationCountOrderByAggregateInput
    _avg?: PaymentDurationAvgOrderByAggregateInput
    _max?: PaymentDurationMaxOrderByAggregateInput
    _min?: PaymentDurationMinOrderByAggregateInput
    _sum?: PaymentDurationSumOrderByAggregateInput
  }

  export type PaymentDurationScalarWhereWithAggregatesInput = {
    AND?: PaymentDurationScalarWhereWithAggregatesInput | PaymentDurationScalarWhereWithAggregatesInput[]
    OR?: PaymentDurationScalarWhereWithAggregatesInput[]
    NOT?: PaymentDurationScalarWhereWithAggregatesInput | PaymentDurationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"PaymentDuration"> | number
    duration?: StringWithAggregatesFilter<"PaymentDuration"> | string
    desc?: StringNullableWithAggregatesFilter<"PaymentDuration"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"PaymentDuration"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"PaymentDuration"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"PaymentDuration"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"PaymentDuration"> | Date | string | null
  }

  export type PaymentWhereInput = {
    AND?: PaymentWhereInput | PaymentWhereInput[]
    OR?: PaymentWhereInput[]
    NOT?: PaymentWhereInput | PaymentWhereInput[]
    id?: IntFilter<"Payment"> | number
    branch_id?: IntFilter<"Payment"> | number
    session_class_id?: IntNullableFilter<"Payment"> | number | null
    specialization_id?: IntNullableFilter<"Payment"> | number | null
    who_would_pay?: StringNullableFilter<"Payment"> | string | null
    fee_id?: IntFilter<"Payment"> | number
    payment_duration_id?: IntFilter<"Payment"> | number
    payment_amount?: DecimalNullableFilter<"Payment"> | Decimal | DecimalJsLike | number | string | null
    start_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    end_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    due_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    is_compulsory?: IntFilter<"Payment"> | number
    created_by?: IntNullableFilter<"Payment"> | number | null
    created_at?: DateTimeFilter<"Payment"> | Date | string
    updated_at?: DateTimeNullableFilter<"Payment"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Payment"> | Date | string | null
  }

  export type PaymentOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    specialization_id?: SortOrderInput | SortOrder
    who_would_pay?: SortOrderInput | SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrderInput | SortOrder
    start_date?: SortOrderInput | SortOrder
    end_date?: SortOrderInput | SortOrder
    due_date?: SortOrderInput | SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentOrderByRelevanceInput
  }

  export type PaymentWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentWhereInput | PaymentWhereInput[]
    OR?: PaymentWhereInput[]
    NOT?: PaymentWhereInput | PaymentWhereInput[]
    branch_id?: IntFilter<"Payment"> | number
    session_class_id?: IntNullableFilter<"Payment"> | number | null
    specialization_id?: IntNullableFilter<"Payment"> | number | null
    who_would_pay?: StringNullableFilter<"Payment"> | string | null
    fee_id?: IntFilter<"Payment"> | number
    payment_duration_id?: IntFilter<"Payment"> | number
    payment_amount?: DecimalNullableFilter<"Payment"> | Decimal | DecimalJsLike | number | string | null
    start_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    end_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    due_date?: DateTimeNullableFilter<"Payment"> | Date | string | null
    is_compulsory?: IntFilter<"Payment"> | number
    created_by?: IntNullableFilter<"Payment"> | number | null
    created_at?: DateTimeFilter<"Payment"> | Date | string
    updated_at?: DateTimeNullableFilter<"Payment"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Payment"> | Date | string | null
  }, "id">

  export type PaymentOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrderInput | SortOrder
    specialization_id?: SortOrderInput | SortOrder
    who_would_pay?: SortOrderInput | SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrderInput | SortOrder
    start_date?: SortOrderInput | SortOrder
    end_date?: SortOrderInput | SortOrder
    due_date?: SortOrderInput | SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentCountOrderByAggregateInput
    _avg?: PaymentAvgOrderByAggregateInput
    _max?: PaymentMaxOrderByAggregateInput
    _min?: PaymentMinOrderByAggregateInput
    _sum?: PaymentSumOrderByAggregateInput
  }

  export type PaymentScalarWhereWithAggregatesInput = {
    AND?: PaymentScalarWhereWithAggregatesInput | PaymentScalarWhereWithAggregatesInput[]
    OR?: PaymentScalarWhereWithAggregatesInput[]
    NOT?: PaymentScalarWhereWithAggregatesInput | PaymentScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Payment"> | number
    branch_id?: IntWithAggregatesFilter<"Payment"> | number
    session_class_id?: IntNullableWithAggregatesFilter<"Payment"> | number | null
    specialization_id?: IntNullableWithAggregatesFilter<"Payment"> | number | null
    who_would_pay?: StringNullableWithAggregatesFilter<"Payment"> | string | null
    fee_id?: IntWithAggregatesFilter<"Payment"> | number
    payment_duration_id?: IntWithAggregatesFilter<"Payment"> | number
    payment_amount?: DecimalNullableWithAggregatesFilter<"Payment"> | Decimal | DecimalJsLike | number | string | null
    start_date?: DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null
    end_date?: DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null
    due_date?: DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null
    is_compulsory?: IntWithAggregatesFilter<"Payment"> | number
    created_by?: IntNullableWithAggregatesFilter<"Payment"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Payment"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Payment"> | Date | string | null
  }

  export type PaymentMadeWhereInput = {
    AND?: PaymentMadeWhereInput | PaymentMadeWhereInput[]
    OR?: PaymentMadeWhereInput[]
    NOT?: PaymentMadeWhereInput | PaymentMadeWhereInput[]
    id?: IntFilter<"PaymentMade"> | number
    branch_id?: IntFilter<"PaymentMade"> | number
    payment_id?: IntFilter<"PaymentMade"> | number
    student_id?: IntNullableFilter<"PaymentMade"> | number | null
    payer_id?: IntNullableFilter<"PaymentMade"> | number | null
    payer_model?: StringNullableFilter<"PaymentMade"> | string | null
    payer_phonenumber?: StringNullableFilter<"PaymentMade"> | string | null
    payer_name?: StringNullableFilter<"PaymentMade"> | string | null
    amount_paid?: DecimalNullableFilter<"PaymentMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableFilter<"PaymentMade"> | number | null
    created_at?: DateTimeFilter<"PaymentMade"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentMade"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentMade"> | Date | string | null
  }

  export type PaymentMadeOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    payer_id?: SortOrderInput | SortOrder
    payer_model?: SortOrderInput | SortOrder
    payer_phonenumber?: SortOrderInput | SortOrder
    payer_name?: SortOrderInput | SortOrder
    amount_paid?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentMadeOrderByRelevanceInput
  }

  export type PaymentMadeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentMadeWhereInput | PaymentMadeWhereInput[]
    OR?: PaymentMadeWhereInput[]
    NOT?: PaymentMadeWhereInput | PaymentMadeWhereInput[]
    branch_id?: IntFilter<"PaymentMade"> | number
    payment_id?: IntFilter<"PaymentMade"> | number
    student_id?: IntNullableFilter<"PaymentMade"> | number | null
    payer_id?: IntNullableFilter<"PaymentMade"> | number | null
    payer_model?: StringNullableFilter<"PaymentMade"> | string | null
    payer_phonenumber?: StringNullableFilter<"PaymentMade"> | string | null
    payer_name?: StringNullableFilter<"PaymentMade"> | string | null
    amount_paid?: DecimalNullableFilter<"PaymentMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableFilter<"PaymentMade"> | number | null
    created_at?: DateTimeFilter<"PaymentMade"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentMade"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentMade"> | Date | string | null
  }, "id">

  export type PaymentMadeOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    payer_id?: SortOrderInput | SortOrder
    payer_model?: SortOrderInput | SortOrder
    payer_phonenumber?: SortOrderInput | SortOrder
    payer_name?: SortOrderInput | SortOrder
    amount_paid?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentMadeCountOrderByAggregateInput
    _avg?: PaymentMadeAvgOrderByAggregateInput
    _max?: PaymentMadeMaxOrderByAggregateInput
    _min?: PaymentMadeMinOrderByAggregateInput
    _sum?: PaymentMadeSumOrderByAggregateInput
  }

  export type PaymentMadeScalarWhereWithAggregatesInput = {
    AND?: PaymentMadeScalarWhereWithAggregatesInput | PaymentMadeScalarWhereWithAggregatesInput[]
    OR?: PaymentMadeScalarWhereWithAggregatesInput[]
    NOT?: PaymentMadeScalarWhereWithAggregatesInput | PaymentMadeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"PaymentMade"> | number
    branch_id?: IntWithAggregatesFilter<"PaymentMade"> | number
    payment_id?: IntWithAggregatesFilter<"PaymentMade"> | number
    student_id?: IntNullableWithAggregatesFilter<"PaymentMade"> | number | null
    payer_id?: IntNullableWithAggregatesFilter<"PaymentMade"> | number | null
    payer_model?: StringNullableWithAggregatesFilter<"PaymentMade"> | string | null
    payer_phonenumber?: StringNullableWithAggregatesFilter<"PaymentMade"> | string | null
    payer_name?: StringNullableWithAggregatesFilter<"PaymentMade"> | string | null
    amount_paid?: DecimalNullableWithAggregatesFilter<"PaymentMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableWithAggregatesFilter<"PaymentMade"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"PaymentMade"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"PaymentMade"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"PaymentMade"> | Date | string | null
  }

  export type PaymentPartMadeWhereInput = {
    AND?: PaymentPartMadeWhereInput | PaymentPartMadeWhereInput[]
    OR?: PaymentPartMadeWhereInput[]
    NOT?: PaymentPartMadeWhereInput | PaymentPartMadeWhereInput[]
    id?: IntFilter<"PaymentPartMade"> | number
    branch_id?: IntFilter<"PaymentPartMade"> | number
    payment_id?: IntFilter<"PaymentPartMade"> | number
    student_id?: IntNullableFilter<"PaymentPartMade"> | number | null
    payer_id?: IntNullableFilter<"PaymentPartMade"> | number | null
    payer_model?: StringFilter<"PaymentPartMade"> | string
    payer_phonenumber?: StringNullableFilter<"PaymentPartMade"> | string | null
    payer_name?: StringNullableFilter<"PaymentPartMade"> | string | null
    amount_part_paid?: DecimalNullableFilter<"PaymentPartMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableFilter<"PaymentPartMade"> | number | null
    created_at?: DateTimeFilter<"PaymentPartMade"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentPartMade"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentPartMade"> | Date | string | null
  }

  export type PaymentPartMadeOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    payer_id?: SortOrderInput | SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrderInput | SortOrder
    payer_name?: SortOrderInput | SortOrder
    amount_part_paid?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentPartMadeOrderByRelevanceInput
  }

  export type PaymentPartMadeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentPartMadeWhereInput | PaymentPartMadeWhereInput[]
    OR?: PaymentPartMadeWhereInput[]
    NOT?: PaymentPartMadeWhereInput | PaymentPartMadeWhereInput[]
    branch_id?: IntFilter<"PaymentPartMade"> | number
    payment_id?: IntFilter<"PaymentPartMade"> | number
    student_id?: IntNullableFilter<"PaymentPartMade"> | number | null
    payer_id?: IntNullableFilter<"PaymentPartMade"> | number | null
    payer_model?: StringFilter<"PaymentPartMade"> | string
    payer_phonenumber?: StringNullableFilter<"PaymentPartMade"> | string | null
    payer_name?: StringNullableFilter<"PaymentPartMade"> | string | null
    amount_part_paid?: DecimalNullableFilter<"PaymentPartMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableFilter<"PaymentPartMade"> | number | null
    created_at?: DateTimeFilter<"PaymentPartMade"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentPartMade"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentPartMade"> | Date | string | null
  }, "id">

  export type PaymentPartMadeOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    payer_id?: SortOrderInput | SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrderInput | SortOrder
    payer_name?: SortOrderInput | SortOrder
    amount_part_paid?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentPartMadeCountOrderByAggregateInput
    _avg?: PaymentPartMadeAvgOrderByAggregateInput
    _max?: PaymentPartMadeMaxOrderByAggregateInput
    _min?: PaymentPartMadeMinOrderByAggregateInput
    _sum?: PaymentPartMadeSumOrderByAggregateInput
  }

  export type PaymentPartMadeScalarWhereWithAggregatesInput = {
    AND?: PaymentPartMadeScalarWhereWithAggregatesInput | PaymentPartMadeScalarWhereWithAggregatesInput[]
    OR?: PaymentPartMadeScalarWhereWithAggregatesInput[]
    NOT?: PaymentPartMadeScalarWhereWithAggregatesInput | PaymentPartMadeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"PaymentPartMade"> | number
    branch_id?: IntWithAggregatesFilter<"PaymentPartMade"> | number
    payment_id?: IntWithAggregatesFilter<"PaymentPartMade"> | number
    student_id?: IntNullableWithAggregatesFilter<"PaymentPartMade"> | number | null
    payer_id?: IntNullableWithAggregatesFilter<"PaymentPartMade"> | number | null
    payer_model?: StringWithAggregatesFilter<"PaymentPartMade"> | string
    payer_phonenumber?: StringNullableWithAggregatesFilter<"PaymentPartMade"> | string | null
    payer_name?: StringNullableWithAggregatesFilter<"PaymentPartMade"> | string | null
    amount_part_paid?: DecimalNullableWithAggregatesFilter<"PaymentPartMade"> | Decimal | DecimalJsLike | number | string | null
    created_by?: IntNullableWithAggregatesFilter<"PaymentPartMade"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"PaymentPartMade"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"PaymentPartMade"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"PaymentPartMade"> | Date | string | null
  }

  export type PaymentAttemptWhereInput = {
    AND?: PaymentAttemptWhereInput | PaymentAttemptWhereInput[]
    OR?: PaymentAttemptWhereInput[]
    NOT?: PaymentAttemptWhereInput | PaymentAttemptWhereInput[]
    id?: IntFilter<"PaymentAttempt"> | number
    payment_id?: IntFilter<"PaymentAttempt"> | number
    student_id?: IntNullableFilter<"PaymentAttempt"> | number | null
    ref_code?: StringFilter<"PaymentAttempt"> | string
    access_code?: StringFilter<"PaymentAttempt"> | string
    payer_id?: IntFilter<"PaymentAttempt"> | number
    payer_model?: StringFilter<"PaymentAttempt"> | string
    amount_paid?: DecimalNullableFilter<"PaymentAttempt"> | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFilter<"PaymentAttempt"> | number
    created_by?: IntNullableFilter<"PaymentAttempt"> | number | null
    created_at?: DateTimeFilter<"PaymentAttempt"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentAttempt"> | Date | string | null
  }

  export type PaymentAttemptOrderByWithRelationInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    ref_code?: SortOrder
    access_code?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    amount_paid?: SortOrderInput | SortOrder
    is_successful?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: PaymentAttemptOrderByRelevanceInput
  }

  export type PaymentAttemptWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: PaymentAttemptWhereInput | PaymentAttemptWhereInput[]
    OR?: PaymentAttemptWhereInput[]
    NOT?: PaymentAttemptWhereInput | PaymentAttemptWhereInput[]
    payment_id?: IntFilter<"PaymentAttempt"> | number
    student_id?: IntNullableFilter<"PaymentAttempt"> | number | null
    ref_code?: StringFilter<"PaymentAttempt"> | string
    access_code?: StringFilter<"PaymentAttempt"> | string
    payer_id?: IntFilter<"PaymentAttempt"> | number
    payer_model?: StringFilter<"PaymentAttempt"> | string
    amount_paid?: DecimalNullableFilter<"PaymentAttempt"> | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFilter<"PaymentAttempt"> | number
    created_by?: IntNullableFilter<"PaymentAttempt"> | number | null
    created_at?: DateTimeFilter<"PaymentAttempt"> | Date | string
    updated_at?: DateTimeNullableFilter<"PaymentAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"PaymentAttempt"> | Date | string | null
  }, "id">

  export type PaymentAttemptOrderByWithAggregationInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrderInput | SortOrder
    ref_code?: SortOrder
    access_code?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    amount_paid?: SortOrderInput | SortOrder
    is_successful?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: PaymentAttemptCountOrderByAggregateInput
    _avg?: PaymentAttemptAvgOrderByAggregateInput
    _max?: PaymentAttemptMaxOrderByAggregateInput
    _min?: PaymentAttemptMinOrderByAggregateInput
    _sum?: PaymentAttemptSumOrderByAggregateInput
  }

  export type PaymentAttemptScalarWhereWithAggregatesInput = {
    AND?: PaymentAttemptScalarWhereWithAggregatesInput | PaymentAttemptScalarWhereWithAggregatesInput[]
    OR?: PaymentAttemptScalarWhereWithAggregatesInput[]
    NOT?: PaymentAttemptScalarWhereWithAggregatesInput | PaymentAttemptScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"PaymentAttempt"> | number
    payment_id?: IntWithAggregatesFilter<"PaymentAttempt"> | number
    student_id?: IntNullableWithAggregatesFilter<"PaymentAttempt"> | number | null
    ref_code?: StringWithAggregatesFilter<"PaymentAttempt"> | string
    access_code?: StringWithAggregatesFilter<"PaymentAttempt"> | string
    payer_id?: IntWithAggregatesFilter<"PaymentAttempt"> | number
    payer_model?: StringWithAggregatesFilter<"PaymentAttempt"> | string
    amount_paid?: DecimalNullableWithAggregatesFilter<"PaymentAttempt"> | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntWithAggregatesFilter<"PaymentAttempt"> | number
    created_by?: IntNullableWithAggregatesFilter<"PaymentAttempt"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"PaymentAttempt"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"PaymentAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"PaymentAttempt"> | Date | string | null
  }

  export type ClassSubjectTemplateWhereInput = {
    AND?: ClassSubjectTemplateWhereInput | ClassSubjectTemplateWhereInput[]
    OR?: ClassSubjectTemplateWhereInput[]
    NOT?: ClassSubjectTemplateWhereInput | ClassSubjectTemplateWhereInput[]
    id?: IntFilter<"ClassSubjectTemplate"> | number
    class_id?: IntFilter<"ClassSubjectTemplate"> | number
    specialization_id?: IntFilter<"ClassSubjectTemplate"> | number
    subject_id?: IntFilter<"ClassSubjectTemplate"> | number
    is_compulsory?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_result?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_calculation?: IntFilter<"ClassSubjectTemplate"> | number
    created_by?: IntNullableFilter<"ClassSubjectTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassSubjectTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
    subject?: XOR<SchoolSubjectScalarRelationFilter, SchoolSubjectWhereInput>
  }

  export type ClassSubjectTemplateOrderByWithRelationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    subject?: SchoolSubjectOrderByWithRelationInput
  }

  export type ClassSubjectTemplateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    class_id_specialization_id_subject_id?: ClassSubjectTemplateClass_idSpecialization_idSubject_idCompoundUniqueInput
    AND?: ClassSubjectTemplateWhereInput | ClassSubjectTemplateWhereInput[]
    OR?: ClassSubjectTemplateWhereInput[]
    NOT?: ClassSubjectTemplateWhereInput | ClassSubjectTemplateWhereInput[]
    class_id?: IntFilter<"ClassSubjectTemplate"> | number
    specialization_id?: IntFilter<"ClassSubjectTemplate"> | number
    subject_id?: IntFilter<"ClassSubjectTemplate"> | number
    is_compulsory?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_result?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_calculation?: IntFilter<"ClassSubjectTemplate"> | number
    created_by?: IntNullableFilter<"ClassSubjectTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassSubjectTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
    subject?: XOR<SchoolSubjectScalarRelationFilter, SchoolSubjectWhereInput>
  }, "id" | "class_id_specialization_id_subject_id">

  export type ClassSubjectTemplateOrderByWithAggregationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ClassSubjectTemplateCountOrderByAggregateInput
    _avg?: ClassSubjectTemplateAvgOrderByAggregateInput
    _max?: ClassSubjectTemplateMaxOrderByAggregateInput
    _min?: ClassSubjectTemplateMinOrderByAggregateInput
    _sum?: ClassSubjectTemplateSumOrderByAggregateInput
  }

  export type ClassSubjectTemplateScalarWhereWithAggregatesInput = {
    AND?: ClassSubjectTemplateScalarWhereWithAggregatesInput | ClassSubjectTemplateScalarWhereWithAggregatesInput[]
    OR?: ClassSubjectTemplateScalarWhereWithAggregatesInput[]
    NOT?: ClassSubjectTemplateScalarWhereWithAggregatesInput | ClassSubjectTemplateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    class_id?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    specialization_id?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    subject_id?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    is_compulsory?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    include_in_result?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    include_in_calculation?: IntWithAggregatesFilter<"ClassSubjectTemplate"> | number
    created_by?: IntNullableWithAggregatesFilter<"ClassSubjectTemplate"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ClassSubjectTemplate"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ClassSubjectTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ClassSubjectTemplate"> | Date | string | null
  }

  export type SessionClassWhereInput = {
    AND?: SessionClassWhereInput | SessionClassWhereInput[]
    OR?: SessionClassWhereInput[]
    NOT?: SessionClassWhereInput | SessionClassWhereInput[]
    id?: IntFilter<"SessionClass"> | number
    session_term_id?: IntFilter<"SessionClass"> | number
    class_id?: IntFilter<"SessionClass"> | number
    session_class_name?: StringFilter<"SessionClass"> | string
    no_of_group?: IntFilter<"SessionClass"> | number
    has_multiple_teacher?: IntFilter<"SessionClass"> | number
    has_specialization?: IntFilter<"SessionClass"> | number
    has_optionals_subject?: IntFilter<"SessionClass"> | number
    main_treachear?: IntNullableFilter<"SessionClass"> | number | null
    created_by?: IntNullableFilter<"SessionClass"> | number | null
    created_at?: DateTimeFilter<"SessionClass"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
    classdetails?: XOR<ClassTemplateNullableScalarRelationFilter, ClassTemplateWhereInput> | null
    sessionterm?: XOR<SessionTermNullableScalarRelationFilter, SessionTermWhereInput> | null
  }

  export type SessionClassOrderByWithRelationInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    session_class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    classdetails?: ClassTemplateOrderByWithRelationInput
    sessionterm?: SessionTermOrderByWithRelationInput
    _relevance?: SessionClassOrderByRelevanceInput
  }

  export type SessionClassWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_term_id_class_id?: SessionClassSession_term_idClass_idCompoundUniqueInput
    AND?: SessionClassWhereInput | SessionClassWhereInput[]
    OR?: SessionClassWhereInput[]
    NOT?: SessionClassWhereInput | SessionClassWhereInput[]
    session_term_id?: IntFilter<"SessionClass"> | number
    class_id?: IntFilter<"SessionClass"> | number
    session_class_name?: StringFilter<"SessionClass"> | string
    no_of_group?: IntFilter<"SessionClass"> | number
    has_multiple_teacher?: IntFilter<"SessionClass"> | number
    has_specialization?: IntFilter<"SessionClass"> | number
    has_optionals_subject?: IntFilter<"SessionClass"> | number
    main_treachear?: IntNullableFilter<"SessionClass"> | number | null
    created_by?: IntNullableFilter<"SessionClass"> | number | null
    created_at?: DateTimeFilter<"SessionClass"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
    classdetails?: XOR<ClassTemplateNullableScalarRelationFilter, ClassTemplateWhereInput> | null
    sessionterm?: XOR<SessionTermNullableScalarRelationFilter, SessionTermWhereInput> | null
  }, "id" | "session_term_id_class_id">

  export type SessionClassOrderByWithAggregationInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    session_class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SessionClassCountOrderByAggregateInput
    _avg?: SessionClassAvgOrderByAggregateInput
    _max?: SessionClassMaxOrderByAggregateInput
    _min?: SessionClassMinOrderByAggregateInput
    _sum?: SessionClassSumOrderByAggregateInput
  }

  export type SessionClassScalarWhereWithAggregatesInput = {
    AND?: SessionClassScalarWhereWithAggregatesInput | SessionClassScalarWhereWithAggregatesInput[]
    OR?: SessionClassScalarWhereWithAggregatesInput[]
    NOT?: SessionClassScalarWhereWithAggregatesInput | SessionClassScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SessionClass"> | number
    session_term_id?: IntWithAggregatesFilter<"SessionClass"> | number
    class_id?: IntWithAggregatesFilter<"SessionClass"> | number
    session_class_name?: StringWithAggregatesFilter<"SessionClass"> | string
    no_of_group?: IntWithAggregatesFilter<"SessionClass"> | number
    has_multiple_teacher?: IntWithAggregatesFilter<"SessionClass"> | number
    has_specialization?: IntWithAggregatesFilter<"SessionClass"> | number
    has_optionals_subject?: IntWithAggregatesFilter<"SessionClass"> | number
    main_treachear?: IntNullableWithAggregatesFilter<"SessionClass"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"SessionClass"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SessionClass"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SessionClass"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SessionClass"> | Date | string | null
  }

  export type SessionClassSubjectWhereInput = {
    AND?: SessionClassSubjectWhereInput | SessionClassSubjectWhereInput[]
    OR?: SessionClassSubjectWhereInput[]
    NOT?: SessionClassSubjectWhereInput | SessionClassSubjectWhereInput[]
    id?: IntFilter<"SessionClassSubject"> | number
    session_class_id?: IntFilter<"SessionClassSubject"> | number
    specialization_id?: IntFilter<"SessionClassSubject"> | number
    subject_id?: IntFilter<"SessionClassSubject"> | number
    is_compulsory?: IntFilter<"SessionClassSubject"> | number
    include_in_result?: IntFilter<"SessionClassSubject"> | number
    include_in_calculation?: IntFilter<"SessionClassSubject"> | number
    created_by?: IntNullableFilter<"SessionClassSubject"> | number | null
    created_at?: DateTimeFilter<"SessionClassSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
    subject?: XOR<SchoolSubjectScalarRelationFilter, SchoolSubjectWhereInput>
  }

  export type SessionClassSubjectOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    subject?: SchoolSubjectOrderByWithRelationInput
  }

  export type SessionClassSubjectWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_class_id_specialization_id_subject_id?: SessionClassSubjectSession_class_idSpecialization_idSubject_idCompoundUniqueInput
    AND?: SessionClassSubjectWhereInput | SessionClassSubjectWhereInput[]
    OR?: SessionClassSubjectWhereInput[]
    NOT?: SessionClassSubjectWhereInput | SessionClassSubjectWhereInput[]
    session_class_id?: IntFilter<"SessionClassSubject"> | number
    specialization_id?: IntFilter<"SessionClassSubject"> | number
    subject_id?: IntFilter<"SessionClassSubject"> | number
    is_compulsory?: IntFilter<"SessionClassSubject"> | number
    include_in_result?: IntFilter<"SessionClassSubject"> | number
    include_in_calculation?: IntFilter<"SessionClassSubject"> | number
    created_by?: IntNullableFilter<"SessionClassSubject"> | number | null
    created_at?: DateTimeFilter<"SessionClassSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
    subject?: XOR<SchoolSubjectScalarRelationFilter, SchoolSubjectWhereInput>
  }, "id" | "session_class_id_specialization_id_subject_id">

  export type SessionClassSubjectOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SessionClassSubjectCountOrderByAggregateInput
    _avg?: SessionClassSubjectAvgOrderByAggregateInput
    _max?: SessionClassSubjectMaxOrderByAggregateInput
    _min?: SessionClassSubjectMinOrderByAggregateInput
    _sum?: SessionClassSubjectSumOrderByAggregateInput
  }

  export type SessionClassSubjectScalarWhereWithAggregatesInput = {
    AND?: SessionClassSubjectScalarWhereWithAggregatesInput | SessionClassSubjectScalarWhereWithAggregatesInput[]
    OR?: SessionClassSubjectScalarWhereWithAggregatesInput[]
    NOT?: SessionClassSubjectScalarWhereWithAggregatesInput | SessionClassSubjectScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    session_class_id?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    specialization_id?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    subject_id?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    is_compulsory?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    include_in_result?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    include_in_calculation?: IntWithAggregatesFilter<"SessionClassSubject"> | number
    created_by?: IntNullableWithAggregatesFilter<"SessionClassSubject"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SessionClassSubject"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SessionClassSubject"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SessionClassSubject"> | Date | string | null
  }

  export type SessionClassStudentSubjectWhereInput = {
    AND?: SessionClassStudentSubjectWhereInput | SessionClassStudentSubjectWhereInput[]
    OR?: SessionClassStudentSubjectWhereInput[]
    NOT?: SessionClassStudentSubjectWhereInput | SessionClassStudentSubjectWhereInput[]
    id?: IntFilter<"SessionClassStudentSubject"> | number
    session_class_id?: IntFilter<"SessionClassStudentSubject"> | number
    subject_id?: IntFilter<"SessionClassStudentSubject"> | number
    student_id?: IntFilter<"SessionClassStudentSubject"> | number
    created_by?: IntNullableFilter<"SessionClassStudentSubject"> | number | null
    created_at?: DateTimeFilter<"SessionClassStudentSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassStudentSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassStudentSubject"> | Date | string | null
  }

  export type SessionClassStudentSubjectOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type SessionClassStudentSubjectWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_class_id_subject_id_student_id?: SessionClassStudentSubjectSession_class_idSubject_idStudent_idCompoundUniqueInput
    AND?: SessionClassStudentSubjectWhereInput | SessionClassStudentSubjectWhereInput[]
    OR?: SessionClassStudentSubjectWhereInput[]
    NOT?: SessionClassStudentSubjectWhereInput | SessionClassStudentSubjectWhereInput[]
    session_class_id?: IntFilter<"SessionClassStudentSubject"> | number
    subject_id?: IntFilter<"SessionClassStudentSubject"> | number
    student_id?: IntFilter<"SessionClassStudentSubject"> | number
    created_by?: IntNullableFilter<"SessionClassStudentSubject"> | number | null
    created_at?: DateTimeFilter<"SessionClassStudentSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassStudentSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassStudentSubject"> | Date | string | null
  }, "id" | "session_class_id_subject_id_student_id">

  export type SessionClassStudentSubjectOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SessionClassStudentSubjectCountOrderByAggregateInput
    _avg?: SessionClassStudentSubjectAvgOrderByAggregateInput
    _max?: SessionClassStudentSubjectMaxOrderByAggregateInput
    _min?: SessionClassStudentSubjectMinOrderByAggregateInput
    _sum?: SessionClassStudentSubjectSumOrderByAggregateInput
  }

  export type SessionClassStudentSubjectScalarWhereWithAggregatesInput = {
    AND?: SessionClassStudentSubjectScalarWhereWithAggregatesInput | SessionClassStudentSubjectScalarWhereWithAggregatesInput[]
    OR?: SessionClassStudentSubjectScalarWhereWithAggregatesInput[]
    NOT?: SessionClassStudentSubjectScalarWhereWithAggregatesInput | SessionClassStudentSubjectScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SessionClassStudentSubject"> | number
    session_class_id?: IntWithAggregatesFilter<"SessionClassStudentSubject"> | number
    subject_id?: IntWithAggregatesFilter<"SessionClassStudentSubject"> | number
    student_id?: IntWithAggregatesFilter<"SessionClassStudentSubject"> | number
    created_by?: IntNullableWithAggregatesFilter<"SessionClassStudentSubject"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SessionClassStudentSubject"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SessionClassStudentSubject"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SessionClassStudentSubject"> | Date | string | null
  }

  export type ClassSpecializationWhereInput = {
    AND?: ClassSpecializationWhereInput | ClassSpecializationWhereInput[]
    OR?: ClassSpecializationWhereInput[]
    NOT?: ClassSpecializationWhereInput | ClassSpecializationWhereInput[]
    id?: IntFilter<"ClassSpecialization"> | number
    school_id?: IntFilter<"ClassSpecialization"> | number
    specialization_name?: StringFilter<"ClassSpecialization"> | string
    branch_config?: JsonNullableFilter<"ClassSpecialization">
    created_by?: IntNullableFilter<"ClassSpecialization"> | number | null
    created_at?: DateTimeFilter<"ClassSpecialization"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassSpecialization"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassSpecialization"> | Date | string | null
  }

  export type ClassSpecializationOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    specialization_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ClassSpecializationOrderByRelevanceInput
  }

  export type ClassSpecializationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ClassSpecializationWhereInput | ClassSpecializationWhereInput[]
    OR?: ClassSpecializationWhereInput[]
    NOT?: ClassSpecializationWhereInput | ClassSpecializationWhereInput[]
    school_id?: IntFilter<"ClassSpecialization"> | number
    specialization_name?: StringFilter<"ClassSpecialization"> | string
    branch_config?: JsonNullableFilter<"ClassSpecialization">
    created_by?: IntNullableFilter<"ClassSpecialization"> | number | null
    created_at?: DateTimeFilter<"ClassSpecialization"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassSpecialization"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassSpecialization"> | Date | string | null
  }, "id">

  export type ClassSpecializationOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    specialization_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ClassSpecializationCountOrderByAggregateInput
    _avg?: ClassSpecializationAvgOrderByAggregateInput
    _max?: ClassSpecializationMaxOrderByAggregateInput
    _min?: ClassSpecializationMinOrderByAggregateInput
    _sum?: ClassSpecializationSumOrderByAggregateInput
  }

  export type ClassSpecializationScalarWhereWithAggregatesInput = {
    AND?: ClassSpecializationScalarWhereWithAggregatesInput | ClassSpecializationScalarWhereWithAggregatesInput[]
    OR?: ClassSpecializationScalarWhereWithAggregatesInput[]
    NOT?: ClassSpecializationScalarWhereWithAggregatesInput | ClassSpecializationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ClassSpecialization"> | number
    school_id?: IntWithAggregatesFilter<"ClassSpecialization"> | number
    specialization_name?: StringWithAggregatesFilter<"ClassSpecialization"> | string
    branch_config?: JsonNullableWithAggregatesFilter<"ClassSpecialization">
    created_by?: IntNullableWithAggregatesFilter<"ClassSpecialization"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ClassSpecialization"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ClassSpecialization"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ClassSpecialization"> | Date | string | null
  }

  export type ClassGroupWhereInput = {
    AND?: ClassGroupWhereInput | ClassGroupWhereInput[]
    OR?: ClassGroupWhereInput[]
    NOT?: ClassGroupWhereInput | ClassGroupWhereInput[]
    id?: IntFilter<"ClassGroup"> | number
    school_id?: IntFilter<"ClassGroup"> | number
    group_name?: StringFilter<"ClassGroup"> | string
    branch_config?: JsonNullableFilter<"ClassGroup">
    created_by?: IntNullableFilter<"ClassGroup"> | number | null
    created_at?: DateTimeFilter<"ClassGroup"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassGroup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassGroup"> | Date | string | null
  }

  export type ClassGroupOrderByWithRelationInput = {
    id?: SortOrder
    school_id?: SortOrder
    group_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ClassGroupOrderByRelevanceInput
  }

  export type ClassGroupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ClassGroupWhereInput | ClassGroupWhereInput[]
    OR?: ClassGroupWhereInput[]
    NOT?: ClassGroupWhereInput | ClassGroupWhereInput[]
    school_id?: IntFilter<"ClassGroup"> | number
    group_name?: StringFilter<"ClassGroup"> | string
    branch_config?: JsonNullableFilter<"ClassGroup">
    created_by?: IntNullableFilter<"ClassGroup"> | number | null
    created_at?: DateTimeFilter<"ClassGroup"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassGroup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassGroup"> | Date | string | null
  }, "id">

  export type ClassGroupOrderByWithAggregationInput = {
    id?: SortOrder
    school_id?: SortOrder
    group_name?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ClassGroupCountOrderByAggregateInput
    _avg?: ClassGroupAvgOrderByAggregateInput
    _max?: ClassGroupMaxOrderByAggregateInput
    _min?: ClassGroupMinOrderByAggregateInput
    _sum?: ClassGroupSumOrderByAggregateInput
  }

  export type ClassGroupScalarWhereWithAggregatesInput = {
    AND?: ClassGroupScalarWhereWithAggregatesInput | ClassGroupScalarWhereWithAggregatesInput[]
    OR?: ClassGroupScalarWhereWithAggregatesInput[]
    NOT?: ClassGroupScalarWhereWithAggregatesInput | ClassGroupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ClassGroup"> | number
    school_id?: IntWithAggregatesFilter<"ClassGroup"> | number
    group_name?: StringWithAggregatesFilter<"ClassGroup"> | string
    branch_config?: JsonNullableWithAggregatesFilter<"ClassGroup">
    created_by?: IntNullableWithAggregatesFilter<"ClassGroup"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ClassGroup"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ClassGroup"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ClassGroup"> | Date | string | null
  }

  export type ScoreTypeWhereInput = {
    AND?: ScoreTypeWhereInput | ScoreTypeWhereInput[]
    OR?: ScoreTypeWhereInput[]
    NOT?: ScoreTypeWhereInput | ScoreTypeWhereInput[]
    id?: IntFilter<"ScoreType"> | number
    score_type?: StringFilter<"ScoreType"> | string
    branch_config?: JsonNullableFilter<"ScoreType">
    created_by?: IntNullableFilter<"ScoreType"> | number | null
    created_at?: DateTimeFilter<"ScoreType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ScoreType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ScoreType"> | Date | string | null
  }

  export type ScoreTypeOrderByWithRelationInput = {
    id?: SortOrder
    score_type?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ScoreTypeOrderByRelevanceInput
  }

  export type ScoreTypeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ScoreTypeWhereInput | ScoreTypeWhereInput[]
    OR?: ScoreTypeWhereInput[]
    NOT?: ScoreTypeWhereInput | ScoreTypeWhereInput[]
    score_type?: StringFilter<"ScoreType"> | string
    branch_config?: JsonNullableFilter<"ScoreType">
    created_by?: IntNullableFilter<"ScoreType"> | number | null
    created_at?: DateTimeFilter<"ScoreType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ScoreType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ScoreType"> | Date | string | null
  }, "id">

  export type ScoreTypeOrderByWithAggregationInput = {
    id?: SortOrder
    score_type?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ScoreTypeCountOrderByAggregateInput
    _avg?: ScoreTypeAvgOrderByAggregateInput
    _max?: ScoreTypeMaxOrderByAggregateInput
    _min?: ScoreTypeMinOrderByAggregateInput
    _sum?: ScoreTypeSumOrderByAggregateInput
  }

  export type ScoreTypeScalarWhereWithAggregatesInput = {
    AND?: ScoreTypeScalarWhereWithAggregatesInput | ScoreTypeScalarWhereWithAggregatesInput[]
    OR?: ScoreTypeScalarWhereWithAggregatesInput[]
    NOT?: ScoreTypeScalarWhereWithAggregatesInput | ScoreTypeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ScoreType"> | number
    score_type?: StringWithAggregatesFilter<"ScoreType"> | string
    branch_config?: JsonNullableWithAggregatesFilter<"ScoreType">
    created_by?: IntNullableWithAggregatesFilter<"ScoreType"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ScoreType"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ScoreType"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ScoreType"> | Date | string | null
  }

  export type ScoreDisplayTypeWhereInput = {
    AND?: ScoreDisplayTypeWhereInput | ScoreDisplayTypeWhereInput[]
    OR?: ScoreDisplayTypeWhereInput[]
    NOT?: ScoreDisplayTypeWhereInput | ScoreDisplayTypeWhereInput[]
    id?: IntFilter<"ScoreDisplayType"> | number
    display_type?: StringFilter<"ScoreDisplayType"> | string
    branch_config?: JsonNullableFilter<"ScoreDisplayType">
    created_by?: IntNullableFilter<"ScoreDisplayType"> | number | null
    created_at?: DateTimeFilter<"ScoreDisplayType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ScoreDisplayType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ScoreDisplayType"> | Date | string | null
  }

  export type ScoreDisplayTypeOrderByWithRelationInput = {
    id?: SortOrder
    display_type?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ScoreDisplayTypeOrderByRelevanceInput
  }

  export type ScoreDisplayTypeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ScoreDisplayTypeWhereInput | ScoreDisplayTypeWhereInput[]
    OR?: ScoreDisplayTypeWhereInput[]
    NOT?: ScoreDisplayTypeWhereInput | ScoreDisplayTypeWhereInput[]
    display_type?: StringFilter<"ScoreDisplayType"> | string
    branch_config?: JsonNullableFilter<"ScoreDisplayType">
    created_by?: IntNullableFilter<"ScoreDisplayType"> | number | null
    created_at?: DateTimeFilter<"ScoreDisplayType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ScoreDisplayType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ScoreDisplayType"> | Date | string | null
  }, "id">

  export type ScoreDisplayTypeOrderByWithAggregationInput = {
    id?: SortOrder
    display_type?: SortOrder
    branch_config?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ScoreDisplayTypeCountOrderByAggregateInput
    _avg?: ScoreDisplayTypeAvgOrderByAggregateInput
    _max?: ScoreDisplayTypeMaxOrderByAggregateInput
    _min?: ScoreDisplayTypeMinOrderByAggregateInput
    _sum?: ScoreDisplayTypeSumOrderByAggregateInput
  }

  export type ScoreDisplayTypeScalarWhereWithAggregatesInput = {
    AND?: ScoreDisplayTypeScalarWhereWithAggregatesInput | ScoreDisplayTypeScalarWhereWithAggregatesInput[]
    OR?: ScoreDisplayTypeScalarWhereWithAggregatesInput[]
    NOT?: ScoreDisplayTypeScalarWhereWithAggregatesInput | ScoreDisplayTypeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ScoreDisplayType"> | number
    display_type?: StringWithAggregatesFilter<"ScoreDisplayType"> | string
    branch_config?: JsonNullableWithAggregatesFilter<"ScoreDisplayType">
    created_by?: IntNullableWithAggregatesFilter<"ScoreDisplayType"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ScoreDisplayType"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ScoreDisplayType"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ScoreDisplayType"> | Date | string | null
  }

  export type StudentScoreWhereInput = {
    AND?: StudentScoreWhereInput | StudentScoreWhereInput[]
    OR?: StudentScoreWhereInput[]
    NOT?: StudentScoreWhereInput | StudentScoreWhereInput[]
    id?: IntFilter<"StudentScore"> | number
    score_setup_id?: IntFilter<"StudentScore"> | number
    subject_id?: IntFilter<"StudentScore"> | number
    student_id?: IntFilter<"StudentScore"> | number
    score?: DecimalFilter<"StudentScore"> | Decimal | DecimalJsLike | number | string
    created_by?: IntNullableFilter<"StudentScore"> | number | null
    created_at?: DateTimeFilter<"StudentScore"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentScore"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentScore"> | Date | string | null
  }

  export type StudentScoreOrderByWithRelationInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type StudentScoreWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: StudentScoreWhereInput | StudentScoreWhereInput[]
    OR?: StudentScoreWhereInput[]
    NOT?: StudentScoreWhereInput | StudentScoreWhereInput[]
    score_setup_id?: IntFilter<"StudentScore"> | number
    subject_id?: IntFilter<"StudentScore"> | number
    student_id?: IntFilter<"StudentScore"> | number
    score?: DecimalFilter<"StudentScore"> | Decimal | DecimalJsLike | number | string
    created_by?: IntNullableFilter<"StudentScore"> | number | null
    created_at?: DateTimeFilter<"StudentScore"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentScore"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentScore"> | Date | string | null
  }, "id">

  export type StudentScoreOrderByWithAggregationInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: StudentScoreCountOrderByAggregateInput
    _avg?: StudentScoreAvgOrderByAggregateInput
    _max?: StudentScoreMaxOrderByAggregateInput
    _min?: StudentScoreMinOrderByAggregateInput
    _sum?: StudentScoreSumOrderByAggregateInput
  }

  export type StudentScoreScalarWhereWithAggregatesInput = {
    AND?: StudentScoreScalarWhereWithAggregatesInput | StudentScoreScalarWhereWithAggregatesInput[]
    OR?: StudentScoreScalarWhereWithAggregatesInput[]
    NOT?: StudentScoreScalarWhereWithAggregatesInput | StudentScoreScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"StudentScore"> | number
    score_setup_id?: IntWithAggregatesFilter<"StudentScore"> | number
    subject_id?: IntWithAggregatesFilter<"StudentScore"> | number
    student_id?: IntWithAggregatesFilter<"StudentScore"> | number
    score?: DecimalWithAggregatesFilter<"StudentScore"> | Decimal | DecimalJsLike | number | string
    created_by?: IntNullableWithAggregatesFilter<"StudentScore"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"StudentScore"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"StudentScore"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"StudentScore"> | Date | string | null
  }

  export type StudentTotalScoreWhereInput = {
    AND?: StudentTotalScoreWhereInput | StudentTotalScoreWhereInput[]
    OR?: StudentTotalScoreWhereInput[]
    NOT?: StudentTotalScoreWhereInput | StudentTotalScoreWhereInput[]
    id?: IntFilter<"StudentTotalScore"> | number
    session_class_id?: IntFilter<"StudentTotalScore"> | number
    specialization_id?: IntFilter<"StudentTotalScore"> | number
    group_id?: IntFilter<"StudentTotalScore"> | number
    student_id?: IntFilter<"StudentTotalScore"> | number
    totalscore?: DecimalFilter<"StudentTotalScore"> | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFilter<"StudentTotalScore"> | number
    group_position?: IntFilter<"StudentTotalScore"> | number
    teachers_comment?: StringNullableFilter<"StudentTotalScore"> | string | null
    created_by?: IntNullableFilter<"StudentTotalScore"> | number | null
    created_at?: DateTimeFilter<"StudentTotalScore"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentTotalScore"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentTotalScore"> | Date | string | null
  }

  export type StudentTotalScoreOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    teachers_comment?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: StudentTotalScoreOrderByRelevanceInput
  }

  export type StudentTotalScoreWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: StudentTotalScoreWhereInput | StudentTotalScoreWhereInput[]
    OR?: StudentTotalScoreWhereInput[]
    NOT?: StudentTotalScoreWhereInput | StudentTotalScoreWhereInput[]
    session_class_id?: IntFilter<"StudentTotalScore"> | number
    specialization_id?: IntFilter<"StudentTotalScore"> | number
    group_id?: IntFilter<"StudentTotalScore"> | number
    student_id?: IntFilter<"StudentTotalScore"> | number
    totalscore?: DecimalFilter<"StudentTotalScore"> | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFilter<"StudentTotalScore"> | number
    group_position?: IntFilter<"StudentTotalScore"> | number
    teachers_comment?: StringNullableFilter<"StudentTotalScore"> | string | null
    created_by?: IntNullableFilter<"StudentTotalScore"> | number | null
    created_at?: DateTimeFilter<"StudentTotalScore"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentTotalScore"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentTotalScore"> | Date | string | null
  }, "id">

  export type StudentTotalScoreOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    teachers_comment?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: StudentTotalScoreCountOrderByAggregateInput
    _avg?: StudentTotalScoreAvgOrderByAggregateInput
    _max?: StudentTotalScoreMaxOrderByAggregateInput
    _min?: StudentTotalScoreMinOrderByAggregateInput
    _sum?: StudentTotalScoreSumOrderByAggregateInput
  }

  export type StudentTotalScoreScalarWhereWithAggregatesInput = {
    AND?: StudentTotalScoreScalarWhereWithAggregatesInput | StudentTotalScoreScalarWhereWithAggregatesInput[]
    OR?: StudentTotalScoreScalarWhereWithAggregatesInput[]
    NOT?: StudentTotalScoreScalarWhereWithAggregatesInput | StudentTotalScoreScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    session_class_id?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    specialization_id?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    group_id?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    student_id?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    totalscore?: DecimalWithAggregatesFilter<"StudentTotalScore"> | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    group_position?: IntWithAggregatesFilter<"StudentTotalScore"> | number
    teachers_comment?: StringNullableWithAggregatesFilter<"StudentTotalScore"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"StudentTotalScore"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"StudentTotalScore"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"StudentTotalScore"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"StudentTotalScore"> | Date | string | null
  }

  export type StudentTrackingWhereInput = {
    AND?: StudentTrackingWhereInput | StudentTrackingWhereInput[]
    OR?: StudentTrackingWhereInput[]
    NOT?: StudentTrackingWhereInput | StudentTrackingWhereInput[]
    id?: IntFilter<"StudentTracking"> | number
    session_class_id?: IntFilter<"StudentTracking"> | number
    specialization_id?: IntNullableFilter<"StudentTracking"> | number | null
    group_id?: IntNullableFilter<"StudentTracking"> | number | null
    student_id?: IntFilter<"StudentTracking"> | number
    created_by?: IntNullableFilter<"StudentTracking"> | number | null
    created_at?: DateTimeFilter<"StudentTracking"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
    student?: XOR<StudentScalarRelationFilter, StudentWhereInput>
  }

  export type StudentTrackingOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrderInput | SortOrder
    group_id?: SortOrderInput | SortOrder
    student_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    student?: StudentOrderByWithRelationInput
  }

  export type StudentTrackingWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_class_id_student_id?: StudentTrackingSession_class_idStudent_idCompoundUniqueInput
    AND?: StudentTrackingWhereInput | StudentTrackingWhereInput[]
    OR?: StudentTrackingWhereInput[]
    NOT?: StudentTrackingWhereInput | StudentTrackingWhereInput[]
    session_class_id?: IntFilter<"StudentTracking"> | number
    specialization_id?: IntNullableFilter<"StudentTracking"> | number | null
    group_id?: IntNullableFilter<"StudentTracking"> | number | null
    student_id?: IntFilter<"StudentTracking"> | number
    created_by?: IntNullableFilter<"StudentTracking"> | number | null
    created_at?: DateTimeFilter<"StudentTracking"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
    student?: XOR<StudentScalarRelationFilter, StudentWhereInput>
  }, "id" | "session_class_id_student_id">

  export type StudentTrackingOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrderInput | SortOrder
    group_id?: SortOrderInput | SortOrder
    student_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: StudentTrackingCountOrderByAggregateInput
    _avg?: StudentTrackingAvgOrderByAggregateInput
    _max?: StudentTrackingMaxOrderByAggregateInput
    _min?: StudentTrackingMinOrderByAggregateInput
    _sum?: StudentTrackingSumOrderByAggregateInput
  }

  export type StudentTrackingScalarWhereWithAggregatesInput = {
    AND?: StudentTrackingScalarWhereWithAggregatesInput | StudentTrackingScalarWhereWithAggregatesInput[]
    OR?: StudentTrackingScalarWhereWithAggregatesInput[]
    NOT?: StudentTrackingScalarWhereWithAggregatesInput | StudentTrackingScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"StudentTracking"> | number
    session_class_id?: IntWithAggregatesFilter<"StudentTracking"> | number
    specialization_id?: IntNullableWithAggregatesFilter<"StudentTracking"> | number | null
    group_id?: IntNullableWithAggregatesFilter<"StudentTracking"> | number | null
    student_id?: IntWithAggregatesFilter<"StudentTracking"> | number
    created_by?: IntNullableWithAggregatesFilter<"StudentTracking"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"StudentTracking"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"StudentTracking"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"StudentTracking"> | Date | string | null
  }

  export type ReportCardSettingWhereInput = {
    AND?: ReportCardSettingWhereInput | ReportCardSettingWhereInput[]
    OR?: ReportCardSettingWhereInput[]
    NOT?: ReportCardSettingWhereInput | ReportCardSettingWhereInput[]
    id?: IntFilter<"ReportCardSetting"> | number
    session_class_id?: IntFilter<"ReportCardSetting"> | number
    specialization_id?: IntFilter<"ReportCardSetting"> | number
    group_id?: IntNullableFilter<"ReportCardSetting"> | number | null
    is_report_generated?: IntFilter<"ReportCardSetting"> | number
    display_student_position?: IntFilter<"ReportCardSetting"> | number
    show_previous_terms?: IntFilter<"ReportCardSetting"> | number
    accumulate_with_previous?: IntFilter<"ReportCardSetting"> | number
    display_attendance_in_report?: IntFilter<"ReportCardSetting"> | number
    created_by?: IntNullableFilter<"ReportCardSetting"> | number | null
    created_at?: DateTimeFilter<"ReportCardSetting"> | Date | string
    updated_at?: DateTimeNullableFilter<"ReportCardSetting"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ReportCardSetting"> | Date | string | null
  }

  export type ReportCardSettingOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type ReportCardSettingWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    session_class_id_specialization_id_group_id?: ReportCardSettingSession_class_idSpecialization_idGroup_idCompoundUniqueInput
    AND?: ReportCardSettingWhereInput | ReportCardSettingWhereInput[]
    OR?: ReportCardSettingWhereInput[]
    NOT?: ReportCardSettingWhereInput | ReportCardSettingWhereInput[]
    session_class_id?: IntFilter<"ReportCardSetting"> | number
    specialization_id?: IntFilter<"ReportCardSetting"> | number
    group_id?: IntNullableFilter<"ReportCardSetting"> | number | null
    is_report_generated?: IntFilter<"ReportCardSetting"> | number
    display_student_position?: IntFilter<"ReportCardSetting"> | number
    show_previous_terms?: IntFilter<"ReportCardSetting"> | number
    accumulate_with_previous?: IntFilter<"ReportCardSetting"> | number
    display_attendance_in_report?: IntFilter<"ReportCardSetting"> | number
    created_by?: IntNullableFilter<"ReportCardSetting"> | number | null
    created_at?: DateTimeFilter<"ReportCardSetting"> | Date | string
    updated_at?: DateTimeNullableFilter<"ReportCardSetting"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ReportCardSetting"> | Date | string | null
  }, "id" | "session_class_id_specialization_id_group_id">

  export type ReportCardSettingOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ReportCardSettingCountOrderByAggregateInput
    _avg?: ReportCardSettingAvgOrderByAggregateInput
    _max?: ReportCardSettingMaxOrderByAggregateInput
    _min?: ReportCardSettingMinOrderByAggregateInput
    _sum?: ReportCardSettingSumOrderByAggregateInput
  }

  export type ReportCardSettingScalarWhereWithAggregatesInput = {
    AND?: ReportCardSettingScalarWhereWithAggregatesInput | ReportCardSettingScalarWhereWithAggregatesInput[]
    OR?: ReportCardSettingScalarWhereWithAggregatesInput[]
    NOT?: ReportCardSettingScalarWhereWithAggregatesInput | ReportCardSettingScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    session_class_id?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    specialization_id?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    group_id?: IntNullableWithAggregatesFilter<"ReportCardSetting"> | number | null
    is_report_generated?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    display_student_position?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    show_previous_terms?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    accumulate_with_previous?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    display_attendance_in_report?: IntWithAggregatesFilter<"ReportCardSetting"> | number
    created_by?: IntNullableWithAggregatesFilter<"ReportCardSetting"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ReportCardSetting"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ReportCardSetting"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ReportCardSetting"> | Date | string | null
  }

  export type ClassScoreSetupTemplateWhereInput = {
    AND?: ClassScoreSetupTemplateWhereInput | ClassScoreSetupTemplateWhereInput[]
    OR?: ClassScoreSetupTemplateWhereInput[]
    NOT?: ClassScoreSetupTemplateWhereInput | ClassScoreSetupTemplateWhereInput[]
    id?: IntFilter<"ClassScoreSetupTemplate"> | number
    class_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    specialization_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    group_id?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    score_type_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    display_type?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    display_name?: StringFilter<"ClassScoreSetupTemplate"> | string
    max_score?: IntFilter<"ClassScoreSetupTemplate"> | number
    created_by?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassScoreSetupTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassScoreSetupTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassScoreSetupTemplate"> | Date | string | null
  }

  export type ClassScoreSetupTemplateOrderByWithRelationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrderInput | SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ClassScoreSetupTemplateOrderByRelevanceInput
  }

  export type ClassScoreSetupTemplateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ClassScoreSetupTemplateWhereInput | ClassScoreSetupTemplateWhereInput[]
    OR?: ClassScoreSetupTemplateWhereInput[]
    NOT?: ClassScoreSetupTemplateWhereInput | ClassScoreSetupTemplateWhereInput[]
    class_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    specialization_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    group_id?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    score_type_id?: IntFilter<"ClassScoreSetupTemplate"> | number
    display_type?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    display_name?: StringFilter<"ClassScoreSetupTemplate"> | string
    max_score?: IntFilter<"ClassScoreSetupTemplate"> | number
    created_by?: IntNullableFilter<"ClassScoreSetupTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassScoreSetupTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassScoreSetupTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassScoreSetupTemplate"> | Date | string | null
  }, "id">

  export type ClassScoreSetupTemplateOrderByWithAggregationInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrderInput | SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ClassScoreSetupTemplateCountOrderByAggregateInput
    _avg?: ClassScoreSetupTemplateAvgOrderByAggregateInput
    _max?: ClassScoreSetupTemplateMaxOrderByAggregateInput
    _min?: ClassScoreSetupTemplateMinOrderByAggregateInput
    _sum?: ClassScoreSetupTemplateSumOrderByAggregateInput
  }

  export type ClassScoreSetupTemplateScalarWhereWithAggregatesInput = {
    AND?: ClassScoreSetupTemplateScalarWhereWithAggregatesInput | ClassScoreSetupTemplateScalarWhereWithAggregatesInput[]
    OR?: ClassScoreSetupTemplateScalarWhereWithAggregatesInput[]
    NOT?: ClassScoreSetupTemplateScalarWhereWithAggregatesInput | ClassScoreSetupTemplateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ClassScoreSetupTemplate"> | number
    class_id?: IntWithAggregatesFilter<"ClassScoreSetupTemplate"> | number
    specialization_id?: IntWithAggregatesFilter<"ClassScoreSetupTemplate"> | number
    group_id?: IntNullableWithAggregatesFilter<"ClassScoreSetupTemplate"> | number | null
    score_type_id?: IntWithAggregatesFilter<"ClassScoreSetupTemplate"> | number
    display_type?: IntNullableWithAggregatesFilter<"ClassScoreSetupTemplate"> | number | null
    display_name?: StringWithAggregatesFilter<"ClassScoreSetupTemplate"> | string
    max_score?: IntWithAggregatesFilter<"ClassScoreSetupTemplate"> | number
    created_by?: IntNullableWithAggregatesFilter<"ClassScoreSetupTemplate"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ClassScoreSetupTemplate"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ClassScoreSetupTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ClassScoreSetupTemplate"> | Date | string | null
  }

  export type SessionClassScoreSetupWhereInput = {
    AND?: SessionClassScoreSetupWhereInput | SessionClassScoreSetupWhereInput[]
    OR?: SessionClassScoreSetupWhereInput[]
    NOT?: SessionClassScoreSetupWhereInput | SessionClassScoreSetupWhereInput[]
    id?: IntFilter<"SessionClassScoreSetup"> | number
    session_class_id?: IntFilter<"SessionClassScoreSetup"> | number
    specialization_id?: IntFilter<"SessionClassScoreSetup"> | number
    group_id?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    score_type_id?: IntFilter<"SessionClassScoreSetup"> | number
    display_type?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    display_name?: StringFilter<"SessionClassScoreSetup"> | string
    max_score?: IntFilter<"SessionClassScoreSetup"> | number
    created_by?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    created_at?: DateTimeFilter<"SessionClassScoreSetup"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassScoreSetup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassScoreSetup"> | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkListRelationFilter
  }

  export type SessionClassScoreSetupOrderByWithRelationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrderInput | SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    examscoresetuplink?: ExamScoreSetupLinkOrderByRelationAggregateInput
    _relevance?: SessionClassScoreSetupOrderByRelevanceInput
  }

  export type SessionClassScoreSetupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SessionClassScoreSetupWhereInput | SessionClassScoreSetupWhereInput[]
    OR?: SessionClassScoreSetupWhereInput[]
    NOT?: SessionClassScoreSetupWhereInput | SessionClassScoreSetupWhereInput[]
    session_class_id?: IntFilter<"SessionClassScoreSetup"> | number
    specialization_id?: IntFilter<"SessionClassScoreSetup"> | number
    group_id?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    score_type_id?: IntFilter<"SessionClassScoreSetup"> | number
    display_type?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    display_name?: StringFilter<"SessionClassScoreSetup"> | string
    max_score?: IntFilter<"SessionClassScoreSetup"> | number
    created_by?: IntNullableFilter<"SessionClassScoreSetup"> | number | null
    created_at?: DateTimeFilter<"SessionClassScoreSetup"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassScoreSetup"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassScoreSetup"> | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkListRelationFilter
  }, "id">

  export type SessionClassScoreSetupOrderByWithAggregationInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrderInput | SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrderInput | SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: SessionClassScoreSetupCountOrderByAggregateInput
    _avg?: SessionClassScoreSetupAvgOrderByAggregateInput
    _max?: SessionClassScoreSetupMaxOrderByAggregateInput
    _min?: SessionClassScoreSetupMinOrderByAggregateInput
    _sum?: SessionClassScoreSetupSumOrderByAggregateInput
  }

  export type SessionClassScoreSetupScalarWhereWithAggregatesInput = {
    AND?: SessionClassScoreSetupScalarWhereWithAggregatesInput | SessionClassScoreSetupScalarWhereWithAggregatesInput[]
    OR?: SessionClassScoreSetupScalarWhereWithAggregatesInput[]
    NOT?: SessionClassScoreSetupScalarWhereWithAggregatesInput | SessionClassScoreSetupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SessionClassScoreSetup"> | number
    session_class_id?: IntWithAggregatesFilter<"SessionClassScoreSetup"> | number
    specialization_id?: IntWithAggregatesFilter<"SessionClassScoreSetup"> | number
    group_id?: IntNullableWithAggregatesFilter<"SessionClassScoreSetup"> | number | null
    score_type_id?: IntWithAggregatesFilter<"SessionClassScoreSetup"> | number
    display_type?: IntNullableWithAggregatesFilter<"SessionClassScoreSetup"> | number | null
    display_name?: StringWithAggregatesFilter<"SessionClassScoreSetup"> | string
    max_score?: IntWithAggregatesFilter<"SessionClassScoreSetup"> | number
    created_by?: IntNullableWithAggregatesFilter<"SessionClassScoreSetup"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SessionClassScoreSetup"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SessionClassScoreSetup"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SessionClassScoreSetup"> | Date | string | null
  }

  export type ExamTypeWhereInput = {
    AND?: ExamTypeWhereInput | ExamTypeWhereInput[]
    OR?: ExamTypeWhereInput[]
    NOT?: ExamTypeWhereInput | ExamTypeWhereInput[]
    id?: IntFilter<"ExamType"> | number
    exam_type_name?: StringFilter<"ExamType"> | string
    exam_type_active?: IntFilter<"ExamType"> | number
    desc?: StringNullableFilter<"ExamType"> | string | null
    created_by?: IntNullableFilter<"ExamType"> | number | null
    created_at?: DateTimeFilter<"ExamType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamType"> | Date | string | null
    exam?: ExamListRelationFilter
  }

  export type ExamTypeOrderByWithRelationInput = {
    id?: SortOrder
    exam_type_name?: SortOrder
    exam_type_active?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    exam?: ExamOrderByRelationAggregateInput
    _relevance?: ExamTypeOrderByRelevanceInput
  }

  export type ExamTypeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamTypeWhereInput | ExamTypeWhereInput[]
    OR?: ExamTypeWhereInput[]
    NOT?: ExamTypeWhereInput | ExamTypeWhereInput[]
    exam_type_name?: StringFilter<"ExamType"> | string
    exam_type_active?: IntFilter<"ExamType"> | number
    desc?: StringNullableFilter<"ExamType"> | string | null
    created_by?: IntNullableFilter<"ExamType"> | number | null
    created_at?: DateTimeFilter<"ExamType"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamType"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamType"> | Date | string | null
    exam?: ExamListRelationFilter
  }, "id">

  export type ExamTypeOrderByWithAggregationInput = {
    id?: SortOrder
    exam_type_name?: SortOrder
    exam_type_active?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamTypeCountOrderByAggregateInput
    _avg?: ExamTypeAvgOrderByAggregateInput
    _max?: ExamTypeMaxOrderByAggregateInput
    _min?: ExamTypeMinOrderByAggregateInput
    _sum?: ExamTypeSumOrderByAggregateInput
  }

  export type ExamTypeScalarWhereWithAggregatesInput = {
    AND?: ExamTypeScalarWhereWithAggregatesInput | ExamTypeScalarWhereWithAggregatesInput[]
    OR?: ExamTypeScalarWhereWithAggregatesInput[]
    NOT?: ExamTypeScalarWhereWithAggregatesInput | ExamTypeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamType"> | number
    exam_type_name?: StringWithAggregatesFilter<"ExamType"> | string
    exam_type_active?: IntWithAggregatesFilter<"ExamType"> | number
    desc?: StringNullableWithAggregatesFilter<"ExamType"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"ExamType"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamType"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamType"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamType"> | Date | string | null
  }

  export type ExamCategoryWhereInput = {
    AND?: ExamCategoryWhereInput | ExamCategoryWhereInput[]
    OR?: ExamCategoryWhereInput[]
    NOT?: ExamCategoryWhereInput | ExamCategoryWhereInput[]
    id?: IntFilter<"ExamCategory"> | number
    exam_category_name?: StringFilter<"ExamCategory"> | string
    exam_category_active?: IntFilter<"ExamCategory"> | number
    desc?: StringNullableFilter<"ExamCategory"> | string | null
    created_by?: IntNullableFilter<"ExamCategory"> | number | null
    created_at?: DateTimeFilter<"ExamCategory"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamCategory"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamCategory"> | Date | string | null
    exam?: ExamListRelationFilter
  }

  export type ExamCategoryOrderByWithRelationInput = {
    id?: SortOrder
    exam_category_name?: SortOrder
    exam_category_active?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    exam?: ExamOrderByRelationAggregateInput
    _relevance?: ExamCategoryOrderByRelevanceInput
  }

  export type ExamCategoryWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamCategoryWhereInput | ExamCategoryWhereInput[]
    OR?: ExamCategoryWhereInput[]
    NOT?: ExamCategoryWhereInput | ExamCategoryWhereInput[]
    exam_category_name?: StringFilter<"ExamCategory"> | string
    exam_category_active?: IntFilter<"ExamCategory"> | number
    desc?: StringNullableFilter<"ExamCategory"> | string | null
    created_by?: IntNullableFilter<"ExamCategory"> | number | null
    created_at?: DateTimeFilter<"ExamCategory"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamCategory"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamCategory"> | Date | string | null
    exam?: ExamListRelationFilter
  }, "id">

  export type ExamCategoryOrderByWithAggregationInput = {
    id?: SortOrder
    exam_category_name?: SortOrder
    exam_category_active?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamCategoryCountOrderByAggregateInput
    _avg?: ExamCategoryAvgOrderByAggregateInput
    _max?: ExamCategoryMaxOrderByAggregateInput
    _min?: ExamCategoryMinOrderByAggregateInput
    _sum?: ExamCategorySumOrderByAggregateInput
  }

  export type ExamCategoryScalarWhereWithAggregatesInput = {
    AND?: ExamCategoryScalarWhereWithAggregatesInput | ExamCategoryScalarWhereWithAggregatesInput[]
    OR?: ExamCategoryScalarWhereWithAggregatesInput[]
    NOT?: ExamCategoryScalarWhereWithAggregatesInput | ExamCategoryScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamCategory"> | number
    exam_category_name?: StringWithAggregatesFilter<"ExamCategory"> | string
    exam_category_active?: IntWithAggregatesFilter<"ExamCategory"> | number
    desc?: StringNullableWithAggregatesFilter<"ExamCategory"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"ExamCategory"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamCategory"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamCategory"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamCategory"> | Date | string | null
  }

  export type ExamQuestionMarkerWhereInput = {
    AND?: ExamQuestionMarkerWhereInput | ExamQuestionMarkerWhereInput[]
    OR?: ExamQuestionMarkerWhereInput[]
    NOT?: ExamQuestionMarkerWhereInput | ExamQuestionMarkerWhereInput[]
    id?: IntFilter<"ExamQuestionMarker"> | number
    question_marker_name?: StringFilter<"ExamQuestionMarker"> | string
    desc?: StringNullableFilter<"ExamQuestionMarker"> | string | null
    created_by?: IntNullableFilter<"ExamQuestionMarker"> | number | null
    created_at?: DateTimeFilter<"ExamQuestionMarker"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestionMarker"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestionMarker"> | Date | string | null
  }

  export type ExamQuestionMarkerOrderByWithRelationInput = {
    id?: SortOrder
    question_marker_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ExamQuestionMarkerOrderByRelevanceInput
  }

  export type ExamQuestionMarkerWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamQuestionMarkerWhereInput | ExamQuestionMarkerWhereInput[]
    OR?: ExamQuestionMarkerWhereInput[]
    NOT?: ExamQuestionMarkerWhereInput | ExamQuestionMarkerWhereInput[]
    question_marker_name?: StringFilter<"ExamQuestionMarker"> | string
    desc?: StringNullableFilter<"ExamQuestionMarker"> | string | null
    created_by?: IntNullableFilter<"ExamQuestionMarker"> | number | null
    created_at?: DateTimeFilter<"ExamQuestionMarker"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestionMarker"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestionMarker"> | Date | string | null
  }, "id">

  export type ExamQuestionMarkerOrderByWithAggregationInput = {
    id?: SortOrder
    question_marker_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamQuestionMarkerCountOrderByAggregateInput
    _avg?: ExamQuestionMarkerAvgOrderByAggregateInput
    _max?: ExamQuestionMarkerMaxOrderByAggregateInput
    _min?: ExamQuestionMarkerMinOrderByAggregateInput
    _sum?: ExamQuestionMarkerSumOrderByAggregateInput
  }

  export type ExamQuestionMarkerScalarWhereWithAggregatesInput = {
    AND?: ExamQuestionMarkerScalarWhereWithAggregatesInput | ExamQuestionMarkerScalarWhereWithAggregatesInput[]
    OR?: ExamQuestionMarkerScalarWhereWithAggregatesInput[]
    NOT?: ExamQuestionMarkerScalarWhereWithAggregatesInput | ExamQuestionMarkerScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamQuestionMarker"> | number
    question_marker_name?: StringWithAggregatesFilter<"ExamQuestionMarker"> | string
    desc?: StringNullableWithAggregatesFilter<"ExamQuestionMarker"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"ExamQuestionMarker"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamQuestionMarker"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestionMarker"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestionMarker"> | Date | string | null
  }

  export type QuestionTemplateWhereInput = {
    AND?: QuestionTemplateWhereInput | QuestionTemplateWhereInput[]
    OR?: QuestionTemplateWhereInput[]
    NOT?: QuestionTemplateWhereInput | QuestionTemplateWhereInput[]
    id?: IntFilter<"QuestionTemplate"> | number
    branch_id?: IntFilter<"QuestionTemplate"> | number
    class_id?: IntFilter<"QuestionTemplate"> | number
    subject_id?: IntFilter<"QuestionTemplate"> | number
    question?: StringFilter<"QuestionTemplate"> | string
    question_marker?: IntNullableFilter<"QuestionTemplate"> | number | null
    is_objective?: IntFilter<"QuestionTemplate"> | number
    is_boolean_question?: IntFilter<"QuestionTemplate"> | number
    max_time?: IntNullableFilter<"QuestionTemplate"> | number | null
    image_path?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_a?: StringFilter<"QuestionTemplate"> | string
    option_b?: StringFilter<"QuestionTemplate"> | string
    option_c?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_d?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_answer?: StringFilter<"QuestionTemplate"> | string
    theory_answer?: StringNullableFilter<"QuestionTemplate"> | string | null
    difficulty_level?: StringNullableFilter<"QuestionTemplate"> | string | null
    tag?: JsonNullableFilter<"QuestionTemplate">
    created_by?: IntNullableFilter<"QuestionTemplate"> | number | null
    created_at?: DateTimeFilter<"QuestionTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"QuestionTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"QuestionTemplate"> | Date | string | null
  }

  export type QuestionTemplateOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrderInput | SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrderInput | SortOrder
    image_path?: SortOrderInput | SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrderInput | SortOrder
    option_d?: SortOrderInput | SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrderInput | SortOrder
    difficulty_level?: SortOrderInput | SortOrder
    tag?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: QuestionTemplateOrderByRelevanceInput
  }

  export type QuestionTemplateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: QuestionTemplateWhereInput | QuestionTemplateWhereInput[]
    OR?: QuestionTemplateWhereInput[]
    NOT?: QuestionTemplateWhereInput | QuestionTemplateWhereInput[]
    branch_id?: IntFilter<"QuestionTemplate"> | number
    class_id?: IntFilter<"QuestionTemplate"> | number
    subject_id?: IntFilter<"QuestionTemplate"> | number
    question?: StringFilter<"QuestionTemplate"> | string
    question_marker?: IntNullableFilter<"QuestionTemplate"> | number | null
    is_objective?: IntFilter<"QuestionTemplate"> | number
    is_boolean_question?: IntFilter<"QuestionTemplate"> | number
    max_time?: IntNullableFilter<"QuestionTemplate"> | number | null
    image_path?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_a?: StringFilter<"QuestionTemplate"> | string
    option_b?: StringFilter<"QuestionTemplate"> | string
    option_c?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_d?: StringNullableFilter<"QuestionTemplate"> | string | null
    option_answer?: StringFilter<"QuestionTemplate"> | string
    theory_answer?: StringNullableFilter<"QuestionTemplate"> | string | null
    difficulty_level?: StringNullableFilter<"QuestionTemplate"> | string | null
    tag?: JsonNullableFilter<"QuestionTemplate">
    created_by?: IntNullableFilter<"QuestionTemplate"> | number | null
    created_at?: DateTimeFilter<"QuestionTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"QuestionTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"QuestionTemplate"> | Date | string | null
  }, "id">

  export type QuestionTemplateOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrderInput | SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrderInput | SortOrder
    image_path?: SortOrderInput | SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrderInput | SortOrder
    option_d?: SortOrderInput | SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrderInput | SortOrder
    difficulty_level?: SortOrderInput | SortOrder
    tag?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: QuestionTemplateCountOrderByAggregateInput
    _avg?: QuestionTemplateAvgOrderByAggregateInput
    _max?: QuestionTemplateMaxOrderByAggregateInput
    _min?: QuestionTemplateMinOrderByAggregateInput
    _sum?: QuestionTemplateSumOrderByAggregateInput
  }

  export type QuestionTemplateScalarWhereWithAggregatesInput = {
    AND?: QuestionTemplateScalarWhereWithAggregatesInput | QuestionTemplateScalarWhereWithAggregatesInput[]
    OR?: QuestionTemplateScalarWhereWithAggregatesInput[]
    NOT?: QuestionTemplateScalarWhereWithAggregatesInput | QuestionTemplateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    branch_id?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    class_id?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    subject_id?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    question?: StringWithAggregatesFilter<"QuestionTemplate"> | string
    question_marker?: IntNullableWithAggregatesFilter<"QuestionTemplate"> | number | null
    is_objective?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    is_boolean_question?: IntWithAggregatesFilter<"QuestionTemplate"> | number
    max_time?: IntNullableWithAggregatesFilter<"QuestionTemplate"> | number | null
    image_path?: StringNullableWithAggregatesFilter<"QuestionTemplate"> | string | null
    option_a?: StringWithAggregatesFilter<"QuestionTemplate"> | string
    option_b?: StringWithAggregatesFilter<"QuestionTemplate"> | string
    option_c?: StringNullableWithAggregatesFilter<"QuestionTemplate"> | string | null
    option_d?: StringNullableWithAggregatesFilter<"QuestionTemplate"> | string | null
    option_answer?: StringWithAggregatesFilter<"QuestionTemplate"> | string
    theory_answer?: StringNullableWithAggregatesFilter<"QuestionTemplate"> | string | null
    difficulty_level?: StringNullableWithAggregatesFilter<"QuestionTemplate"> | string | null
    tag?: JsonNullableWithAggregatesFilter<"QuestionTemplate">
    created_by?: IntNullableWithAggregatesFilter<"QuestionTemplate"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"QuestionTemplate"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"QuestionTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"QuestionTemplate"> | Date | string | null
  }

  export type QuestionWhereInput = {
    AND?: QuestionWhereInput | QuestionWhereInput[]
    OR?: QuestionWhereInput[]
    NOT?: QuestionWhereInput | QuestionWhereInput[]
    id?: IntFilter<"Question"> | number
    branch_id?: IntFilter<"Question"> | number
    class_id?: IntFilter<"Question"> | number
    subject_id?: IntFilter<"Question"> | number
    question?: StringFilter<"Question"> | string
    question_marker?: IntNullableFilter<"Question"> | number | null
    is_objective?: IntFilter<"Question"> | number
    is_boolean_question?: IntFilter<"Question"> | number
    max_time?: IntNullableFilter<"Question"> | number | null
    image_path?: StringNullableFilter<"Question"> | string | null
    option_a?: StringFilter<"Question"> | string
    option_b?: StringFilter<"Question"> | string
    option_c?: StringNullableFilter<"Question"> | string | null
    option_d?: StringNullableFilter<"Question"> | string | null
    option_answer?: StringFilter<"Question"> | string
    theory_answer?: StringNullableFilter<"Question"> | string | null
    difficulty_level?: StringNullableFilter<"Question"> | string | null
    tag?: JsonNullableFilter<"Question">
    created_by?: IntNullableFilter<"Question"> | number | null
    created_at?: DateTimeFilter<"Question"> | Date | string
    updated_at?: DateTimeNullableFilter<"Question"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Question"> | Date | string | null
  }

  export type QuestionOrderByWithRelationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrderInput | SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrderInput | SortOrder
    image_path?: SortOrderInput | SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrderInput | SortOrder
    option_d?: SortOrderInput | SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrderInput | SortOrder
    difficulty_level?: SortOrderInput | SortOrder
    tag?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: QuestionOrderByRelevanceInput
  }

  export type QuestionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: QuestionWhereInput | QuestionWhereInput[]
    OR?: QuestionWhereInput[]
    NOT?: QuestionWhereInput | QuestionWhereInput[]
    branch_id?: IntFilter<"Question"> | number
    class_id?: IntFilter<"Question"> | number
    subject_id?: IntFilter<"Question"> | number
    question?: StringFilter<"Question"> | string
    question_marker?: IntNullableFilter<"Question"> | number | null
    is_objective?: IntFilter<"Question"> | number
    is_boolean_question?: IntFilter<"Question"> | number
    max_time?: IntNullableFilter<"Question"> | number | null
    image_path?: StringNullableFilter<"Question"> | string | null
    option_a?: StringFilter<"Question"> | string
    option_b?: StringFilter<"Question"> | string
    option_c?: StringNullableFilter<"Question"> | string | null
    option_d?: StringNullableFilter<"Question"> | string | null
    option_answer?: StringFilter<"Question"> | string
    theory_answer?: StringNullableFilter<"Question"> | string | null
    difficulty_level?: StringNullableFilter<"Question"> | string | null
    tag?: JsonNullableFilter<"Question">
    created_by?: IntNullableFilter<"Question"> | number | null
    created_at?: DateTimeFilter<"Question"> | Date | string
    updated_at?: DateTimeNullableFilter<"Question"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Question"> | Date | string | null
  }, "id">

  export type QuestionOrderByWithAggregationInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrderInput | SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrderInput | SortOrder
    image_path?: SortOrderInput | SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrderInput | SortOrder
    option_d?: SortOrderInput | SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrderInput | SortOrder
    difficulty_level?: SortOrderInput | SortOrder
    tag?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: QuestionCountOrderByAggregateInput
    _avg?: QuestionAvgOrderByAggregateInput
    _max?: QuestionMaxOrderByAggregateInput
    _min?: QuestionMinOrderByAggregateInput
    _sum?: QuestionSumOrderByAggregateInput
  }

  export type QuestionScalarWhereWithAggregatesInput = {
    AND?: QuestionScalarWhereWithAggregatesInput | QuestionScalarWhereWithAggregatesInput[]
    OR?: QuestionScalarWhereWithAggregatesInput[]
    NOT?: QuestionScalarWhereWithAggregatesInput | QuestionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Question"> | number
    branch_id?: IntWithAggregatesFilter<"Question"> | number
    class_id?: IntWithAggregatesFilter<"Question"> | number
    subject_id?: IntWithAggregatesFilter<"Question"> | number
    question?: StringWithAggregatesFilter<"Question"> | string
    question_marker?: IntNullableWithAggregatesFilter<"Question"> | number | null
    is_objective?: IntWithAggregatesFilter<"Question"> | number
    is_boolean_question?: IntWithAggregatesFilter<"Question"> | number
    max_time?: IntNullableWithAggregatesFilter<"Question"> | number | null
    image_path?: StringNullableWithAggregatesFilter<"Question"> | string | null
    option_a?: StringWithAggregatesFilter<"Question"> | string
    option_b?: StringWithAggregatesFilter<"Question"> | string
    option_c?: StringNullableWithAggregatesFilter<"Question"> | string | null
    option_d?: StringNullableWithAggregatesFilter<"Question"> | string | null
    option_answer?: StringWithAggregatesFilter<"Question"> | string
    theory_answer?: StringNullableWithAggregatesFilter<"Question"> | string | null
    difficulty_level?: StringNullableWithAggregatesFilter<"Question"> | string | null
    tag?: JsonNullableWithAggregatesFilter<"Question">
    created_by?: IntNullableWithAggregatesFilter<"Question"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Question"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Question"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Question"> | Date | string | null
  }

  export type ExamVisibilityWhereInput = {
    AND?: ExamVisibilityWhereInput | ExamVisibilityWhereInput[]
    OR?: ExamVisibilityWhereInput[]
    NOT?: ExamVisibilityWhereInput | ExamVisibilityWhereInput[]
    id?: IntFilter<"ExamVisibility"> | number
    exam_visibility_name?: StringFilter<"ExamVisibility"> | string
    desc?: StringNullableFilter<"ExamVisibility"> | string | null
    created_by?: IntNullableFilter<"ExamVisibility"> | number | null
    created_at?: DateTimeFilter<"ExamVisibility"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamVisibility"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamVisibility"> | Date | string | null
  }

  export type ExamVisibilityOrderByWithRelationInput = {
    id?: SortOrder
    exam_visibility_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ExamVisibilityOrderByRelevanceInput
  }

  export type ExamVisibilityWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamVisibilityWhereInput | ExamVisibilityWhereInput[]
    OR?: ExamVisibilityWhereInput[]
    NOT?: ExamVisibilityWhereInput | ExamVisibilityWhereInput[]
    exam_visibility_name?: StringFilter<"ExamVisibility"> | string
    desc?: StringNullableFilter<"ExamVisibility"> | string | null
    created_by?: IntNullableFilter<"ExamVisibility"> | number | null
    created_at?: DateTimeFilter<"ExamVisibility"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamVisibility"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamVisibility"> | Date | string | null
  }, "id">

  export type ExamVisibilityOrderByWithAggregationInput = {
    id?: SortOrder
    exam_visibility_name?: SortOrder
    desc?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamVisibilityCountOrderByAggregateInput
    _avg?: ExamVisibilityAvgOrderByAggregateInput
    _max?: ExamVisibilityMaxOrderByAggregateInput
    _min?: ExamVisibilityMinOrderByAggregateInput
    _sum?: ExamVisibilitySumOrderByAggregateInput
  }

  export type ExamVisibilityScalarWhereWithAggregatesInput = {
    AND?: ExamVisibilityScalarWhereWithAggregatesInput | ExamVisibilityScalarWhereWithAggregatesInput[]
    OR?: ExamVisibilityScalarWhereWithAggregatesInput[]
    NOT?: ExamVisibilityScalarWhereWithAggregatesInput | ExamVisibilityScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamVisibility"> | number
    exam_visibility_name?: StringWithAggregatesFilter<"ExamVisibility"> | string
    desc?: StringNullableWithAggregatesFilter<"ExamVisibility"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"ExamVisibility"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamVisibility"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamVisibility"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamVisibility"> | Date | string | null
  }

  export type ExamWhereInput = {
    AND?: ExamWhereInput | ExamWhereInput[]
    OR?: ExamWhereInput[]
    NOT?: ExamWhereInput | ExamWhereInput[]
    id?: IntFilter<"Exam"> | number
    class_id?: IntNullableFilter<"Exam"> | number | null
    term_id?: IntNullableFilter<"Exam"> | number | null
    subject_id?: IntFilter<"Exam"> | number
    desc?: StringNullableFilter<"Exam"> | string | null
    exam_date?: DateTimeNullableFilter<"Exam"> | Date | string | null
    exam_type?: IntFilter<"Exam"> | number
    exam_category?: IntFilter<"Exam"> | number
    exam_visibility?: IntNullableFilter<"Exam"> | number | null
    max_time_allowed?: IntFilter<"Exam"> | number
    no_of_life?: IntNullableFilter<"Exam"> | number | null
    exam_objective_max_score?: IntNullableFilter<"Exam"> | number | null
    exam_theory_max_score?: IntNullableFilter<"Exam"> | number | null
    objective_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    theory_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    exam_enabled?: IntFilter<"Exam"> | number
    allow_assessment_only_at_specified_time?: IntNullableFilter<"Exam"> | number | null
    allow_submit_after_time_elapsed?: IntFilter<"Exam"> | number
    is_practise_exam?: IntFilter<"Exam"> | number
    exam_gift_id?: IntNullableFilter<"Exam"> | number | null
    created_by?: IntNullableFilter<"Exam"> | number | null
    created_at?: DateTimeFilter<"Exam"> | Date | string
    updated_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkListRelationFilter
    term?: XOR<TermNullableScalarRelationFilter, TermWhereInput> | null
    class?: XOR<ClassTemplateNullableScalarRelationFilter, ClassTemplateWhereInput> | null
    subject?: XOR<SchoolSubjectNullableScalarRelationFilter, SchoolSubjectWhereInput> | null
    examtype?: XOR<ExamTypeNullableScalarRelationFilter, ExamTypeWhereInput> | null
    examcategory?: XOR<ExamCategoryNullableScalarRelationFilter, ExamCategoryWhereInput> | null
  }

  export type ExamOrderByWithRelationInput = {
    id?: SortOrder
    class_id?: SortOrderInput | SortOrder
    term_id?: SortOrderInput | SortOrder
    subject_id?: SortOrder
    desc?: SortOrderInput | SortOrder
    exam_date?: SortOrderInput | SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrderInput | SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrderInput | SortOrder
    exam_objective_max_score?: SortOrderInput | SortOrder
    exam_theory_max_score?: SortOrderInput | SortOrder
    objective_max_no_of_question?: SortOrderInput | SortOrder
    theory_max_no_of_question?: SortOrderInput | SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrderInput | SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    examscoresetuplink?: ExamScoreSetupLinkOrderByRelationAggregateInput
    term?: TermOrderByWithRelationInput
    class?: ClassTemplateOrderByWithRelationInput
    subject?: SchoolSubjectOrderByWithRelationInput
    examtype?: ExamTypeOrderByWithRelationInput
    examcategory?: ExamCategoryOrderByWithRelationInput
    _relevance?: ExamOrderByRelevanceInput
  }

  export type ExamWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamWhereInput | ExamWhereInput[]
    OR?: ExamWhereInput[]
    NOT?: ExamWhereInput | ExamWhereInput[]
    class_id?: IntNullableFilter<"Exam"> | number | null
    term_id?: IntNullableFilter<"Exam"> | number | null
    subject_id?: IntFilter<"Exam"> | number
    desc?: StringNullableFilter<"Exam"> | string | null
    exam_date?: DateTimeNullableFilter<"Exam"> | Date | string | null
    exam_type?: IntFilter<"Exam"> | number
    exam_category?: IntFilter<"Exam"> | number
    exam_visibility?: IntNullableFilter<"Exam"> | number | null
    max_time_allowed?: IntFilter<"Exam"> | number
    no_of_life?: IntNullableFilter<"Exam"> | number | null
    exam_objective_max_score?: IntNullableFilter<"Exam"> | number | null
    exam_theory_max_score?: IntNullableFilter<"Exam"> | number | null
    objective_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    theory_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    exam_enabled?: IntFilter<"Exam"> | number
    allow_assessment_only_at_specified_time?: IntNullableFilter<"Exam"> | number | null
    allow_submit_after_time_elapsed?: IntFilter<"Exam"> | number
    is_practise_exam?: IntFilter<"Exam"> | number
    exam_gift_id?: IntNullableFilter<"Exam"> | number | null
    created_by?: IntNullableFilter<"Exam"> | number | null
    created_at?: DateTimeFilter<"Exam"> | Date | string
    updated_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkListRelationFilter
    term?: XOR<TermNullableScalarRelationFilter, TermWhereInput> | null
    class?: XOR<ClassTemplateNullableScalarRelationFilter, ClassTemplateWhereInput> | null
    subject?: XOR<SchoolSubjectNullableScalarRelationFilter, SchoolSubjectWhereInput> | null
    examtype?: XOR<ExamTypeNullableScalarRelationFilter, ExamTypeWhereInput> | null
    examcategory?: XOR<ExamCategoryNullableScalarRelationFilter, ExamCategoryWhereInput> | null
  }, "id">

  export type ExamOrderByWithAggregationInput = {
    id?: SortOrder
    class_id?: SortOrderInput | SortOrder
    term_id?: SortOrderInput | SortOrder
    subject_id?: SortOrder
    desc?: SortOrderInput | SortOrder
    exam_date?: SortOrderInput | SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrderInput | SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrderInput | SortOrder
    exam_objective_max_score?: SortOrderInput | SortOrder
    exam_theory_max_score?: SortOrderInput | SortOrder
    objective_max_no_of_question?: SortOrderInput | SortOrder
    theory_max_no_of_question?: SortOrderInput | SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrderInput | SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamCountOrderByAggregateInput
    _avg?: ExamAvgOrderByAggregateInput
    _max?: ExamMaxOrderByAggregateInput
    _min?: ExamMinOrderByAggregateInput
    _sum?: ExamSumOrderByAggregateInput
  }

  export type ExamScalarWhereWithAggregatesInput = {
    AND?: ExamScalarWhereWithAggregatesInput | ExamScalarWhereWithAggregatesInput[]
    OR?: ExamScalarWhereWithAggregatesInput[]
    NOT?: ExamScalarWhereWithAggregatesInput | ExamScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Exam"> | number
    class_id?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    term_id?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    subject_id?: IntWithAggregatesFilter<"Exam"> | number
    desc?: StringNullableWithAggregatesFilter<"Exam"> | string | null
    exam_date?: DateTimeNullableWithAggregatesFilter<"Exam"> | Date | string | null
    exam_type?: IntWithAggregatesFilter<"Exam"> | number
    exam_category?: IntWithAggregatesFilter<"Exam"> | number
    exam_visibility?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    max_time_allowed?: IntWithAggregatesFilter<"Exam"> | number
    no_of_life?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    exam_objective_max_score?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    exam_theory_max_score?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    objective_max_no_of_question?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    theory_max_no_of_question?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    exam_enabled?: IntWithAggregatesFilter<"Exam"> | number
    allow_assessment_only_at_specified_time?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    allow_submit_after_time_elapsed?: IntWithAggregatesFilter<"Exam"> | number
    is_practise_exam?: IntWithAggregatesFilter<"Exam"> | number
    exam_gift_id?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"Exam"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"Exam"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"Exam"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Exam"> | Date | string | null
  }

  export type ExamQuestionWhereInput = {
    AND?: ExamQuestionWhereInput | ExamQuestionWhereInput[]
    OR?: ExamQuestionWhereInput[]
    NOT?: ExamQuestionWhereInput | ExamQuestionWhereInput[]
    id?: IntFilter<"ExamQuestion"> | number
    exam_id?: IntFilter<"ExamQuestion"> | number
    question_id?: IntFilter<"ExamQuestion"> | number
    score_attached?: FloatFilter<"ExamQuestion"> | number
    created_by?: IntNullableFilter<"ExamQuestion"> | number | null
    created_at?: DateTimeFilter<"ExamQuestion"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestion"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestion"> | Date | string | null
  }

  export type ExamQuestionOrderByWithRelationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type ExamQuestionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamQuestionWhereInput | ExamQuestionWhereInput[]
    OR?: ExamQuestionWhereInput[]
    NOT?: ExamQuestionWhereInput | ExamQuestionWhereInput[]
    exam_id?: IntFilter<"ExamQuestion"> | number
    question_id?: IntFilter<"ExamQuestion"> | number
    score_attached?: FloatFilter<"ExamQuestion"> | number
    created_by?: IntNullableFilter<"ExamQuestion"> | number | null
    created_at?: DateTimeFilter<"ExamQuestion"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestion"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestion"> | Date | string | null
  }, "id">

  export type ExamQuestionOrderByWithAggregationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamQuestionCountOrderByAggregateInput
    _avg?: ExamQuestionAvgOrderByAggregateInput
    _max?: ExamQuestionMaxOrderByAggregateInput
    _min?: ExamQuestionMinOrderByAggregateInput
    _sum?: ExamQuestionSumOrderByAggregateInput
  }

  export type ExamQuestionScalarWhereWithAggregatesInput = {
    AND?: ExamQuestionScalarWhereWithAggregatesInput | ExamQuestionScalarWhereWithAggregatesInput[]
    OR?: ExamQuestionScalarWhereWithAggregatesInput[]
    NOT?: ExamQuestionScalarWhereWithAggregatesInput | ExamQuestionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamQuestion"> | number
    exam_id?: IntWithAggregatesFilter<"ExamQuestion"> | number
    question_id?: IntWithAggregatesFilter<"ExamQuestion"> | number
    score_attached?: FloatWithAggregatesFilter<"ExamQuestion"> | number
    created_by?: IntNullableWithAggregatesFilter<"ExamQuestion"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamQuestion"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestion"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestion"> | Date | string | null
  }

  export type ExamScoreSetupLinkWhereInput = {
    AND?: ExamScoreSetupLinkWhereInput | ExamScoreSetupLinkWhereInput[]
    OR?: ExamScoreSetupLinkWhereInput[]
    NOT?: ExamScoreSetupLinkWhereInput | ExamScoreSetupLinkWhereInput[]
    id?: IntFilter<"ExamScoreSetupLink"> | number
    exam_id?: IntFilter<"ExamScoreSetupLink"> | number
    score_setup_id?: IntFilter<"ExamScoreSetupLink"> | number
    created_by?: IntNullableFilter<"ExamScoreSetupLink"> | number | null
    created_at?: DateTimeFilter<"ExamScoreSetupLink"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
    exam?: XOR<ExamScalarRelationFilter, ExamWhereInput>
    scoresetup?: XOR<SessionClassScoreSetupScalarRelationFilter, SessionClassScoreSetupWhereInput>
  }

  export type ExamScoreSetupLinkOrderByWithRelationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    exam?: ExamOrderByWithRelationInput
    scoresetup?: SessionClassScoreSetupOrderByWithRelationInput
  }

  export type ExamScoreSetupLinkWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    exam_id_score_setup_id?: ExamScoreSetupLinkExam_idScore_setup_idCompoundUniqueInput
    AND?: ExamScoreSetupLinkWhereInput | ExamScoreSetupLinkWhereInput[]
    OR?: ExamScoreSetupLinkWhereInput[]
    NOT?: ExamScoreSetupLinkWhereInput | ExamScoreSetupLinkWhereInput[]
    exam_id?: IntFilter<"ExamScoreSetupLink"> | number
    score_setup_id?: IntFilter<"ExamScoreSetupLink"> | number
    created_by?: IntNullableFilter<"ExamScoreSetupLink"> | number | null
    created_at?: DateTimeFilter<"ExamScoreSetupLink"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
    exam?: XOR<ExamScalarRelationFilter, ExamWhereInput>
    scoresetup?: XOR<SessionClassScoreSetupScalarRelationFilter, SessionClassScoreSetupWhereInput>
  }, "id" | "exam_id_score_setup_id">

  export type ExamScoreSetupLinkOrderByWithAggregationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamScoreSetupLinkCountOrderByAggregateInput
    _avg?: ExamScoreSetupLinkAvgOrderByAggregateInput
    _max?: ExamScoreSetupLinkMaxOrderByAggregateInput
    _min?: ExamScoreSetupLinkMinOrderByAggregateInput
    _sum?: ExamScoreSetupLinkSumOrderByAggregateInput
  }

  export type ExamScoreSetupLinkScalarWhereWithAggregatesInput = {
    AND?: ExamScoreSetupLinkScalarWhereWithAggregatesInput | ExamScoreSetupLinkScalarWhereWithAggregatesInput[]
    OR?: ExamScoreSetupLinkScalarWhereWithAggregatesInput[]
    NOT?: ExamScoreSetupLinkScalarWhereWithAggregatesInput | ExamScoreSetupLinkScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamScoreSetupLink"> | number
    exam_id?: IntWithAggregatesFilter<"ExamScoreSetupLink"> | number
    score_setup_id?: IntWithAggregatesFilter<"ExamScoreSetupLink"> | number
    created_by?: IntNullableWithAggregatesFilter<"ExamScoreSetupLink"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamScoreSetupLink"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamScoreSetupLink"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamScoreSetupLink"> | Date | string | null
  }

  export type ExamAttemptWhereInput = {
    AND?: ExamAttemptWhereInput | ExamAttemptWhereInput[]
    OR?: ExamAttemptWhereInput[]
    NOT?: ExamAttemptWhereInput | ExamAttemptWhereInput[]
    id?: IntFilter<"ExamAttempt"> | number
    exam_id?: IntFilter<"ExamAttempt"> | number
    person_id?: IntFilter<"ExamAttempt"> | number
    model_name?: StringFilter<"ExamAttempt"> | string
    start_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    submitted_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    score_obtained?: FloatNullableFilter<"ExamAttempt"> | number | null
    created_by?: IntNullableFilter<"ExamAttempt"> | number | null
    created_at?: DateTimeFilter<"ExamAttempt"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
  }

  export type ExamAttemptOrderByWithRelationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    model_name?: SortOrder
    start_at?: SortOrderInput | SortOrder
    submitted_at?: SortOrderInput | SortOrder
    score_obtained?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ExamAttemptOrderByRelevanceInput
  }

  export type ExamAttemptWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamAttemptWhereInput | ExamAttemptWhereInput[]
    OR?: ExamAttemptWhereInput[]
    NOT?: ExamAttemptWhereInput | ExamAttemptWhereInput[]
    exam_id?: IntFilter<"ExamAttempt"> | number
    person_id?: IntFilter<"ExamAttempt"> | number
    model_name?: StringFilter<"ExamAttempt"> | string
    start_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    submitted_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    score_obtained?: FloatNullableFilter<"ExamAttempt"> | number | null
    created_by?: IntNullableFilter<"ExamAttempt"> | number | null
    created_at?: DateTimeFilter<"ExamAttempt"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamAttempt"> | Date | string | null
  }, "id">

  export type ExamAttemptOrderByWithAggregationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    model_name?: SortOrder
    start_at?: SortOrderInput | SortOrder
    submitted_at?: SortOrderInput | SortOrder
    score_obtained?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamAttemptCountOrderByAggregateInput
    _avg?: ExamAttemptAvgOrderByAggregateInput
    _max?: ExamAttemptMaxOrderByAggregateInput
    _min?: ExamAttemptMinOrderByAggregateInput
    _sum?: ExamAttemptSumOrderByAggregateInput
  }

  export type ExamAttemptScalarWhereWithAggregatesInput = {
    AND?: ExamAttemptScalarWhereWithAggregatesInput | ExamAttemptScalarWhereWithAggregatesInput[]
    OR?: ExamAttemptScalarWhereWithAggregatesInput[]
    NOT?: ExamAttemptScalarWhereWithAggregatesInput | ExamAttemptScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamAttempt"> | number
    exam_id?: IntWithAggregatesFilter<"ExamAttempt"> | number
    person_id?: IntWithAggregatesFilter<"ExamAttempt"> | number
    model_name?: StringWithAggregatesFilter<"ExamAttempt"> | string
    start_at?: DateTimeNullableWithAggregatesFilter<"ExamAttempt"> | Date | string | null
    submitted_at?: DateTimeNullableWithAggregatesFilter<"ExamAttempt"> | Date | string | null
    score_obtained?: FloatNullableWithAggregatesFilter<"ExamAttempt"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"ExamAttempt"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamAttempt"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamAttempt"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamAttempt"> | Date | string | null
  }

  export type ExamQuestionAnswerWhereInput = {
    AND?: ExamQuestionAnswerWhereInput | ExamQuestionAnswerWhereInput[]
    OR?: ExamQuestionAnswerWhereInput[]
    NOT?: ExamQuestionAnswerWhereInput | ExamQuestionAnswerWhereInput[]
    id?: IntFilter<"ExamQuestionAnswer"> | number
    attempt_id?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    exam_id?: IntFilter<"ExamQuestionAnswer"> | number
    question_id?: IntFilter<"ExamQuestionAnswer"> | number
    model_name?: StringFilter<"ExamQuestionAnswer"> | string
    person_id?: IntFilter<"ExamQuestionAnswer"> | number
    user_objective_answer?: StringFilter<"ExamQuestionAnswer"> | string
    user_theory_answer?: StringFilter<"ExamQuestionAnswer"> | string
    score_obtained?: IntFilter<"ExamQuestionAnswer"> | number
    marked_by?: IntFilter<"ExamQuestionAnswer"> | number
    time_taken?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    created_by?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    created_at?: DateTimeFilter<"ExamQuestionAnswer"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestionAnswer"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestionAnswer"> | Date | string | null
  }

  export type ExamQuestionAnswerOrderByWithRelationInput = {
    id?: SortOrder
    attempt_id?: SortOrderInput | SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    model_name?: SortOrder
    person_id?: SortOrder
    user_objective_answer?: SortOrder
    user_theory_answer?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _relevance?: ExamQuestionAnswerOrderByRelevanceInput
  }

  export type ExamQuestionAnswerWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamQuestionAnswerWhereInput | ExamQuestionAnswerWhereInput[]
    OR?: ExamQuestionAnswerWhereInput[]
    NOT?: ExamQuestionAnswerWhereInput | ExamQuestionAnswerWhereInput[]
    attempt_id?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    exam_id?: IntFilter<"ExamQuestionAnswer"> | number
    question_id?: IntFilter<"ExamQuestionAnswer"> | number
    model_name?: StringFilter<"ExamQuestionAnswer"> | string
    person_id?: IntFilter<"ExamQuestionAnswer"> | number
    user_objective_answer?: StringFilter<"ExamQuestionAnswer"> | string
    user_theory_answer?: StringFilter<"ExamQuestionAnswer"> | string
    score_obtained?: IntFilter<"ExamQuestionAnswer"> | number
    marked_by?: IntFilter<"ExamQuestionAnswer"> | number
    time_taken?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    created_by?: IntNullableFilter<"ExamQuestionAnswer"> | number | null
    created_at?: DateTimeFilter<"ExamQuestionAnswer"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamQuestionAnswer"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamQuestionAnswer"> | Date | string | null
  }, "id">

  export type ExamQuestionAnswerOrderByWithAggregationInput = {
    id?: SortOrder
    attempt_id?: SortOrderInput | SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    model_name?: SortOrder
    person_id?: SortOrder
    user_objective_answer?: SortOrder
    user_theory_answer?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamQuestionAnswerCountOrderByAggregateInput
    _avg?: ExamQuestionAnswerAvgOrderByAggregateInput
    _max?: ExamQuestionAnswerMaxOrderByAggregateInput
    _min?: ExamQuestionAnswerMinOrderByAggregateInput
    _sum?: ExamQuestionAnswerSumOrderByAggregateInput
  }

  export type ExamQuestionAnswerScalarWhereWithAggregatesInput = {
    AND?: ExamQuestionAnswerScalarWhereWithAggregatesInput | ExamQuestionAnswerScalarWhereWithAggregatesInput[]
    OR?: ExamQuestionAnswerScalarWhereWithAggregatesInput[]
    NOT?: ExamQuestionAnswerScalarWhereWithAggregatesInput | ExamQuestionAnswerScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    attempt_id?: IntNullableWithAggregatesFilter<"ExamQuestionAnswer"> | number | null
    exam_id?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    question_id?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    model_name?: StringWithAggregatesFilter<"ExamQuestionAnswer"> | string
    person_id?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    user_objective_answer?: StringWithAggregatesFilter<"ExamQuestionAnswer"> | string
    user_theory_answer?: StringWithAggregatesFilter<"ExamQuestionAnswer"> | string
    score_obtained?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    marked_by?: IntWithAggregatesFilter<"ExamQuestionAnswer"> | number
    time_taken?: IntNullableWithAggregatesFilter<"ExamQuestionAnswer"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"ExamQuestionAnswer"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamQuestionAnswer"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestionAnswer"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamQuestionAnswer"> | Date | string | null
  }

  export type ExamGiftWhereInput = {
    AND?: ExamGiftWhereInput | ExamGiftWhereInput[]
    OR?: ExamGiftWhereInput[]
    NOT?: ExamGiftWhereInput | ExamGiftWhereInput[]
    id?: IntFilter<"ExamGift"> | number
    exam_id?: IntFilter<"ExamGift"> | number
    created_by?: IntNullableFilter<"ExamGift"> | number | null
    created_at?: DateTimeFilter<"ExamGift"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamGift"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamGift"> | Date | string | null
  }

  export type ExamGiftOrderByWithRelationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
  }

  export type ExamGiftWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: ExamGiftWhereInput | ExamGiftWhereInput[]
    OR?: ExamGiftWhereInput[]
    NOT?: ExamGiftWhereInput | ExamGiftWhereInput[]
    exam_id?: IntFilter<"ExamGift"> | number
    created_by?: IntNullableFilter<"ExamGift"> | number | null
    created_at?: DateTimeFilter<"ExamGift"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamGift"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamGift"> | Date | string | null
  }, "id">

  export type ExamGiftOrderByWithAggregationInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    _count?: ExamGiftCountOrderByAggregateInput
    _avg?: ExamGiftAvgOrderByAggregateInput
    _max?: ExamGiftMaxOrderByAggregateInput
    _min?: ExamGiftMinOrderByAggregateInput
    _sum?: ExamGiftSumOrderByAggregateInput
  }

  export type ExamGiftScalarWhereWithAggregatesInput = {
    AND?: ExamGiftScalarWhereWithAggregatesInput | ExamGiftScalarWhereWithAggregatesInput[]
    OR?: ExamGiftScalarWhereWithAggregatesInput[]
    NOT?: ExamGiftScalarWhereWithAggregatesInput | ExamGiftScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ExamGift"> | number
    exam_id?: IntWithAggregatesFilter<"ExamGift"> | number
    created_by?: IntNullableWithAggregatesFilter<"ExamGift"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"ExamGift"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"ExamGift"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ExamGift"> | Date | string | null
  }

  export type SchoolRecordWhereInput = {
    AND?: SchoolRecordWhereInput | SchoolRecordWhereInput[]
    OR?: SchoolRecordWhereInput[]
    NOT?: SchoolRecordWhereInput | SchoolRecordWhereInput[]
    id?: IntFilter<"SchoolRecord"> | number
    school_name?: StringFilter<"SchoolRecord"> | string
    school_code?: IntFilter<"SchoolRecord"> | number
    school_databasename?: StringFilter<"SchoolRecord"> | string
    school_active?: IntNullableFilter<"SchoolRecord"> | number | null
    school_approved?: IntNullableFilter<"SchoolRecord"> | number | null
    created_by?: IntNullableFilter<"SchoolRecord"> | number | null
    created_at?: DateTimeNullableFilter<"SchoolRecord"> | Date | string | null
    updated_at?: DateTimeNullableFilter<"SchoolRecord"> | Date | string | null
  }

  export type SchoolRecordOrderByWithRelationInput = {
    id?: SortOrder
    school_name?: SortOrder
    school_code?: SortOrder
    school_databasename?: SortOrder
    school_active?: SortOrderInput | SortOrder
    school_approved?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    _relevance?: SchoolRecordOrderByRelevanceInput
  }

  export type SchoolRecordWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: SchoolRecordWhereInput | SchoolRecordWhereInput[]
    OR?: SchoolRecordWhereInput[]
    NOT?: SchoolRecordWhereInput | SchoolRecordWhereInput[]
    school_name?: StringFilter<"SchoolRecord"> | string
    school_code?: IntFilter<"SchoolRecord"> | number
    school_databasename?: StringFilter<"SchoolRecord"> | string
    school_active?: IntNullableFilter<"SchoolRecord"> | number | null
    school_approved?: IntNullableFilter<"SchoolRecord"> | number | null
    created_by?: IntNullableFilter<"SchoolRecord"> | number | null
    created_at?: DateTimeNullableFilter<"SchoolRecord"> | Date | string | null
    updated_at?: DateTimeNullableFilter<"SchoolRecord"> | Date | string | null
  }, "id">

  export type SchoolRecordOrderByWithAggregationInput = {
    id?: SortOrder
    school_name?: SortOrder
    school_code?: SortOrder
    school_databasename?: SortOrder
    school_active?: SortOrderInput | SortOrder
    school_approved?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    _count?: SchoolRecordCountOrderByAggregateInput
    _avg?: SchoolRecordAvgOrderByAggregateInput
    _max?: SchoolRecordMaxOrderByAggregateInput
    _min?: SchoolRecordMinOrderByAggregateInput
    _sum?: SchoolRecordSumOrderByAggregateInput
  }

  export type SchoolRecordScalarWhereWithAggregatesInput = {
    AND?: SchoolRecordScalarWhereWithAggregatesInput | SchoolRecordScalarWhereWithAggregatesInput[]
    OR?: SchoolRecordScalarWhereWithAggregatesInput[]
    NOT?: SchoolRecordScalarWhereWithAggregatesInput | SchoolRecordScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SchoolRecord"> | number
    school_name?: StringWithAggregatesFilter<"SchoolRecord"> | string
    school_code?: IntWithAggregatesFilter<"SchoolRecord"> | number
    school_databasename?: StringWithAggregatesFilter<"SchoolRecord"> | string
    school_active?: IntNullableWithAggregatesFilter<"SchoolRecord"> | number | null
    school_approved?: IntNullableWithAggregatesFilter<"SchoolRecord"> | number | null
    created_by?: IntNullableWithAggregatesFilter<"SchoolRecord"> | number | null
    created_at?: DateTimeNullableWithAggregatesFilter<"SchoolRecord"> | Date | string | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"SchoolRecord"> | Date | string | null
  }

  export type ComponentGroupWhereInput = {
    AND?: ComponentGroupWhereInput | ComponentGroupWhereInput[]
    OR?: ComponentGroupWhereInput[]
    NOT?: ComponentGroupWhereInput | ComponentGroupWhereInput[]
    id?: IntFilter<"ComponentGroup"> | number
    component_group_name?: StringFilter<"ComponentGroup"> | string
    created_at?: DateTimeFilter<"ComponentGroup"> | Date | string
    created_by?: IntNullableFilter<"ComponentGroup"> | number | null
    updated_at?: DateTimeNullableFilter<"ComponentGroup"> | Date | string | null
    updated_by?: IntNullableFilter<"ComponentGroup"> | number | null
    deleted_at?: DateTimeNullableFilter<"ComponentGroup"> | Date | string | null
    deleted_by?: IntNullableFilter<"ComponentGroup"> | number | null
  }

  export type ComponentGroupOrderByWithRelationInput = {
    id?: SortOrder
    component_group_name?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: ComponentGroupOrderByRelevanceInput
  }

  export type ComponentGroupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    component_group_name?: string
    AND?: ComponentGroupWhereInput | ComponentGroupWhereInput[]
    OR?: ComponentGroupWhereInput[]
    NOT?: ComponentGroupWhereInput | ComponentGroupWhereInput[]
    created_at?: DateTimeFilter<"ComponentGroup"> | Date | string
    created_by?: IntNullableFilter<"ComponentGroup"> | number | null
    updated_at?: DateTimeNullableFilter<"ComponentGroup"> | Date | string | null
    updated_by?: IntNullableFilter<"ComponentGroup"> | number | null
    deleted_at?: DateTimeNullableFilter<"ComponentGroup"> | Date | string | null
    deleted_by?: IntNullableFilter<"ComponentGroup"> | number | null
  }, "id" | "component_group_name">

  export type ComponentGroupOrderByWithAggregationInput = {
    id?: SortOrder
    component_group_name?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: ComponentGroupCountOrderByAggregateInput
    _avg?: ComponentGroupAvgOrderByAggregateInput
    _max?: ComponentGroupMaxOrderByAggregateInput
    _min?: ComponentGroupMinOrderByAggregateInput
    _sum?: ComponentGroupSumOrderByAggregateInput
  }

  export type ComponentGroupScalarWhereWithAggregatesInput = {
    AND?: ComponentGroupScalarWhereWithAggregatesInput | ComponentGroupScalarWhereWithAggregatesInput[]
    OR?: ComponentGroupScalarWhereWithAggregatesInput[]
    NOT?: ComponentGroupScalarWhereWithAggregatesInput | ComponentGroupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"ComponentGroup"> | number
    component_group_name?: StringWithAggregatesFilter<"ComponentGroup"> | string
    created_at?: DateTimeWithAggregatesFilter<"ComponentGroup"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"ComponentGroup"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"ComponentGroup"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"ComponentGroup"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"ComponentGroup"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"ComponentGroup"> | number | null
  }

  export type ComponentWhereInput = {
    AND?: ComponentWhereInput | ComponentWhereInput[]
    OR?: ComponentWhereInput[]
    NOT?: ComponentWhereInput | ComponentWhereInput[]
    id?: IntFilter<"Component"> | number
    component_group_id?: IntFilter<"Component"> | number
    component_name?: StringFilter<"Component"> | string
    component_displayname?: StringFilter<"Component"> | string
    component_desc?: StringNullableFilter<"Component"> | string | null
    component_image_url?: StringNullableFilter<"Component"> | string | null
    component_file_name?: StringNullableFilter<"Component"> | string | null
    is_native?: IntFilter<"Component"> | number
    is_enabled?: IntFilter<"Component"> | number
    created_at?: DateTimeFilter<"Component"> | Date | string
    created_by?: IntNullableFilter<"Component"> | number | null
    updated_at?: DateTimeNullableFilter<"Component"> | Date | string | null
    updated_by?: IntNullableFilter<"Component"> | number | null
    deleted_at?: DateTimeNullableFilter<"Component"> | Date | string | null
    deleted_by?: IntNullableFilter<"Component"> | number | null
  }

  export type ComponentOrderByWithRelationInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    component_name?: SortOrder
    component_displayname?: SortOrder
    component_desc?: SortOrderInput | SortOrder
    component_image_url?: SortOrderInput | SortOrder
    component_file_name?: SortOrderInput | SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: ComponentOrderByRelevanceInput
  }

  export type ComponentWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    component_name?: string
    component_displayname?: string
    AND?: ComponentWhereInput | ComponentWhereInput[]
    OR?: ComponentWhereInput[]
    NOT?: ComponentWhereInput | ComponentWhereInput[]
    component_group_id?: IntFilter<"Component"> | number
    component_desc?: StringNullableFilter<"Component"> | string | null
    component_image_url?: StringNullableFilter<"Component"> | string | null
    component_file_name?: StringNullableFilter<"Component"> | string | null
    is_native?: IntFilter<"Component"> | number
    is_enabled?: IntFilter<"Component"> | number
    created_at?: DateTimeFilter<"Component"> | Date | string
    created_by?: IntNullableFilter<"Component"> | number | null
    updated_at?: DateTimeNullableFilter<"Component"> | Date | string | null
    updated_by?: IntNullableFilter<"Component"> | number | null
    deleted_at?: DateTimeNullableFilter<"Component"> | Date | string | null
    deleted_by?: IntNullableFilter<"Component"> | number | null
  }, "id" | "component_name" | "component_displayname">

  export type ComponentOrderByWithAggregationInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    component_name?: SortOrder
    component_displayname?: SortOrder
    component_desc?: SortOrderInput | SortOrder
    component_image_url?: SortOrderInput | SortOrder
    component_file_name?: SortOrderInput | SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: ComponentCountOrderByAggregateInput
    _avg?: ComponentAvgOrderByAggregateInput
    _max?: ComponentMaxOrderByAggregateInput
    _min?: ComponentMinOrderByAggregateInput
    _sum?: ComponentSumOrderByAggregateInput
  }

  export type ComponentScalarWhereWithAggregatesInput = {
    AND?: ComponentScalarWhereWithAggregatesInput | ComponentScalarWhereWithAggregatesInput[]
    OR?: ComponentScalarWhereWithAggregatesInput[]
    NOT?: ComponentScalarWhereWithAggregatesInput | ComponentScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Component"> | number
    component_group_id?: IntWithAggregatesFilter<"Component"> | number
    component_name?: StringWithAggregatesFilter<"Component"> | string
    component_displayname?: StringWithAggregatesFilter<"Component"> | string
    component_desc?: StringNullableWithAggregatesFilter<"Component"> | string | null
    component_image_url?: StringNullableWithAggregatesFilter<"Component"> | string | null
    component_file_name?: StringNullableWithAggregatesFilter<"Component"> | string | null
    is_native?: IntWithAggregatesFilter<"Component"> | number
    is_enabled?: IntWithAggregatesFilter<"Component"> | number
    created_at?: DateTimeWithAggregatesFilter<"Component"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"Component"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"Component"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"Component"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"Component"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"Component"> | number | null
  }

  export type CrudPageWhereInput = {
    AND?: CrudPageWhereInput | CrudPageWhereInput[]
    OR?: CrudPageWhereInput[]
    NOT?: CrudPageWhereInput | CrudPageWhereInput[]
    id?: IntFilter<"CrudPage"> | number
    name?: StringFilter<"CrudPage"> | string
    schema?: JsonFilter<"CrudPage">
    is_enabled?: IntFilter<"CrudPage"> | number
    created_at?: DateTimeFilter<"CrudPage"> | Date | string
    created_by?: IntNullableFilter<"CrudPage"> | number | null
    updated_at?: DateTimeNullableFilter<"CrudPage"> | Date | string | null
    updated_by?: IntNullableFilter<"CrudPage"> | number | null
    deleted_at?: DateTimeNullableFilter<"CrudPage"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudPage"> | number | null
  }

  export type CrudPageOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: CrudPageOrderByRelevanceInput
  }

  export type CrudPageWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    AND?: CrudPageWhereInput | CrudPageWhereInput[]
    OR?: CrudPageWhereInput[]
    NOT?: CrudPageWhereInput | CrudPageWhereInput[]
    schema?: JsonFilter<"CrudPage">
    is_enabled?: IntFilter<"CrudPage"> | number
    created_at?: DateTimeFilter<"CrudPage"> | Date | string
    created_by?: IntNullableFilter<"CrudPage"> | number | null
    updated_at?: DateTimeNullableFilter<"CrudPage"> | Date | string | null
    updated_by?: IntNullableFilter<"CrudPage"> | number | null
    deleted_at?: DateTimeNullableFilter<"CrudPage"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudPage"> | number | null
  }, "id" | "name">

  export type CrudPageOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: CrudPageCountOrderByAggregateInput
    _avg?: CrudPageAvgOrderByAggregateInput
    _max?: CrudPageMaxOrderByAggregateInput
    _min?: CrudPageMinOrderByAggregateInput
    _sum?: CrudPageSumOrderByAggregateInput
  }

  export type CrudPageScalarWhereWithAggregatesInput = {
    AND?: CrudPageScalarWhereWithAggregatesInput | CrudPageScalarWhereWithAggregatesInput[]
    OR?: CrudPageScalarWhereWithAggregatesInput[]
    NOT?: CrudPageScalarWhereWithAggregatesInput | CrudPageScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"CrudPage"> | number
    name?: StringWithAggregatesFilter<"CrudPage"> | string
    schema?: JsonWithAggregatesFilter<"CrudPage">
    is_enabled?: IntWithAggregatesFilter<"CrudPage"> | number
    created_at?: DateTimeWithAggregatesFilter<"CrudPage"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"CrudPage"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"CrudPage"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"CrudPage"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"CrudPage"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"CrudPage"> | number | null
  }

  export type AppUserTypeWhereInput = {
    AND?: AppUserTypeWhereInput | AppUserTypeWhereInput[]
    OR?: AppUserTypeWhereInput[]
    NOT?: AppUserTypeWhereInput | AppUserTypeWhereInput[]
    id?: IntFilter<"AppUserType"> | number
    app_user_type?: StringFilter<"AppUserType"> | string
    created_at?: DateTimeFilter<"AppUserType"> | Date | string
    created_by?: IntNullableFilter<"AppUserType"> | number | null
    updated_at?: DateTimeNullableFilter<"AppUserType"> | Date | string | null
    updated_by?: IntNullableFilter<"AppUserType"> | number | null
    deleted_at?: DateTimeNullableFilter<"AppUserType"> | Date | string | null
    deleted_by?: IntNullableFilter<"AppUserType"> | number | null
  }

  export type AppUserTypeOrderByWithRelationInput = {
    id?: SortOrder
    app_user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: AppUserTypeOrderByRelevanceInput
  }

  export type AppUserTypeWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    app_user_type?: string
    AND?: AppUserTypeWhereInput | AppUserTypeWhereInput[]
    OR?: AppUserTypeWhereInput[]
    NOT?: AppUserTypeWhereInput | AppUserTypeWhereInput[]
    created_at?: DateTimeFilter<"AppUserType"> | Date | string
    created_by?: IntNullableFilter<"AppUserType"> | number | null
    updated_at?: DateTimeNullableFilter<"AppUserType"> | Date | string | null
    updated_by?: IntNullableFilter<"AppUserType"> | number | null
    deleted_at?: DateTimeNullableFilter<"AppUserType"> | Date | string | null
    deleted_by?: IntNullableFilter<"AppUserType"> | number | null
  }, "id" | "app_user_type">

  export type AppUserTypeOrderByWithAggregationInput = {
    id?: SortOrder
    app_user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: AppUserTypeCountOrderByAggregateInput
    _avg?: AppUserTypeAvgOrderByAggregateInput
    _max?: AppUserTypeMaxOrderByAggregateInput
    _min?: AppUserTypeMinOrderByAggregateInput
    _sum?: AppUserTypeSumOrderByAggregateInput
  }

  export type AppUserTypeScalarWhereWithAggregatesInput = {
    AND?: AppUserTypeScalarWhereWithAggregatesInput | AppUserTypeScalarWhereWithAggregatesInput[]
    OR?: AppUserTypeScalarWhereWithAggregatesInput[]
    NOT?: AppUserTypeScalarWhereWithAggregatesInput | AppUserTypeScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"AppUserType"> | number
    app_user_type?: StringWithAggregatesFilter<"AppUserType"> | string
    created_at?: DateTimeWithAggregatesFilter<"AppUserType"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"AppUserType"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"AppUserType"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"AppUserType"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"AppUserType"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"AppUserType"> | number | null
  }

  export type MenuGroupWhereInput = {
    AND?: MenuGroupWhereInput | MenuGroupWhereInput[]
    OR?: MenuGroupWhereInput[]
    NOT?: MenuGroupWhereInput | MenuGroupWhereInput[]
    id?: IntFilter<"MenuGroup"> | number
    menu_group_name?: StringFilter<"MenuGroup"> | string
    menu_group_sort?: IntNullableFilter<"MenuGroup"> | number | null
    menu_group_icon?: StringNullableFilter<"MenuGroup"> | string | null
    menu_active?: IntFilter<"MenuGroup"> | number
    is_root?: IntFilter<"MenuGroup"> | number
    parent_group_id?: IntNullableFilter<"MenuGroup"> | number | null
    created_at?: DateTimeFilter<"MenuGroup"> | Date | string
    created_by?: IntNullableFilter<"MenuGroup"> | number | null
    updated_at?: DateTimeNullableFilter<"MenuGroup"> | Date | string | null
    updated_by?: IntNullableFilter<"MenuGroup"> | number | null
    deleted_at?: DateTimeNullableFilter<"MenuGroup"> | Date | string | null
    deleted_by?: IntNullableFilter<"MenuGroup"> | number | null
  }

  export type MenuGroupOrderByWithRelationInput = {
    id?: SortOrder
    menu_group_name?: SortOrder
    menu_group_sort?: SortOrderInput | SortOrder
    menu_group_icon?: SortOrderInput | SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrderInput | SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: MenuGroupOrderByRelevanceInput
  }

  export type MenuGroupWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    menu_group_name?: string
    AND?: MenuGroupWhereInput | MenuGroupWhereInput[]
    OR?: MenuGroupWhereInput[]
    NOT?: MenuGroupWhereInput | MenuGroupWhereInput[]
    menu_group_sort?: IntNullableFilter<"MenuGroup"> | number | null
    menu_group_icon?: StringNullableFilter<"MenuGroup"> | string | null
    menu_active?: IntFilter<"MenuGroup"> | number
    is_root?: IntFilter<"MenuGroup"> | number
    parent_group_id?: IntNullableFilter<"MenuGroup"> | number | null
    created_at?: DateTimeFilter<"MenuGroup"> | Date | string
    created_by?: IntNullableFilter<"MenuGroup"> | number | null
    updated_at?: DateTimeNullableFilter<"MenuGroup"> | Date | string | null
    updated_by?: IntNullableFilter<"MenuGroup"> | number | null
    deleted_at?: DateTimeNullableFilter<"MenuGroup"> | Date | string | null
    deleted_by?: IntNullableFilter<"MenuGroup"> | number | null
  }, "id" | "menu_group_name">

  export type MenuGroupOrderByWithAggregationInput = {
    id?: SortOrder
    menu_group_name?: SortOrder
    menu_group_sort?: SortOrderInput | SortOrder
    menu_group_icon?: SortOrderInput | SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrderInput | SortOrder
    created_at?: SortOrder
    created_by?: SortOrderInput | SortOrder
    updated_at?: SortOrderInput | SortOrder
    updated_by?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: MenuGroupCountOrderByAggregateInput
    _avg?: MenuGroupAvgOrderByAggregateInput
    _max?: MenuGroupMaxOrderByAggregateInput
    _min?: MenuGroupMinOrderByAggregateInput
    _sum?: MenuGroupSumOrderByAggregateInput
  }

  export type MenuGroupScalarWhereWithAggregatesInput = {
    AND?: MenuGroupScalarWhereWithAggregatesInput | MenuGroupScalarWhereWithAggregatesInput[]
    OR?: MenuGroupScalarWhereWithAggregatesInput[]
    NOT?: MenuGroupScalarWhereWithAggregatesInput | MenuGroupScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"MenuGroup"> | number
    menu_group_name?: StringWithAggregatesFilter<"MenuGroup"> | string
    menu_group_sort?: IntNullableWithAggregatesFilter<"MenuGroup"> | number | null
    menu_group_icon?: StringNullableWithAggregatesFilter<"MenuGroup"> | string | null
    menu_active?: IntWithAggregatesFilter<"MenuGroup"> | number
    is_root?: IntWithAggregatesFilter<"MenuGroup"> | number
    parent_group_id?: IntNullableWithAggregatesFilter<"MenuGroup"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"MenuGroup"> | Date | string
    created_by?: IntNullableWithAggregatesFilter<"MenuGroup"> | number | null
    updated_at?: DateTimeNullableWithAggregatesFilter<"MenuGroup"> | Date | string | null
    updated_by?: IntNullableWithAggregatesFilter<"MenuGroup"> | number | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"MenuGroup"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"MenuGroup"> | number | null
  }

  export type SystemConfigurationWhereInput = {
    AND?: SystemConfigurationWhereInput | SystemConfigurationWhereInput[]
    OR?: SystemConfigurationWhereInput[]
    NOT?: SystemConfigurationWhereInput | SystemConfigurationWhereInput[]
    id?: IntFilter<"SystemConfiguration"> | number
    configuration_name?: StringFilter<"SystemConfiguration"> | string
    configurations?: JsonFilter<"SystemConfiguration">
    created_by?: IntNullableFilter<"SystemConfiguration"> | number | null
    created_at?: DateTimeFilter<"SystemConfiguration"> | Date | string
    updated_at?: DateTimeNullableFilter<"SystemConfiguration"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SystemConfiguration"> | Date | string | null
    deleted_by?: IntNullableFilter<"SystemConfiguration"> | number | null
  }

  export type SystemConfigurationOrderByWithRelationInput = {
    id?: SortOrder
    configuration_name?: SortOrder
    configurations?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: SystemConfigurationOrderByRelevanceInput
  }

  export type SystemConfigurationWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    configuration_name?: string
    AND?: SystemConfigurationWhereInput | SystemConfigurationWhereInput[]
    OR?: SystemConfigurationWhereInput[]
    NOT?: SystemConfigurationWhereInput | SystemConfigurationWhereInput[]
    configurations?: JsonFilter<"SystemConfiguration">
    created_by?: IntNullableFilter<"SystemConfiguration"> | number | null
    created_at?: DateTimeFilter<"SystemConfiguration"> | Date | string
    updated_at?: DateTimeNullableFilter<"SystemConfiguration"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SystemConfiguration"> | Date | string | null
    deleted_by?: IntNullableFilter<"SystemConfiguration"> | number | null
  }, "id" | "configuration_name">

  export type SystemConfigurationOrderByWithAggregationInput = {
    id?: SortOrder
    configuration_name?: SortOrder
    configurations?: SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: SystemConfigurationCountOrderByAggregateInput
    _avg?: SystemConfigurationAvgOrderByAggregateInput
    _max?: SystemConfigurationMaxOrderByAggregateInput
    _min?: SystemConfigurationMinOrderByAggregateInput
    _sum?: SystemConfigurationSumOrderByAggregateInput
  }

  export type SystemConfigurationScalarWhereWithAggregatesInput = {
    AND?: SystemConfigurationScalarWhereWithAggregatesInput | SystemConfigurationScalarWhereWithAggregatesInput[]
    OR?: SystemConfigurationScalarWhereWithAggregatesInput[]
    NOT?: SystemConfigurationScalarWhereWithAggregatesInput | SystemConfigurationScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"SystemConfiguration"> | number
    configuration_name?: StringWithAggregatesFilter<"SystemConfiguration"> | string
    configurations?: JsonWithAggregatesFilter<"SystemConfiguration">
    created_by?: IntNullableWithAggregatesFilter<"SystemConfiguration"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"SystemConfiguration"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"SystemConfiguration"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"SystemConfiguration"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"SystemConfiguration"> | number | null
  }

  export type CrudFrontWhereInput = {
    AND?: CrudFrontWhereInput | CrudFrontWhereInput[]
    OR?: CrudFrontWhereInput[]
    NOT?: CrudFrontWhereInput | CrudFrontWhereInput[]
    id?: IntFilter<"CrudFront"> | number
    name?: StringFilter<"CrudFront"> | string
    permission_name?: StringNullableFilter<"CrudFront"> | string | null
    handler_name?: StringNullableFilter<"CrudFront"> | string | null
    post_route?: StringNullableFilter<"CrudFront"> | string | null
    read_route?: StringNullableFilter<"CrudFront"> | string | null
    update_route?: StringNullableFilter<"CrudFront"> | string | null
    delete_route?: StringNullableFilter<"CrudFront"> | string | null
    schema?: JsonFilter<"CrudFront">
    is_enabled?: IntFilter<"CrudFront"> | number
    menu_name?: StringNullableFilter<"CrudFront"> | string | null
    menu_icon?: StringNullableFilter<"CrudFront"> | string | null
    menu_group?: StringNullableFilter<"CrudFront"> | string | null
    created_by?: IntNullableFilter<"CrudFront"> | number | null
    created_at?: DateTimeFilter<"CrudFront"> | Date | string
    updated_at?: DateTimeNullableFilter<"CrudFront"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"CrudFront"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudFront"> | number | null
  }

  export type CrudFrontOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    permission_name?: SortOrderInput | SortOrder
    handler_name?: SortOrderInput | SortOrder
    post_route?: SortOrderInput | SortOrder
    read_route?: SortOrderInput | SortOrder
    update_route?: SortOrderInput | SortOrder
    delete_route?: SortOrderInput | SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    menu_name?: SortOrderInput | SortOrder
    menu_icon?: SortOrderInput | SortOrder
    menu_group?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: CrudFrontOrderByRelevanceInput
  }

  export type CrudFrontWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    permission_name?: string
    handler_name?: string
    post_route?: string
    read_route?: string
    update_route?: string
    delete_route?: string
    AND?: CrudFrontWhereInput | CrudFrontWhereInput[]
    OR?: CrudFrontWhereInput[]
    NOT?: CrudFrontWhereInput | CrudFrontWhereInput[]
    schema?: JsonFilter<"CrudFront">
    is_enabled?: IntFilter<"CrudFront"> | number
    menu_name?: StringNullableFilter<"CrudFront"> | string | null
    menu_icon?: StringNullableFilter<"CrudFront"> | string | null
    menu_group?: StringNullableFilter<"CrudFront"> | string | null
    created_by?: IntNullableFilter<"CrudFront"> | number | null
    created_at?: DateTimeFilter<"CrudFront"> | Date | string
    updated_at?: DateTimeNullableFilter<"CrudFront"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"CrudFront"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudFront"> | number | null
  }, "id" | "name" | "permission_name" | "handler_name" | "post_route" | "read_route" | "update_route" | "delete_route">

  export type CrudFrontOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    permission_name?: SortOrderInput | SortOrder
    handler_name?: SortOrderInput | SortOrder
    post_route?: SortOrderInput | SortOrder
    read_route?: SortOrderInput | SortOrder
    update_route?: SortOrderInput | SortOrder
    delete_route?: SortOrderInput | SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    menu_name?: SortOrderInput | SortOrder
    menu_icon?: SortOrderInput | SortOrder
    menu_group?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: CrudFrontCountOrderByAggregateInput
    _avg?: CrudFrontAvgOrderByAggregateInput
    _max?: CrudFrontMaxOrderByAggregateInput
    _min?: CrudFrontMinOrderByAggregateInput
    _sum?: CrudFrontSumOrderByAggregateInput
  }

  export type CrudFrontScalarWhereWithAggregatesInput = {
    AND?: CrudFrontScalarWhereWithAggregatesInput | CrudFrontScalarWhereWithAggregatesInput[]
    OR?: CrudFrontScalarWhereWithAggregatesInput[]
    NOT?: CrudFrontScalarWhereWithAggregatesInput | CrudFrontScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"CrudFront"> | number
    name?: StringWithAggregatesFilter<"CrudFront"> | string
    permission_name?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    handler_name?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    post_route?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    read_route?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    update_route?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    delete_route?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    schema?: JsonWithAggregatesFilter<"CrudFront">
    is_enabled?: IntWithAggregatesFilter<"CrudFront"> | number
    menu_name?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    menu_icon?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    menu_group?: StringNullableWithAggregatesFilter<"CrudFront"> | string | null
    created_by?: IntNullableWithAggregatesFilter<"CrudFront"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"CrudFront"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"CrudFront"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"CrudFront"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"CrudFront"> | number | null
  }

  export type CrudUtilWhereInput = {
    AND?: CrudUtilWhereInput | CrudUtilWhereInput[]
    OR?: CrudUtilWhereInput[]
    NOT?: CrudUtilWhereInput | CrudUtilWhereInput[]
    id?: IntFilter<"CrudUtil"> | number
    name?: StringFilter<"CrudUtil"> | string
    menu_name?: StringNullableFilter<"CrudUtil"> | string | null
    menu_icon?: StringNullableFilter<"CrudUtil"> | string | null
    menu_group?: StringNullableFilter<"CrudUtil"> | string | null
    permission_name?: StringFilter<"CrudUtil"> | string
    menu_sort?: StringNullableFilter<"CrudUtil"> | string | null
    log_update?: IntFilter<"CrudUtil"> | number
    primary_key?: StringNullableFilter<"CrudUtil"> | string | null
    show_field?: StringFilter<"CrudUtil"> | string
    paginate_fetch?: IntFilter<"CrudUtil"> | number
    permission_for_all?: StringNullableFilter<"CrudUtil"> | string | null
    should_backup?: IntFilter<"CrudUtil"> | number
    table_name?: StringFilter<"CrudUtil"> | string
    model_name?: StringFilter<"CrudUtil"> | string
    schema?: JsonFilter<"CrudUtil">
    fetch_all_manually?: IntFilter<"CrudUtil"> | number
    fetch_manually?: IntFilter<"CrudUtil"> | number
    create_manually?: IntFilter<"CrudUtil"> | number
    update_manually?: IntFilter<"CrudUtil"> | number
    delete_manually?: IntFilter<"CrudUtil"> | number
    use_modal?: IntFilter<"CrudUtil"> | number
    use_custom_form?: IntFilter<"CrudUtil"> | number
    is_fetch_all_public?: IntFilter<"CrudUtil"> | number
    is_fetch_public?: IntFilter<"CrudUtil"> | number
    is_create_public?: IntFilter<"CrudUtil"> | number
    is_update_public?: IntFilter<"CrudUtil"> | number
    is_delete_public?: IntFilter<"CrudUtil"> | number
    fetch_all_path?: StringNullableFilter<"CrudUtil"> | string | null
    fetch_path?: StringNullableFilter<"CrudUtil"> | string | null
    create_path?: StringNullableFilter<"CrudUtil"> | string | null
    update_path?: StringNullableFilter<"CrudUtil"> | string | null
    delete_path?: StringNullableFilter<"CrudUtil"> | string | null
    query_parameter?: StringNullableFilter<"CrudUtil"> | string | null
    custom_form_name?: StringNullableFilter<"CrudUtil"> | string | null
    block_fetch_all?: IntFilter<"CrudUtil"> | number
    block_fetch?: IntFilter<"CrudUtil"> | number
    block_create?: IntFilter<"CrudUtil"> | number
    block_update?: IntFilter<"CrudUtil"> | number
    block_delete?: IntFilter<"CrudUtil"> | number
    is_enabled?: IntFilter<"CrudUtil"> | number
    front_validations?: JsonNullableFilter<"CrudUtil">
    table_columns?: JsonNullableFilter<"CrudUtil">
    backend_validations?: JsonNullableFilter<"CrudUtil">
    relationships?: JsonNullableFilter<"CrudUtil">
    filters?: JsonFilter<"CrudUtil">
    filters_internal?: JsonNullableFilter<"CrudUtil">
    hooks?: JsonNullableFilter<"CrudUtil">
    children?: JsonFilter<"CrudUtil">
    info_messages?: JsonFilter<"CrudUtil">
    config?: JsonNullableFilter<"CrudUtil">
    buttons?: JsonNullableFilter<"CrudUtil">
    others?: JsonNullableFilter<"CrudUtil">
    created_by?: IntNullableFilter<"CrudUtil"> | number | null
    created_at?: DateTimeFilter<"CrudUtil"> | Date | string
    updated_at?: DateTimeNullableFilter<"CrudUtil"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"CrudUtil"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudUtil"> | number | null
  }

  export type CrudUtilOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    menu_name?: SortOrderInput | SortOrder
    menu_icon?: SortOrderInput | SortOrder
    menu_group?: SortOrderInput | SortOrder
    permission_name?: SortOrder
    menu_sort?: SortOrderInput | SortOrder
    log_update?: SortOrder
    primary_key?: SortOrderInput | SortOrder
    show_field?: SortOrder
    paginate_fetch?: SortOrder
    permission_for_all?: SortOrderInput | SortOrder
    should_backup?: SortOrder
    table_name?: SortOrder
    model_name?: SortOrder
    schema?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    fetch_all_path?: SortOrderInput | SortOrder
    fetch_path?: SortOrderInput | SortOrder
    create_path?: SortOrderInput | SortOrder
    update_path?: SortOrderInput | SortOrder
    delete_path?: SortOrderInput | SortOrder
    query_parameter?: SortOrderInput | SortOrder
    custom_form_name?: SortOrderInput | SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    front_validations?: SortOrderInput | SortOrder
    table_columns?: SortOrderInput | SortOrder
    backend_validations?: SortOrderInput | SortOrder
    relationships?: SortOrderInput | SortOrder
    filters?: SortOrder
    filters_internal?: SortOrderInput | SortOrder
    hooks?: SortOrderInput | SortOrder
    children?: SortOrder
    info_messages?: SortOrder
    config?: SortOrderInput | SortOrder
    buttons?: SortOrderInput | SortOrder
    others?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _relevance?: CrudUtilOrderByRelevanceInput
  }

  export type CrudUtilWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    permission_name?: string
    table_name?: string
    model_name?: string
    AND?: CrudUtilWhereInput | CrudUtilWhereInput[]
    OR?: CrudUtilWhereInput[]
    NOT?: CrudUtilWhereInput | CrudUtilWhereInput[]
    menu_name?: StringNullableFilter<"CrudUtil"> | string | null
    menu_icon?: StringNullableFilter<"CrudUtil"> | string | null
    menu_group?: StringNullableFilter<"CrudUtil"> | string | null
    menu_sort?: StringNullableFilter<"CrudUtil"> | string | null
    log_update?: IntFilter<"CrudUtil"> | number
    primary_key?: StringNullableFilter<"CrudUtil"> | string | null
    show_field?: StringFilter<"CrudUtil"> | string
    paginate_fetch?: IntFilter<"CrudUtil"> | number
    permission_for_all?: StringNullableFilter<"CrudUtil"> | string | null
    should_backup?: IntFilter<"CrudUtil"> | number
    schema?: JsonFilter<"CrudUtil">
    fetch_all_manually?: IntFilter<"CrudUtil"> | number
    fetch_manually?: IntFilter<"CrudUtil"> | number
    create_manually?: IntFilter<"CrudUtil"> | number
    update_manually?: IntFilter<"CrudUtil"> | number
    delete_manually?: IntFilter<"CrudUtil"> | number
    use_modal?: IntFilter<"CrudUtil"> | number
    use_custom_form?: IntFilter<"CrudUtil"> | number
    is_fetch_all_public?: IntFilter<"CrudUtil"> | number
    is_fetch_public?: IntFilter<"CrudUtil"> | number
    is_create_public?: IntFilter<"CrudUtil"> | number
    is_update_public?: IntFilter<"CrudUtil"> | number
    is_delete_public?: IntFilter<"CrudUtil"> | number
    fetch_all_path?: StringNullableFilter<"CrudUtil"> | string | null
    fetch_path?: StringNullableFilter<"CrudUtil"> | string | null
    create_path?: StringNullableFilter<"CrudUtil"> | string | null
    update_path?: StringNullableFilter<"CrudUtil"> | string | null
    delete_path?: StringNullableFilter<"CrudUtil"> | string | null
    query_parameter?: StringNullableFilter<"CrudUtil"> | string | null
    custom_form_name?: StringNullableFilter<"CrudUtil"> | string | null
    block_fetch_all?: IntFilter<"CrudUtil"> | number
    block_fetch?: IntFilter<"CrudUtil"> | number
    block_create?: IntFilter<"CrudUtil"> | number
    block_update?: IntFilter<"CrudUtil"> | number
    block_delete?: IntFilter<"CrudUtil"> | number
    is_enabled?: IntFilter<"CrudUtil"> | number
    front_validations?: JsonNullableFilter<"CrudUtil">
    table_columns?: JsonNullableFilter<"CrudUtil">
    backend_validations?: JsonNullableFilter<"CrudUtil">
    relationships?: JsonNullableFilter<"CrudUtil">
    filters?: JsonFilter<"CrudUtil">
    filters_internal?: JsonNullableFilter<"CrudUtil">
    hooks?: JsonNullableFilter<"CrudUtil">
    children?: JsonFilter<"CrudUtil">
    info_messages?: JsonFilter<"CrudUtil">
    config?: JsonNullableFilter<"CrudUtil">
    buttons?: JsonNullableFilter<"CrudUtil">
    others?: JsonNullableFilter<"CrudUtil">
    created_by?: IntNullableFilter<"CrudUtil"> | number | null
    created_at?: DateTimeFilter<"CrudUtil"> | Date | string
    updated_at?: DateTimeNullableFilter<"CrudUtil"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"CrudUtil"> | Date | string | null
    deleted_by?: IntNullableFilter<"CrudUtil"> | number | null
  }, "id" | "name" | "permission_name" | "table_name" | "model_name">

  export type CrudUtilOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    menu_name?: SortOrderInput | SortOrder
    menu_icon?: SortOrderInput | SortOrder
    menu_group?: SortOrderInput | SortOrder
    permission_name?: SortOrder
    menu_sort?: SortOrderInput | SortOrder
    log_update?: SortOrder
    primary_key?: SortOrderInput | SortOrder
    show_field?: SortOrder
    paginate_fetch?: SortOrder
    permission_for_all?: SortOrderInput | SortOrder
    should_backup?: SortOrder
    table_name?: SortOrder
    model_name?: SortOrder
    schema?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    fetch_all_path?: SortOrderInput | SortOrder
    fetch_path?: SortOrderInput | SortOrder
    create_path?: SortOrderInput | SortOrder
    update_path?: SortOrderInput | SortOrder
    delete_path?: SortOrderInput | SortOrder
    query_parameter?: SortOrderInput | SortOrder
    custom_form_name?: SortOrderInput | SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    front_validations?: SortOrderInput | SortOrder
    table_columns?: SortOrderInput | SortOrder
    backend_validations?: SortOrderInput | SortOrder
    relationships?: SortOrderInput | SortOrder
    filters?: SortOrder
    filters_internal?: SortOrderInput | SortOrder
    hooks?: SortOrderInput | SortOrder
    children?: SortOrder
    info_messages?: SortOrder
    config?: SortOrderInput | SortOrder
    buttons?: SortOrderInput | SortOrder
    others?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    updated_at?: SortOrderInput | SortOrder
    deleted_at?: SortOrderInput | SortOrder
    deleted_by?: SortOrderInput | SortOrder
    _count?: CrudUtilCountOrderByAggregateInput
    _avg?: CrudUtilAvgOrderByAggregateInput
    _max?: CrudUtilMaxOrderByAggregateInput
    _min?: CrudUtilMinOrderByAggregateInput
    _sum?: CrudUtilSumOrderByAggregateInput
  }

  export type CrudUtilScalarWhereWithAggregatesInput = {
    AND?: CrudUtilScalarWhereWithAggregatesInput | CrudUtilScalarWhereWithAggregatesInput[]
    OR?: CrudUtilScalarWhereWithAggregatesInput[]
    NOT?: CrudUtilScalarWhereWithAggregatesInput | CrudUtilScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"CrudUtil"> | number
    name?: StringWithAggregatesFilter<"CrudUtil"> | string
    menu_name?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    menu_icon?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    menu_group?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    permission_name?: StringWithAggregatesFilter<"CrudUtil"> | string
    menu_sort?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    log_update?: IntWithAggregatesFilter<"CrudUtil"> | number
    primary_key?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    show_field?: StringWithAggregatesFilter<"CrudUtil"> | string
    paginate_fetch?: IntWithAggregatesFilter<"CrudUtil"> | number
    permission_for_all?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    should_backup?: IntWithAggregatesFilter<"CrudUtil"> | number
    table_name?: StringWithAggregatesFilter<"CrudUtil"> | string
    model_name?: StringWithAggregatesFilter<"CrudUtil"> | string
    schema?: JsonWithAggregatesFilter<"CrudUtil">
    fetch_all_manually?: IntWithAggregatesFilter<"CrudUtil"> | number
    fetch_manually?: IntWithAggregatesFilter<"CrudUtil"> | number
    create_manually?: IntWithAggregatesFilter<"CrudUtil"> | number
    update_manually?: IntWithAggregatesFilter<"CrudUtil"> | number
    delete_manually?: IntWithAggregatesFilter<"CrudUtil"> | number
    use_modal?: IntWithAggregatesFilter<"CrudUtil"> | number
    use_custom_form?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_fetch_all_public?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_fetch_public?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_create_public?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_update_public?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_delete_public?: IntWithAggregatesFilter<"CrudUtil"> | number
    fetch_all_path?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    fetch_path?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    create_path?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    update_path?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    delete_path?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    query_parameter?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    custom_form_name?: StringNullableWithAggregatesFilter<"CrudUtil"> | string | null
    block_fetch_all?: IntWithAggregatesFilter<"CrudUtil"> | number
    block_fetch?: IntWithAggregatesFilter<"CrudUtil"> | number
    block_create?: IntWithAggregatesFilter<"CrudUtil"> | number
    block_update?: IntWithAggregatesFilter<"CrudUtil"> | number
    block_delete?: IntWithAggregatesFilter<"CrudUtil"> | number
    is_enabled?: IntWithAggregatesFilter<"CrudUtil"> | number
    front_validations?: JsonNullableWithAggregatesFilter<"CrudUtil">
    table_columns?: JsonNullableWithAggregatesFilter<"CrudUtil">
    backend_validations?: JsonNullableWithAggregatesFilter<"CrudUtil">
    relationships?: JsonNullableWithAggregatesFilter<"CrudUtil">
    filters?: JsonWithAggregatesFilter<"CrudUtil">
    filters_internal?: JsonNullableWithAggregatesFilter<"CrudUtil">
    hooks?: JsonNullableWithAggregatesFilter<"CrudUtil">
    children?: JsonWithAggregatesFilter<"CrudUtil">
    info_messages?: JsonWithAggregatesFilter<"CrudUtil">
    config?: JsonNullableWithAggregatesFilter<"CrudUtil">
    buttons?: JsonNullableWithAggregatesFilter<"CrudUtil">
    others?: JsonNullableWithAggregatesFilter<"CrudUtil">
    created_by?: IntNullableWithAggregatesFilter<"CrudUtil"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"CrudUtil"> | Date | string
    updated_at?: DateTimeNullableWithAggregatesFilter<"CrudUtil"> | Date | string | null
    deleted_at?: DateTimeNullableWithAggregatesFilter<"CrudUtil"> | Date | string | null
    deleted_by?: IntNullableWithAggregatesFilter<"CrudUtil"> | number | null
  }

  export type RegionWhereInput = {
    AND?: RegionWhereInput | RegionWhereInput[]
    OR?: RegionWhereInput[]
    NOT?: RegionWhereInput | RegionWhereInput[]
    id?: IntFilter<"Region"> | number
    name?: StringFilter<"Region"> | string
    translations?: JsonNullableFilter<"Region">
    wikiDataId?: StringNullableFilter<"Region"> | string | null
    createdAt?: DateTimeFilter<"Region"> | Date | string
    updatedAt?: DateTimeFilter<"Region"> | Date | string
    countries?: CountryListRelationFilter
    subregions?: SubregionListRelationFilter
  }

  export type RegionOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    translations?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    countries?: CountryOrderByRelationAggregateInput
    subregions?: SubregionOrderByRelationAggregateInput
    _relevance?: RegionOrderByRelevanceInput
  }

  export type RegionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    AND?: RegionWhereInput | RegionWhereInput[]
    OR?: RegionWhereInput[]
    NOT?: RegionWhereInput | RegionWhereInput[]
    translations?: JsonNullableFilter<"Region">
    wikiDataId?: StringNullableFilter<"Region"> | string | null
    createdAt?: DateTimeFilter<"Region"> | Date | string
    updatedAt?: DateTimeFilter<"Region"> | Date | string
    countries?: CountryListRelationFilter
    subregions?: SubregionListRelationFilter
  }, "id" | "name">

  export type RegionOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    translations?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: RegionCountOrderByAggregateInput
    _avg?: RegionAvgOrderByAggregateInput
    _max?: RegionMaxOrderByAggregateInput
    _min?: RegionMinOrderByAggregateInput
    _sum?: RegionSumOrderByAggregateInput
  }

  export type RegionScalarWhereWithAggregatesInput = {
    AND?: RegionScalarWhereWithAggregatesInput | RegionScalarWhereWithAggregatesInput[]
    OR?: RegionScalarWhereWithAggregatesInput[]
    NOT?: RegionScalarWhereWithAggregatesInput | RegionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Region"> | number
    name?: StringWithAggregatesFilter<"Region"> | string
    translations?: JsonNullableWithAggregatesFilter<"Region">
    wikiDataId?: StringNullableWithAggregatesFilter<"Region"> | string | null
    createdAt?: DateTimeWithAggregatesFilter<"Region"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"Region"> | Date | string
  }

  export type SubregionWhereInput = {
    AND?: SubregionWhereInput | SubregionWhereInput[]
    OR?: SubregionWhereInput[]
    NOT?: SubregionWhereInput | SubregionWhereInput[]
    id?: IntFilter<"Subregion"> | number
    name?: StringFilter<"Subregion"> | string
    region_id?: IntFilter<"Subregion"> | number
    translations?: JsonNullableFilter<"Subregion">
    wikiDataId?: StringNullableFilter<"Subregion"> | string | null
    createdAt?: DateTimeFilter<"Subregion"> | Date | string
    updatedAt?: DateTimeFilter<"Subregion"> | Date | string
    region?: XOR<RegionScalarRelationFilter, RegionWhereInput>
    countries?: CountryListRelationFilter
  }

  export type SubregionOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    region_id?: SortOrder
    translations?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    region?: RegionOrderByWithRelationInput
    countries?: CountryOrderByRelationAggregateInput
    _relevance?: SubregionOrderByRelevanceInput
  }

  export type SubregionWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    name?: string
    AND?: SubregionWhereInput | SubregionWhereInput[]
    OR?: SubregionWhereInput[]
    NOT?: SubregionWhereInput | SubregionWhereInput[]
    region_id?: IntFilter<"Subregion"> | number
    translations?: JsonNullableFilter<"Subregion">
    wikiDataId?: StringNullableFilter<"Subregion"> | string | null
    createdAt?: DateTimeFilter<"Subregion"> | Date | string
    updatedAt?: DateTimeFilter<"Subregion"> | Date | string
    region?: XOR<RegionScalarRelationFilter, RegionWhereInput>
    countries?: CountryListRelationFilter
  }, "id" | "name">

  export type SubregionOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    region_id?: SortOrder
    translations?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: SubregionCountOrderByAggregateInput
    _avg?: SubregionAvgOrderByAggregateInput
    _max?: SubregionMaxOrderByAggregateInput
    _min?: SubregionMinOrderByAggregateInput
    _sum?: SubregionSumOrderByAggregateInput
  }

  export type SubregionScalarWhereWithAggregatesInput = {
    AND?: SubregionScalarWhereWithAggregatesInput | SubregionScalarWhereWithAggregatesInput[]
    OR?: SubregionScalarWhereWithAggregatesInput[]
    NOT?: SubregionScalarWhereWithAggregatesInput | SubregionScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Subregion"> | number
    name?: StringWithAggregatesFilter<"Subregion"> | string
    region_id?: IntWithAggregatesFilter<"Subregion"> | number
    translations?: JsonNullableWithAggregatesFilter<"Subregion">
    wikiDataId?: StringNullableWithAggregatesFilter<"Subregion"> | string | null
    createdAt?: DateTimeWithAggregatesFilter<"Subregion"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"Subregion"> | Date | string
  }

  export type CountryWhereInput = {
    AND?: CountryWhereInput | CountryWhereInput[]
    OR?: CountryWhereInput[]
    NOT?: CountryWhereInput | CountryWhereInput[]
    id?: IntFilter<"Country"> | number
    name?: StringFilter<"Country"> | string
    iso3?: StringNullableFilter<"Country"> | string | null
    iso2?: StringNullableFilter<"Country"> | string | null
    numeric_code?: StringNullableFilter<"Country"> | string | null
    phonecode?: StringNullableFilter<"Country"> | string | null
    capital?: StringNullableFilter<"Country"> | string | null
    currency?: StringNullableFilter<"Country"> | string | null
    currency_name?: StringNullableFilter<"Country"> | string | null
    currency_symbol?: StringNullableFilter<"Country"> | string | null
    tld?: StringNullableFilter<"Country"> | string | null
    native_reserved?: StringNullableFilter<"Country"> | string | null
    population?: IntNullableFilter<"Country"> | number | null
    gdp?: IntNullableFilter<"Country"> | number | null
    region?: StringNullableFilter<"Country"> | string | null
    region_id?: IntNullableFilter<"Country"> | number | null
    subregion?: StringNullableFilter<"Country"> | string | null
    subregion_id?: IntNullableFilter<"Country"> | number | null
    nationality?: StringNullableFilter<"Country"> | string | null
    timezones?: JsonNullableFilter<"Country">
    translations?: JsonNullableFilter<"Country">
    latitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    emoji?: StringNullableFilter<"Country"> | string | null
    emojiU?: StringNullableFilter<"Country"> | string | null
    wikiDataId?: StringNullableFilter<"Country"> | string | null
    createdAt?: DateTimeFilter<"Country"> | Date | string
    updatedAt?: DateTimeFilter<"Country"> | Date | string
    regionRelation?: XOR<RegionNullableScalarRelationFilter, RegionWhereInput> | null
    subregionRelation?: XOR<SubregionNullableScalarRelationFilter, SubregionWhereInput> | null
    states?: StateListRelationFilter
    cities?: CityListRelationFilter
  }

  export type CountryOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    iso3?: SortOrderInput | SortOrder
    iso2?: SortOrderInput | SortOrder
    numeric_code?: SortOrderInput | SortOrder
    phonecode?: SortOrderInput | SortOrder
    capital?: SortOrderInput | SortOrder
    currency?: SortOrderInput | SortOrder
    currency_name?: SortOrderInput | SortOrder
    currency_symbol?: SortOrderInput | SortOrder
    tld?: SortOrderInput | SortOrder
    native_reserved?: SortOrderInput | SortOrder
    population?: SortOrderInput | SortOrder
    gdp?: SortOrderInput | SortOrder
    region?: SortOrderInput | SortOrder
    region_id?: SortOrderInput | SortOrder
    subregion?: SortOrderInput | SortOrder
    subregion_id?: SortOrderInput | SortOrder
    nationality?: SortOrderInput | SortOrder
    timezones?: SortOrderInput | SortOrder
    translations?: SortOrderInput | SortOrder
    latitude?: SortOrderInput | SortOrder
    longitude?: SortOrderInput | SortOrder
    emoji?: SortOrderInput | SortOrder
    emojiU?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    regionRelation?: RegionOrderByWithRelationInput
    subregionRelation?: SubregionOrderByWithRelationInput
    states?: StateOrderByRelationAggregateInput
    cities?: CityOrderByRelationAggregateInput
    _relevance?: CountryOrderByRelevanceInput
  }

  export type CountryWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    iso3?: string
    iso2?: string
    AND?: CountryWhereInput | CountryWhereInput[]
    OR?: CountryWhereInput[]
    NOT?: CountryWhereInput | CountryWhereInput[]
    name?: StringFilter<"Country"> | string
    numeric_code?: StringNullableFilter<"Country"> | string | null
    phonecode?: StringNullableFilter<"Country"> | string | null
    capital?: StringNullableFilter<"Country"> | string | null
    currency?: StringNullableFilter<"Country"> | string | null
    currency_name?: StringNullableFilter<"Country"> | string | null
    currency_symbol?: StringNullableFilter<"Country"> | string | null
    tld?: StringNullableFilter<"Country"> | string | null
    native_reserved?: StringNullableFilter<"Country"> | string | null
    population?: IntNullableFilter<"Country"> | number | null
    gdp?: IntNullableFilter<"Country"> | number | null
    region?: StringNullableFilter<"Country"> | string | null
    region_id?: IntNullableFilter<"Country"> | number | null
    subregion?: StringNullableFilter<"Country"> | string | null
    subregion_id?: IntNullableFilter<"Country"> | number | null
    nationality?: StringNullableFilter<"Country"> | string | null
    timezones?: JsonNullableFilter<"Country">
    translations?: JsonNullableFilter<"Country">
    latitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    emoji?: StringNullableFilter<"Country"> | string | null
    emojiU?: StringNullableFilter<"Country"> | string | null
    wikiDataId?: StringNullableFilter<"Country"> | string | null
    createdAt?: DateTimeFilter<"Country"> | Date | string
    updatedAt?: DateTimeFilter<"Country"> | Date | string
    regionRelation?: XOR<RegionNullableScalarRelationFilter, RegionWhereInput> | null
    subregionRelation?: XOR<SubregionNullableScalarRelationFilter, SubregionWhereInput> | null
    states?: StateListRelationFilter
    cities?: CityListRelationFilter
  }, "id" | "iso3" | "iso2">

  export type CountryOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    iso3?: SortOrderInput | SortOrder
    iso2?: SortOrderInput | SortOrder
    numeric_code?: SortOrderInput | SortOrder
    phonecode?: SortOrderInput | SortOrder
    capital?: SortOrderInput | SortOrder
    currency?: SortOrderInput | SortOrder
    currency_name?: SortOrderInput | SortOrder
    currency_symbol?: SortOrderInput | SortOrder
    tld?: SortOrderInput | SortOrder
    native_reserved?: SortOrderInput | SortOrder
    population?: SortOrderInput | SortOrder
    gdp?: SortOrderInput | SortOrder
    region?: SortOrderInput | SortOrder
    region_id?: SortOrderInput | SortOrder
    subregion?: SortOrderInput | SortOrder
    subregion_id?: SortOrderInput | SortOrder
    nationality?: SortOrderInput | SortOrder
    timezones?: SortOrderInput | SortOrder
    translations?: SortOrderInput | SortOrder
    latitude?: SortOrderInput | SortOrder
    longitude?: SortOrderInput | SortOrder
    emoji?: SortOrderInput | SortOrder
    emojiU?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: CountryCountOrderByAggregateInput
    _avg?: CountryAvgOrderByAggregateInput
    _max?: CountryMaxOrderByAggregateInput
    _min?: CountryMinOrderByAggregateInput
    _sum?: CountrySumOrderByAggregateInput
  }

  export type CountryScalarWhereWithAggregatesInput = {
    AND?: CountryScalarWhereWithAggregatesInput | CountryScalarWhereWithAggregatesInput[]
    OR?: CountryScalarWhereWithAggregatesInput[]
    NOT?: CountryScalarWhereWithAggregatesInput | CountryScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"Country"> | number
    name?: StringWithAggregatesFilter<"Country"> | string
    iso3?: StringNullableWithAggregatesFilter<"Country"> | string | null
    iso2?: StringNullableWithAggregatesFilter<"Country"> | string | null
    numeric_code?: StringNullableWithAggregatesFilter<"Country"> | string | null
    phonecode?: StringNullableWithAggregatesFilter<"Country"> | string | null
    capital?: StringNullableWithAggregatesFilter<"Country"> | string | null
    currency?: StringNullableWithAggregatesFilter<"Country"> | string | null
    currency_name?: StringNullableWithAggregatesFilter<"Country"> | string | null
    currency_symbol?: StringNullableWithAggregatesFilter<"Country"> | string | null
    tld?: StringNullableWithAggregatesFilter<"Country"> | string | null
    native_reserved?: StringNullableWithAggregatesFilter<"Country"> | string | null
    population?: IntNullableWithAggregatesFilter<"Country"> | number | null
    gdp?: IntNullableWithAggregatesFilter<"Country"> | number | null
    region?: StringNullableWithAggregatesFilter<"Country"> | string | null
    region_id?: IntNullableWithAggregatesFilter<"Country"> | number | null
    subregion?: StringNullableWithAggregatesFilter<"Country"> | string | null
    subregion_id?: IntNullableWithAggregatesFilter<"Country"> | number | null
    nationality?: StringNullableWithAggregatesFilter<"Country"> | string | null
    timezones?: JsonNullableWithAggregatesFilter<"Country">
    translations?: JsonNullableWithAggregatesFilter<"Country">
    latitude?: DecimalNullableWithAggregatesFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableWithAggregatesFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    emoji?: StringNullableWithAggregatesFilter<"Country"> | string | null
    emojiU?: StringNullableWithAggregatesFilter<"Country"> | string | null
    wikiDataId?: StringNullableWithAggregatesFilter<"Country"> | string | null
    createdAt?: DateTimeWithAggregatesFilter<"Country"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"Country"> | Date | string
  }

  export type StateWhereInput = {
    AND?: StateWhereInput | StateWhereInput[]
    OR?: StateWhereInput[]
    NOT?: StateWhereInput | StateWhereInput[]
    id?: IntFilter<"State"> | number
    name?: StringFilter<"State"> | string
    country_id?: IntFilter<"State"> | number
    country_code?: StringFilter<"State"> | string
    country_name?: StringNullableFilter<"State"> | string | null
    iso2?: StringNullableFilter<"State"> | string | null
    iso3166_2?: StringNullableFilter<"State"> | string | null
    fips_code?: StringNullableFilter<"State"> | string | null
    type?: StringNullableFilter<"State"> | string | null
    level?: StringNullableFilter<"State"> | string | null
    parent_id?: StringNullableFilter<"State"> | string | null
    native_reserved?: StringNullableFilter<"State"> | string | null
    latitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    timezone?: StringNullableFilter<"State"> | string | null
    wikiDataId?: StringNullableFilter<"State"> | string | null
    state_code?: StringNullableFilter<"State"> | string | null
    createdAt?: DateTimeFilter<"State"> | Date | string
    updatedAt?: DateTimeFilter<"State"> | Date | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    cities?: CityListRelationFilter
  }

  export type StateOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrderInput | SortOrder
    iso2?: SortOrderInput | SortOrder
    iso3166_2?: SortOrderInput | SortOrder
    fips_code?: SortOrderInput | SortOrder
    type?: SortOrderInput | SortOrder
    level?: SortOrderInput | SortOrder
    parent_id?: SortOrderInput | SortOrder
    native_reserved?: SortOrderInput | SortOrder
    latitude?: SortOrderInput | SortOrder
    longitude?: SortOrderInput | SortOrder
    timezone?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    state_code?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    country?: CountryOrderByWithRelationInput
    cities?: CityOrderByRelationAggregateInput
    _relevance?: StateOrderByRelevanceInput
  }

  export type StateWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: StateWhereInput | StateWhereInput[]
    OR?: StateWhereInput[]
    NOT?: StateWhereInput | StateWhereInput[]
    name?: StringFilter<"State"> | string
    country_id?: IntFilter<"State"> | number
    country_code?: StringFilter<"State"> | string
    country_name?: StringNullableFilter<"State"> | string | null
    iso2?: StringNullableFilter<"State"> | string | null
    iso3166_2?: StringNullableFilter<"State"> | string | null
    fips_code?: StringNullableFilter<"State"> | string | null
    type?: StringNullableFilter<"State"> | string | null
    level?: StringNullableFilter<"State"> | string | null
    parent_id?: StringNullableFilter<"State"> | string | null
    native_reserved?: StringNullableFilter<"State"> | string | null
    latitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    timezone?: StringNullableFilter<"State"> | string | null
    wikiDataId?: StringNullableFilter<"State"> | string | null
    state_code?: StringNullableFilter<"State"> | string | null
    createdAt?: DateTimeFilter<"State"> | Date | string
    updatedAt?: DateTimeFilter<"State"> | Date | string
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
    cities?: CityListRelationFilter
  }, "id">

  export type StateOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrderInput | SortOrder
    iso2?: SortOrderInput | SortOrder
    iso3166_2?: SortOrderInput | SortOrder
    fips_code?: SortOrderInput | SortOrder
    type?: SortOrderInput | SortOrder
    level?: SortOrderInput | SortOrder
    parent_id?: SortOrderInput | SortOrder
    native_reserved?: SortOrderInput | SortOrder
    latitude?: SortOrderInput | SortOrder
    longitude?: SortOrderInput | SortOrder
    timezone?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    state_code?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: StateCountOrderByAggregateInput
    _avg?: StateAvgOrderByAggregateInput
    _max?: StateMaxOrderByAggregateInput
    _min?: StateMinOrderByAggregateInput
    _sum?: StateSumOrderByAggregateInput
  }

  export type StateScalarWhereWithAggregatesInput = {
    AND?: StateScalarWhereWithAggregatesInput | StateScalarWhereWithAggregatesInput[]
    OR?: StateScalarWhereWithAggregatesInput[]
    NOT?: StateScalarWhereWithAggregatesInput | StateScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"State"> | number
    name?: StringWithAggregatesFilter<"State"> | string
    country_id?: IntWithAggregatesFilter<"State"> | number
    country_code?: StringWithAggregatesFilter<"State"> | string
    country_name?: StringNullableWithAggregatesFilter<"State"> | string | null
    iso2?: StringNullableWithAggregatesFilter<"State"> | string | null
    iso3166_2?: StringNullableWithAggregatesFilter<"State"> | string | null
    fips_code?: StringNullableWithAggregatesFilter<"State"> | string | null
    type?: StringNullableWithAggregatesFilter<"State"> | string | null
    level?: StringNullableWithAggregatesFilter<"State"> | string | null
    parent_id?: StringNullableWithAggregatesFilter<"State"> | string | null
    native_reserved?: StringNullableWithAggregatesFilter<"State"> | string | null
    latitude?: DecimalNullableWithAggregatesFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableWithAggregatesFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    timezone?: StringNullableWithAggregatesFilter<"State"> | string | null
    wikiDataId?: StringNullableWithAggregatesFilter<"State"> | string | null
    state_code?: StringNullableWithAggregatesFilter<"State"> | string | null
    createdAt?: DateTimeWithAggregatesFilter<"State"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"State"> | Date | string
  }

  export type CityWhereInput = {
    AND?: CityWhereInput | CityWhereInput[]
    OR?: CityWhereInput[]
    NOT?: CityWhereInput | CityWhereInput[]
    id?: IntFilter<"City"> | number
    name?: StringFilter<"City"> | string
    state_id?: IntFilter<"City"> | number
    state_code?: StringFilter<"City"> | string
    state_name?: StringNullableFilter<"City"> | string | null
    country_id?: IntFilter<"City"> | number
    country_code?: StringFilter<"City"> | string
    country_name?: StringFilter<"City"> | string
    latitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    timezone?: StringNullableFilter<"City"> | string | null
    wikiDataId?: StringNullableFilter<"City"> | string | null
    createdAt?: DateTimeFilter<"City"> | Date | string
    updatedAt?: DateTimeFilter<"City"> | Date | string
    state?: XOR<StateScalarRelationFilter, StateWhereInput>
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
  }

  export type CityOrderByWithRelationInput = {
    id?: SortOrder
    name?: SortOrder
    state_id?: SortOrder
    state_code?: SortOrder
    state_name?: SortOrderInput | SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    state?: StateOrderByWithRelationInput
    country?: CountryOrderByWithRelationInput
    _relevance?: CityOrderByRelevanceInput
  }

  export type CityWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: CityWhereInput | CityWhereInput[]
    OR?: CityWhereInput[]
    NOT?: CityWhereInput | CityWhereInput[]
    name?: StringFilter<"City"> | string
    state_id?: IntFilter<"City"> | number
    state_code?: StringFilter<"City"> | string
    state_name?: StringNullableFilter<"City"> | string | null
    country_id?: IntFilter<"City"> | number
    country_code?: StringFilter<"City"> | string
    country_name?: StringFilter<"City"> | string
    latitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    timezone?: StringNullableFilter<"City"> | string | null
    wikiDataId?: StringNullableFilter<"City"> | string | null
    createdAt?: DateTimeFilter<"City"> | Date | string
    updatedAt?: DateTimeFilter<"City"> | Date | string
    state?: XOR<StateScalarRelationFilter, StateWhereInput>
    country?: XOR<CountryScalarRelationFilter, CountryWhereInput>
  }, "id">

  export type CityOrderByWithAggregationInput = {
    id?: SortOrder
    name?: SortOrder
    state_id?: SortOrder
    state_code?: SortOrder
    state_name?: SortOrderInput | SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrderInput | SortOrder
    wikiDataId?: SortOrderInput | SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
    _count?: CityCountOrderByAggregateInput
    _avg?: CityAvgOrderByAggregateInput
    _max?: CityMaxOrderByAggregateInput
    _min?: CityMinOrderByAggregateInput
    _sum?: CitySumOrderByAggregateInput
  }

  export type CityScalarWhereWithAggregatesInput = {
    AND?: CityScalarWhereWithAggregatesInput | CityScalarWhereWithAggregatesInput[]
    OR?: CityScalarWhereWithAggregatesInput[]
    NOT?: CityScalarWhereWithAggregatesInput | CityScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"City"> | number
    name?: StringWithAggregatesFilter<"City"> | string
    state_id?: IntWithAggregatesFilter<"City"> | number
    state_code?: StringWithAggregatesFilter<"City"> | string
    state_name?: StringNullableWithAggregatesFilter<"City"> | string | null
    country_id?: IntWithAggregatesFilter<"City"> | number
    country_code?: StringWithAggregatesFilter<"City"> | string
    country_name?: StringWithAggregatesFilter<"City"> | string
    latitude?: DecimalWithAggregatesFilter<"City"> | Decimal | DecimalJsLike | number | string
    longitude?: DecimalWithAggregatesFilter<"City"> | Decimal | DecimalJsLike | number | string
    timezone?: StringNullableWithAggregatesFilter<"City"> | string | null
    wikiDataId?: StringNullableWithAggregatesFilter<"City"> | string | null
    createdAt?: DateTimeWithAggregatesFilter<"City"> | Date | string
    updatedAt?: DateTimeWithAggregatesFilter<"City"> | Date | string
  }

  export type TableLogWhereInput = {
    AND?: TableLogWhereInput | TableLogWhereInput[]
    OR?: TableLogWhereInput[]
    NOT?: TableLogWhereInput | TableLogWhereInput[]
    id?: IntFilter<"TableLog"> | number
    table_name?: StringFilter<"TableLog"> | string
    row_id?: IntFilter<"TableLog"> | number
    previous_fields?: JsonNullableFilter<"TableLog">
    new_fields?: JsonNullableFilter<"TableLog">
    created_by?: IntNullableFilter<"TableLog"> | number | null
    created_at?: DateTimeFilter<"TableLog"> | Date | string
  }

  export type TableLogOrderByWithRelationInput = {
    id?: SortOrder
    table_name?: SortOrder
    row_id?: SortOrder
    previous_fields?: SortOrderInput | SortOrder
    new_fields?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    _relevance?: TableLogOrderByRelevanceInput
  }

  export type TableLogWhereUniqueInput = Prisma.AtLeast<{
    id?: number
    AND?: TableLogWhereInput | TableLogWhereInput[]
    OR?: TableLogWhereInput[]
    NOT?: TableLogWhereInput | TableLogWhereInput[]
    table_name?: StringFilter<"TableLog"> | string
    row_id?: IntFilter<"TableLog"> | number
    previous_fields?: JsonNullableFilter<"TableLog">
    new_fields?: JsonNullableFilter<"TableLog">
    created_by?: IntNullableFilter<"TableLog"> | number | null
    created_at?: DateTimeFilter<"TableLog"> | Date | string
  }, "id">

  export type TableLogOrderByWithAggregationInput = {
    id?: SortOrder
    table_name?: SortOrder
    row_id?: SortOrder
    previous_fields?: SortOrderInput | SortOrder
    new_fields?: SortOrderInput | SortOrder
    created_by?: SortOrderInput | SortOrder
    created_at?: SortOrder
    _count?: TableLogCountOrderByAggregateInput
    _avg?: TableLogAvgOrderByAggregateInput
    _max?: TableLogMaxOrderByAggregateInput
    _min?: TableLogMinOrderByAggregateInput
    _sum?: TableLogSumOrderByAggregateInput
  }

  export type TableLogScalarWhereWithAggregatesInput = {
    AND?: TableLogScalarWhereWithAggregatesInput | TableLogScalarWhereWithAggregatesInput[]
    OR?: TableLogScalarWhereWithAggregatesInput[]
    NOT?: TableLogScalarWhereWithAggregatesInput | TableLogScalarWhereWithAggregatesInput[]
    id?: IntWithAggregatesFilter<"TableLog"> | number
    table_name?: StringWithAggregatesFilter<"TableLog"> | string
    row_id?: IntWithAggregatesFilter<"TableLog"> | number
    previous_fields?: JsonNullableWithAggregatesFilter<"TableLog">
    new_fields?: JsonNullableWithAggregatesFilter<"TableLog">
    created_by?: IntNullableWithAggregatesFilter<"TableLog"> | number | null
    created_at?: DateTimeWithAggregatesFilter<"TableLog"> | Date | string
  }

  export type SessionCreateInput = {
    id: string
    user_id?: number | null
    ip_address?: string | null
    user_agent?: string | null
    payload: string
    last_activity: number
  }

  export type SessionUncheckedCreateInput = {
    id: string
    user_id?: number | null
    ip_address?: string | null
    user_agent?: string | null
    payload: string
    last_activity: number
  }

  export type SessionUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    user_id?: NullableIntFieldUpdateOperationsInput | number | null
    ip_address?: NullableStringFieldUpdateOperationsInput | string | null
    user_agent?: NullableStringFieldUpdateOperationsInput | string | null
    payload?: StringFieldUpdateOperationsInput | string
    last_activity?: IntFieldUpdateOperationsInput | number
  }

  export type SessionUncheckedUpdateInput = {
    id?: StringFieldUpdateOperationsInput | string
    user_id?: NullableIntFieldUpdateOperationsInput | number | null
    ip_address?: NullableStringFieldUpdateOperationsInput | string | null
    user_agent?: NullableStringFieldUpdateOperationsInput | string | null
    payload?: StringFieldUpdateOperationsInput | string
    last_activity?: IntFieldUpdateOperationsInput | number
  }

  export type SessionCreateManyInput = {
    id: string
    user_id?: number | null
    ip_address?: string | null
    user_agent?: string | null
    payload: string
    last_activity: number
  }

  export type SessionUpdateManyMutationInput = {
    id?: StringFieldUpdateOperationsInput | string
    user_id?: NullableIntFieldUpdateOperationsInput | number | null
    ip_address?: NullableStringFieldUpdateOperationsInput | string | null
    user_agent?: NullableStringFieldUpdateOperationsInput | string | null
    payload?: StringFieldUpdateOperationsInput | string
    last_activity?: IntFieldUpdateOperationsInput | number
  }

  export type SessionUncheckedUpdateManyInput = {
    id?: StringFieldUpdateOperationsInput | string
    user_id?: NullableIntFieldUpdateOperationsInput | number | null
    ip_address?: NullableStringFieldUpdateOperationsInput | string | null
    user_agent?: NullableStringFieldUpdateOperationsInput | string | null
    payload?: StringFieldUpdateOperationsInput | string
    last_activity?: IntFieldUpdateOperationsInput | number
  }

  export type SchoolCreateInput = {
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserCreateNestedManyWithoutSchoolInput
    branches?: BranchCreateNestedManyWithoutSchoolInput
    students?: StudentCreateNestedManyWithoutSchoolInput
    guardians?: GuardianCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUncheckedCreateInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserUncheckedCreateNestedManyWithoutSchoolInput
    branches?: BranchUncheckedCreateNestedManyWithoutSchoolInput
    students?: StudentUncheckedCreateNestedManyWithoutSchoolInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUpdateInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUpdateManyWithoutSchoolNestedInput
    branches?: BranchUpdateManyWithoutSchoolNestedInput
    students?: StudentUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUncheckedUpdateManyWithoutSchoolNestedInput
    branches?: BranchUncheckedUpdateManyWithoutSchoolNestedInput
    students?: StudentUncheckedUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolCreateManyInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolUpdateManyMutationInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchCreateInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchUpdateInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type BranchCreateManyInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchUpdateManyMutationInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelCreateInput = {
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch: BranchCreateNestedOneWithoutBranchLevelsInput
  }

  export type BranchLevelUncheckedCreateInput = {
    id?: number
    branch_id: number
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchLevelUpdateInput = {
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneRequiredWithoutBranchLevelsNestedInput
  }

  export type BranchLevelUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelCreateManyInput = {
    id?: number
    branch_id: number
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchLevelUpdateManyMutationInput = {
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassTemplateCreateInput = {
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClass?: SessionClassCreateNestedManyWithoutClassdetailsInput
    exam?: ExamCreateNestedManyWithoutClassInput
  }

  export type ClassTemplateUncheckedCreateInput = {
    id?: number
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClass?: SessionClassUncheckedCreateNestedManyWithoutClassdetailsInput
    exam?: ExamUncheckedCreateNestedManyWithoutClassInput
  }

  export type ClassTemplateUpdateInput = {
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClass?: SessionClassUpdateManyWithoutClassdetailsNestedInput
    exam?: ExamUpdateManyWithoutClassNestedInput
  }

  export type ClassTemplateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClass?: SessionClassUncheckedUpdateManyWithoutClassdetailsNestedInput
    exam?: ExamUncheckedUpdateManyWithoutClassNestedInput
  }

  export type ClassTemplateCreateManyInput = {
    id?: number
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassTemplateUpdateManyMutationInput = {
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassTemplateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SubjectSetupCreateInput = {
    subject_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SubjectSetupUncheckedCreateInput = {
    id?: number
    subject_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SubjectSetupUpdateInput = {
    subject_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SubjectSetupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SubjectSetupCreateManyInput = {
    id?: number
    subject_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SubjectSetupUpdateManyMutationInput = {
    subject_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SubjectSetupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSubjectCreateInput = {
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectCreateNestedManyWithoutSubjectInput
    ClassSubjectTemplate?: ClassSubjectTemplateCreateNestedManyWithoutSubjectInput
    exam?: ExamCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectUncheckedCreateInput = {
    id?: number
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedCreateNestedManyWithoutSubjectInput
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedCreateNestedManyWithoutSubjectInput
    exam?: ExamUncheckedCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUpdateManyWithoutSubjectNestedInput
    ClassSubjectTemplate?: ClassSubjectTemplateUpdateManyWithoutSubjectNestedInput
    exam?: ExamUpdateManyWithoutSubjectNestedInput
  }

  export type SchoolSubjectUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedUpdateManyWithoutSubjectNestedInput
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectNestedInput
    exam?: ExamUncheckedUpdateManyWithoutSubjectNestedInput
  }

  export type SchoolSubjectCreateManyInput = {
    id?: number
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolSubjectUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSubjectUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchSessionCreateInput = {
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermCreateNestedManyWithoutSessionInput
  }

  export type BranchSessionUncheckedCreateInput = {
    id?: number
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermUncheckedCreateNestedManyWithoutSessionInput
  }

  export type BranchSessionUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUpdateManyWithoutSessionNestedInput
  }

  export type BranchSessionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUncheckedUpdateManyWithoutSessionNestedInput
  }

  export type BranchSessionCreateManyInput = {
    id?: number
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchSessionUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchSessionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSettingCreateInput = {
    school_id: number
    branch_id?: number | null
    isolate_branch_library?: number
    isolate_branch_multimedia?: number
    id_card_amount: number
    library_card_amount: number
    result_serial_ammount: number
    id_card_no_of_years?: number | null
    library_card_no_of_years?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolSettingUncheckedCreateInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    isolate_branch_library?: number
    isolate_branch_multimedia?: number
    id_card_amount: number
    library_card_amount: number
    result_serial_ammount: number
    id_card_no_of_years?: number | null
    library_card_no_of_years?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolSettingUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    isolate_branch_library?: IntFieldUpdateOperationsInput | number
    isolate_branch_multimedia?: IntFieldUpdateOperationsInput | number
    id_card_amount?: IntFieldUpdateOperationsInput | number
    library_card_amount?: IntFieldUpdateOperationsInput | number
    result_serial_ammount?: IntFieldUpdateOperationsInput | number
    id_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    library_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSettingUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    isolate_branch_library?: IntFieldUpdateOperationsInput | number
    isolate_branch_multimedia?: IntFieldUpdateOperationsInput | number
    id_card_amount?: IntFieldUpdateOperationsInput | number
    library_card_amount?: IntFieldUpdateOperationsInput | number
    result_serial_ammount?: IntFieldUpdateOperationsInput | number
    id_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    library_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSettingCreateManyInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    isolate_branch_library?: number
    isolate_branch_multimedia?: number
    id_card_amount: number
    library_card_amount: number
    result_serial_ammount: number
    id_card_no_of_years?: number | null
    library_card_no_of_years?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolSettingUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    isolate_branch_library?: IntFieldUpdateOperationsInput | number
    isolate_branch_multimedia?: IntFieldUpdateOperationsInput | number
    id_card_amount?: IntFieldUpdateOperationsInput | number
    library_card_amount?: IntFieldUpdateOperationsInput | number
    result_serial_ammount?: IntFieldUpdateOperationsInput | number
    id_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    library_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSettingUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    isolate_branch_library?: IntFieldUpdateOperationsInput | number
    isolate_branch_multimedia?: IntFieldUpdateOperationsInput | number
    id_card_amount?: IntFieldUpdateOperationsInput | number
    library_card_amount?: IntFieldUpdateOperationsInput | number
    result_serial_ammount?: IntFieldUpdateOperationsInput | number
    id_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    library_card_no_of_years?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaGroupCreateInput = {
    school_id: number
    branch_id?: number | null
    multimedia_group_name: string
    multimedia_group_desc?: string | null
    multimedia_group_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaGroupUncheckedCreateInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    multimedia_group_name: string
    multimedia_group_desc?: string | null
    multimedia_group_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaGroupUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_group_name?: StringFieldUpdateOperationsInput | string
    multimedia_group_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_group_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaGroupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_group_name?: StringFieldUpdateOperationsInput | string
    multimedia_group_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_group_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaGroupCreateManyInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    multimedia_group_name: string
    multimedia_group_desc?: string | null
    multimedia_group_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaGroupUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_group_name?: StringFieldUpdateOperationsInput | string
    multimedia_group_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_group_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaGroupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_group_name?: StringFieldUpdateOperationsInput | string
    multimedia_group_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_group_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaCreateInput = {
    school_id: number
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutMultimediaInput
  }

  export type MultimediaUncheckedCreateInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutMultimediaNestedInput
  }

  export type MultimediaUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaCreateManyInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookCreateInput = {
    school_id?: number | null
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutLibrarybooksInput
  }

  export type LibraryBookUncheckedCreateInput = {
    id?: number
    school_id?: number | null
    branch_id: number
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryBookUpdateInput = {
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutLibrarybooksNestedInput
  }

  export type LibraryBookUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: IntFieldUpdateOperationsInput | number
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookCreateManyInput = {
    id?: number
    school_id?: number | null
    branch_id: number
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryBookUpdateManyMutationInput = {
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: IntFieldUpdateOperationsInput | number
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type IdCardCreateInput = {
    id_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type IdCardUncheckedCreateInput = {
    id?: number
    id_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type IdCardUpdateInput = {
    id_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type IdCardUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    id_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type IdCardCreateManyInput = {
    id?: number
    id_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type IdCardUpdateManyMutationInput = {
    id_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type IdCardUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    id_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryCardCreateInput = {
    library_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryCardUncheckedCreateInput = {
    id?: number
    library_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryCardUpdateInput = {
    library_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryCardUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    library_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryCardCreateManyInput = {
    id?: number
    library_card_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryCardUpdateManyMutationInput = {
    library_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryCardUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    library_card_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ResultSerialNumbersCreateInput = {
    serial_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ResultSerialNumbersUncheckedCreateInput = {
    id?: number
    serial_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ResultSerialNumbersUpdateInput = {
    serial_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ResultSerialNumbersUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    serial_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ResultSerialNumbersCreateManyInput = {
    id?: number
    serial_no: string
    issued_on?: Date | string | null
    expired_on?: Date | string | null
    fare_amont: Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: number
    acknowledged_from_school_by?: number | null
    acknowledged_from_school_on?: Date | string | null
    acknowledged_from_admin?: number
    acknowledged_from_admin_by?: number | null
    acknowledged_from_admin_on?: Date | string | null
    acknowledged_from_superadmin?: number
    acknowledged_from_superadmin_on?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ResultSerialNumbersUpdateManyMutationInput = {
    serial_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ResultSerialNumbersUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    serial_no?: StringFieldUpdateOperationsInput | string
    issued_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    expired_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    fare_amont?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    acknowledged_from_school?: IntFieldUpdateOperationsInput | number
    acknowledged_from_school_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_school_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_admin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_admin_by?: NullableIntFieldUpdateOperationsInput | number | null
    acknowledged_from_admin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    acknowledged_from_superadmin?: IntFieldUpdateOperationsInput | number
    acknowledged_from_superadmin_on?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionTermCreateInput = {
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    session?: BranchSessionCreateNestedOneWithoutSessionTermInput
    term?: TermCreateNestedOneWithoutSessionTermInput
    sessionclass?: SessionClassCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermUncheckedCreateInput = {
    id?: number
    session_id: number
    term_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    sessionclass?: SessionClassUncheckedCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermUpdateInput = {
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session?: BranchSessionUpdateOneWithoutSessionTermNestedInput
    term?: TermUpdateOneWithoutSessionTermNestedInput
    sessionclass?: SessionClassUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    sessionclass?: SessionClassUncheckedUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermCreateManyInput = {
    id?: number
    session_id: number
    term_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionTermUpdateManyMutationInput = {
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionTermUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserLevelCreateInput = {
    branch_id: number
    level_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserLevelUncheckedCreateInput = {
    id?: number
    branch_id: number
    level_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserLevelUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    level_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserLevelUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    level_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserLevelCreateManyInput = {
    id?: number
    branch_id: number
    level_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserLevelUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    level_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserLevelUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    level_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingCreateInput = {
    class_id: number
    specialization_id: number
    group_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingUncheckedCreateInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingUpdateInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingCreateManyInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingUpdateManyMutationInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingSubjectCreateInput = {
    class_id: number
    specialization_id: number
    group_id: number
    subject_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingSubjectUncheckedCreateInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id: number
    subject_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingSubjectUpdateInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingSubjectUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingSubjectCreateManyInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id: number
    subject_id: number
    user_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserTrackingSubjectUpdateManyMutationInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserTrackingSubjectUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type AllUserCreateInput = {
    model: string
    model_id: number
  }

  export type AllUserUncheckedCreateInput = {
    id?: number
    model: string
    model_id: number
  }

  export type AllUserUpdateInput = {
    model?: StringFieldUpdateOperationsInput | string
    model_id?: IntFieldUpdateOperationsInput | number
  }

  export type AllUserUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    model?: StringFieldUpdateOperationsInput | string
    model_id?: IntFieldUpdateOperationsInput | number
  }

  export type AllUserCreateManyInput = {
    id?: number
    model: string
    model_id: number
  }

  export type AllUserUpdateManyMutationInput = {
    model?: StringFieldUpdateOperationsInput | string
    model_id?: IntFieldUpdateOperationsInput | number
  }

  export type AllUserUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    model?: StringFieldUpdateOperationsInput | string
    model_id?: IntFieldUpdateOperationsInput | number
  }

  export type UserCreateInput = {
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionCreateNestedManyWithoutUserInput
    school?: SchoolCreateNestedOneWithoutUsersInput
    branch?: BranchCreateNestedOneWithoutUsersInput
  }

  export type UserUncheckedCreateInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserUpdateInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUpdateManyWithoutUserNestedInput
    school?: SchoolUpdateOneWithoutUsersNestedInput
    branch?: BranchUpdateOneWithoutUsersNestedInput
  }

  export type UserUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUncheckedUpdateManyWithoutUserNestedInput
  }

  export type UserCreateManyInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserUpdateManyMutationInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentCreateInput = {
    uuid?: string | null
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutStudentsInput
    school?: SchoolCreateNestedOneWithoutStudentsInput
    StudentTracking?: StudentTrackingCreateNestedManyWithoutStudentInput
  }

  export type StudentUncheckedCreateInput = {
    id?: number
    uuid?: string | null
    school_id: number
    branch_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    StudentTracking?: StudentTrackingUncheckedCreateNestedManyWithoutStudentInput
  }

  export type StudentUpdateInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutStudentsNestedInput
    school?: SchoolUpdateOneWithoutStudentsNestedInput
    StudentTracking?: StudentTrackingUpdateManyWithoutStudentNestedInput
  }

  export type StudentUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    StudentTracking?: StudentTrackingUncheckedUpdateManyWithoutStudentNestedInput
  }

  export type StudentCreateManyInput = {
    id?: number
    uuid?: string | null
    school_id: number
    branch_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentUpdateManyMutationInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianCreateInput = {
    uuid?: string | null
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school?: SchoolCreateNestedOneWithoutGuardiansInput
    branch?: BranchCreateNestedOneWithoutGuardiansInput
  }

  export type GuardianUncheckedCreateInput = {
    id?: number
    uuid?: string | null
    school_id: number
    branch_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianUpdateInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneWithoutGuardiansNestedInput
    branch?: BranchUpdateOneWithoutGuardiansNestedInput
  }

  export type GuardianUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianCreateManyInput = {
    id?: number
    uuid?: string | null
    school_id: number
    branch_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianUpdateManyMutationInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentGuardianCreateInput = {
    branch_id: number
    student_id: number
    guardian_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type StudentGuardianUncheckedCreateInput = {
    id?: number
    branch_id: number
    student_id: number
    guardian_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type StudentGuardianUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    guardian_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type StudentGuardianUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    guardian_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type StudentGuardianCreateManyInput = {
    id?: number
    branch_id: number
    student_id: number
    guardian_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type StudentGuardianUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    guardian_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type StudentGuardianUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    guardian_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type PermissionCreateInput = {
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUncheckedCreateInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionUncheckedCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUncheckedUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionCreateManyInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type PermissionUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type PermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionCreateInput = {
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    role: RoleCreateNestedOneWithoutRoleCrudPermissionInput
    permission: PermissionCreateNestedOneWithoutRoleCrudPermissionInput
  }

  export type RoleCrudPermissionUncheckedCreateInput = {
    id?: number
    role_id: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCrudPermissionUpdateInput = {
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    role?: RoleUpdateOneRequiredWithoutRoleCrudPermissionNestedInput
    permission?: PermissionUpdateOneRequiredWithoutRoleCrudPermissionNestedInput
  }

  export type RoleCrudPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionCreateManyInput = {
    id?: number
    role_id: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCrudPermissionUpdateManyMutationInput = {
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxCrudPermissionsCreateInput = {
    role_id: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxCrudPermissionsUncheckedCreateInput = {
    id?: number
    role_id: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxCrudPermissionsUpdateInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxCrudPermissionsUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxCrudPermissionsCreateManyInput = {
    id?: number
    role_id: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxCrudPermissionsUpdateManyMutationInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxCrudPermissionsUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxPermissionCreateInput = {
    role_id: number
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxPermissionUncheckedCreateInput = {
    id?: number
    role_id: number
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxPermissionUpdateInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxPermissionCreateManyInput = {
    id?: number
    role_id: number
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleMaxPermissionUpdateManyMutationInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleMaxPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionCreateInput = {
    role_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutRolePermissionInput
  }

  export type RolePermissionUncheckedCreateInput = {
    id?: number
    role_id: number
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RolePermissionUpdateInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutRolePermissionNestedInput
  }

  export type RolePermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionCreateManyInput = {
    id?: number
    role_id: number
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RolePermissionUpdateManyMutationInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCreateInput = {
    name: string
    display_name: string
    description: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionCreateNestedManyWithoutRoleInput
  }

  export type RoleUncheckedCreateInput = {
    id?: number
    name: string
    display_name: string
    description: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedCreateNestedManyWithoutRoleInput
  }

  export type RoleUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUpdateManyWithoutRoleNestedInput
  }

  export type RoleUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedUpdateManyWithoutRoleNestedInput
  }

  export type RoleCreateManyInput = {
    id?: number
    name: string
    display_name: string
    description: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionCreateInput = {
    user_type: string
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutUserCrudPermissionInput
    User?: UserCreateNestedOneWithoutCrudUserPermissionInput
  }

  export type UserCrudPermissionUncheckedCreateInput = {
    id?: number
    user_id: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionUpdateInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutUserCrudPermissionNestedInput
    User?: UserUpdateOneWithoutCrudUserPermissionNestedInput
  }

  export type UserCrudPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionCreateManyInput = {
    id?: number
    user_id: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionUpdateManyMutationInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionCreateInput = {
    user_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutUserPermissionInput
    User?: UserCreateNestedOneWithoutPermissionUserInput
  }

  export type UserPermissionUncheckedCreateInput = {
    id?: number
    user_id: number
    permission_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    userId?: number | null
  }

  export type UserPermissionUpdateInput = {
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutUserPermissionNestedInput
    User?: UserUpdateOneWithoutPermissionUserNestedInput
  }

  export type UserPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    userId?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionCreateManyInput = {
    id?: number
    user_id: number
    permission_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    userId?: number | null
  }

  export type UserPermissionUpdateManyMutationInput = {
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    userId?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxCrudPermissionCreateInput = {
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxCrudPermissionUncheckedCreateInput = {
    id?: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxCrudPermissionUpdateInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxCrudPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxCrudPermissionCreateManyInput = {
    id?: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxCrudPermissionUpdateManyMutationInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxCrudPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxPermissionCreateInput = {
    user_type: string
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxPermissionUncheckedCreateInput = {
    id?: number
    user_type: string
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxPermissionUpdateInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxPermissionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxPermissionCreateManyInput = {
    id?: number
    user_type: string
    permission_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UsertypeMaxPermissionUpdateManyMutationInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UsertypeMaxPermissionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type QualificationCreateInput = {
    qualification_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QualificationUncheckedCreateInput = {
    id?: number
    qualification_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QualificationUpdateInput = {
    qualification_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QualificationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    qualification_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QualificationCreateManyInput = {
    id?: number
    qualification_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QualificationUpdateManyMutationInput = {
    qualification_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QualificationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    qualification_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GenderCreateInput = {
    gender_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GenderUncheckedCreateInput = {
    id?: number
    gender_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GenderUpdateInput = {
    gender_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GenderUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    gender_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GenderCreateManyInput = {
    id?: number
    gender_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GenderUpdateManyMutationInput = {
    gender_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GenderUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    gender_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type TermCreateInput = {
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermCreateNestedManyWithoutTermInput
    exams?: ExamCreateNestedManyWithoutTermInput
  }

  export type TermUncheckedCreateInput = {
    id?: number
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermUncheckedCreateNestedManyWithoutTermInput
    exams?: ExamUncheckedCreateNestedManyWithoutTermInput
  }

  export type TermUpdateInput = {
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUpdateManyWithoutTermNestedInput
    exams?: ExamUpdateManyWithoutTermNestedInput
  }

  export type TermUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUncheckedUpdateManyWithoutTermNestedInput
    exams?: ExamUncheckedUpdateManyWithoutTermNestedInput
  }

  export type TermCreateManyInput = {
    id?: number
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type TermUpdateManyMutationInput = {
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type TermUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReligionCreateInput = {
    religion_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReligionUncheckedCreateInput = {
    id?: number
    religion_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReligionUpdateInput = {
    religion_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReligionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    religion_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReligionCreateManyInput = {
    id?: number
    religion_name: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReligionUpdateManyMutationInput = {
    religion_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReligionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    religion_name?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ComplainFromTeacherCreateInput = {
    branch_id: number
    session_class_id?: number | null
    student_id: number
    complain: string
    is_urgent?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ComplainFromTeacherUncheckedCreateInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    student_id: number
    complain: string
    is_urgent?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ComplainFromTeacherUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    complain?: StringFieldUpdateOperationsInput | string
    is_urgent?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ComplainFromTeacherUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    complain?: StringFieldUpdateOperationsInput | string
    is_urgent?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ComplainFromTeacherCreateManyInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    student_id: number
    complain: string
    is_urgent?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ComplainFromTeacherUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    complain?: StringFieldUpdateOperationsInput | string
    is_urgent?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ComplainFromTeacherUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    complain?: StringFieldUpdateOperationsInput | string
    is_urgent?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type AttendanceCreateInput = {
    branch_id: number
    session_class_id?: number | null
    student_id?: number | null
    staff_id?: number | null
    attendance_date: Date | string
    status?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type AttendanceUncheckedCreateInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    student_id?: number | null
    staff_id?: number | null
    attendance_date: Date | string
    status?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type AttendanceUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_id?: NullableIntFieldUpdateOperationsInput | number | null
    attendance_date?: DateTimeFieldUpdateOperationsInput | Date | string
    status?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type AttendanceUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_id?: NullableIntFieldUpdateOperationsInput | number | null
    attendance_date?: DateTimeFieldUpdateOperationsInput | Date | string
    status?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type AttendanceCreateManyInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    student_id?: number | null
    staff_id?: number | null
    attendance_date: Date | string
    status?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type AttendanceUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_id?: NullableIntFieldUpdateOperationsInput | number | null
    attendance_date?: DateTimeFieldUpdateOperationsInput | Date | string
    status?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type AttendanceUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_id?: NullableIntFieldUpdateOperationsInput | number | null
    attendance_date?: DateTimeFieldUpdateOperationsInput | Date | string
    status?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolNoteCreateInput = {
    school_id: number
    branch_id?: number | null
    class_template_id: number
    school_subject_id: number
    term_id: number
    week: number
    order: number
    topic: string
    topic_desc?: string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolNoteUncheckedCreateInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    class_template_id: number
    school_subject_id: number
    term_id: number
    week: number
    order: number
    topic: string
    topic_desc?: string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolNoteUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    class_template_id?: IntFieldUpdateOperationsInput | number
    school_subject_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    week?: IntFieldUpdateOperationsInput | number
    order?: IntFieldUpdateOperationsInput | number
    topic?: StringFieldUpdateOperationsInput | string
    topic_desc?: NullableStringFieldUpdateOperationsInput | string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolNoteUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    class_template_id?: IntFieldUpdateOperationsInput | number
    school_subject_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    week?: IntFieldUpdateOperationsInput | number
    order?: IntFieldUpdateOperationsInput | number
    topic?: StringFieldUpdateOperationsInput | string
    topic_desc?: NullableStringFieldUpdateOperationsInput | string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolNoteCreateManyInput = {
    id?: number
    school_id: number
    branch_id?: number | null
    class_template_id: number
    school_subject_id: number
    term_id: number
    week: number
    order: number
    topic: string
    topic_desc?: string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SchoolNoteUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    class_template_id?: IntFieldUpdateOperationsInput | number
    school_subject_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    week?: IntFieldUpdateOperationsInput | number
    order?: IntFieldUpdateOperationsInput | number
    topic?: StringFieldUpdateOperationsInput | string
    topic_desc?: NullableStringFieldUpdateOperationsInput | string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolNoteUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    class_template_id?: IntFieldUpdateOperationsInput | number
    school_subject_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    week?: IntFieldUpdateOperationsInput | number
    order?: IntFieldUpdateOperationsInput | number
    topic?: StringFieldUpdateOperationsInput | string
    topic_desc?: NullableStringFieldUpdateOperationsInput | string | null
    students_question_to_answer?: NullableJsonNullValueInput | InputJsonValue
    note?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type FeeCreateInput = {
    branch_id?: number | null
    fee_name: string
    price_template?: Decimal | DecimalJsLike | number | string | null
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type FeeUncheckedCreateInput = {
    id?: number
    branch_id?: number | null
    fee_name: string
    price_template?: Decimal | DecimalJsLike | number | string | null
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type FeeUpdateInput = {
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    fee_name?: StringFieldUpdateOperationsInput | string
    price_template?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type FeeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    fee_name?: StringFieldUpdateOperationsInput | string
    price_template?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type FeeCreateManyInput = {
    id?: number
    branch_id?: number | null
    fee_name: string
    price_template?: Decimal | DecimalJsLike | number | string | null
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type FeeUpdateManyMutationInput = {
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    fee_name?: StringFieldUpdateOperationsInput | string
    price_template?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type FeeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    fee_name?: StringFieldUpdateOperationsInput | string
    price_template?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentTypeCreateInput = {
    payment_type_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentTypeUncheckedCreateInput = {
    id?: number
    payment_type_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentTypeUpdateInput = {
    payment_type_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentTypeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    payment_type_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentTypeCreateManyInput = {
    id?: number
    payment_type_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentTypeUpdateManyMutationInput = {
    payment_type_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentTypeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    payment_type_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentDurationCreateInput = {
    duration: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentDurationUncheckedCreateInput = {
    id?: number
    duration: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentDurationUpdateInput = {
    duration?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentDurationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    duration?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentDurationCreateManyInput = {
    id?: number
    duration: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentDurationUpdateManyMutationInput = {
    duration?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentDurationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    duration?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentCreateInput = {
    branch_id: number
    session_class_id?: number | null
    specialization_id?: number | null
    who_would_pay?: string | null
    fee_id: number
    payment_duration_id: number
    payment_amount?: Decimal | DecimalJsLike | number | string | null
    start_date?: Date | string | null
    end_date?: Date | string | null
    due_date?: Date | string | null
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentUncheckedCreateInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    specialization_id?: number | null
    who_would_pay?: string | null
    fee_id: number
    payment_duration_id: number
    payment_amount?: Decimal | DecimalJsLike | number | string | null
    start_date?: Date | string | null
    end_date?: Date | string | null
    due_date?: Date | string | null
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    who_would_pay?: NullableStringFieldUpdateOperationsInput | string | null
    fee_id?: IntFieldUpdateOperationsInput | number
    payment_duration_id?: IntFieldUpdateOperationsInput | number
    payment_amount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    start_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    end_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    due_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    who_would_pay?: NullableStringFieldUpdateOperationsInput | string | null
    fee_id?: IntFieldUpdateOperationsInput | number
    payment_duration_id?: IntFieldUpdateOperationsInput | number
    payment_amount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    start_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    end_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    due_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentCreateManyInput = {
    id?: number
    branch_id: number
    session_class_id?: number | null
    specialization_id?: number | null
    who_would_pay?: string | null
    fee_id: number
    payment_duration_id: number
    payment_amount?: Decimal | DecimalJsLike | number | string | null
    start_date?: Date | string | null
    end_date?: Date | string | null
    due_date?: Date | string | null
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    who_would_pay?: NullableStringFieldUpdateOperationsInput | string | null
    fee_id?: IntFieldUpdateOperationsInput | number
    payment_duration_id?: IntFieldUpdateOperationsInput | number
    payment_amount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    start_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    end_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    due_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_class_id?: NullableIntFieldUpdateOperationsInput | number | null
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    who_would_pay?: NullableStringFieldUpdateOperationsInput | string | null
    fee_id?: IntFieldUpdateOperationsInput | number
    payment_duration_id?: IntFieldUpdateOperationsInput | number
    payment_amount?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    start_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    end_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    due_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentMadeCreateInput = {
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model?: string | null
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentMadeUncheckedCreateInput = {
    id?: number
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model?: string | null
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentMadeUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: NullableStringFieldUpdateOperationsInput | string | null
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentMadeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: NullableStringFieldUpdateOperationsInput | string | null
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentMadeCreateManyInput = {
    id?: number
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model?: string | null
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentMadeUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: NullableStringFieldUpdateOperationsInput | string | null
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentMadeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: NullableStringFieldUpdateOperationsInput | string | null
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentPartMadeCreateInput = {
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model: string
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_part_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentPartMadeUncheckedCreateInput = {
    id?: number
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model: string
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_part_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentPartMadeUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: StringFieldUpdateOperationsInput | string
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_part_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentPartMadeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: StringFieldUpdateOperationsInput | string
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_part_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentPartMadeCreateManyInput = {
    id?: number
    branch_id: number
    payment_id: number
    student_id?: number | null
    payer_id?: number | null
    payer_model: string
    payer_phonenumber?: string | null
    payer_name?: string | null
    amount_part_paid?: Decimal | DecimalJsLike | number | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentPartMadeUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: StringFieldUpdateOperationsInput | string
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_part_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentPartMadeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_id?: NullableIntFieldUpdateOperationsInput | number | null
    payer_model?: StringFieldUpdateOperationsInput | string
    payer_phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    payer_name?: NullableStringFieldUpdateOperationsInput | string | null
    amount_part_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentAttemptCreateInput = {
    payment_id: number
    student_id?: number | null
    ref_code: string
    access_code: string
    payer_id: number
    payer_model: string
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    is_successful?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentAttemptUncheckedCreateInput = {
    id?: number
    payment_id: number
    student_id?: number | null
    ref_code: string
    access_code: string
    payer_id: number
    payer_model: string
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    is_successful?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentAttemptUpdateInput = {
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    ref_code?: StringFieldUpdateOperationsInput | string
    access_code?: StringFieldUpdateOperationsInput | string
    payer_id?: IntFieldUpdateOperationsInput | number
    payer_model?: StringFieldUpdateOperationsInput | string
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentAttemptUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    ref_code?: StringFieldUpdateOperationsInput | string
    access_code?: StringFieldUpdateOperationsInput | string
    payer_id?: IntFieldUpdateOperationsInput | number
    payer_model?: StringFieldUpdateOperationsInput | string
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentAttemptCreateManyInput = {
    id?: number
    payment_id: number
    student_id?: number | null
    ref_code: string
    access_code: string
    payer_id: number
    payer_model: string
    amount_paid?: Decimal | DecimalJsLike | number | string | null
    is_successful?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type PaymentAttemptUpdateManyMutationInput = {
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    ref_code?: StringFieldUpdateOperationsInput | string
    access_code?: StringFieldUpdateOperationsInput | string
    payer_id?: IntFieldUpdateOperationsInput | number
    payer_model?: StringFieldUpdateOperationsInput | string
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type PaymentAttemptUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    payment_id?: IntFieldUpdateOperationsInput | number
    student_id?: NullableIntFieldUpdateOperationsInput | number | null
    ref_code?: StringFieldUpdateOperationsInput | string
    access_code?: StringFieldUpdateOperationsInput | string
    payer_id?: IntFieldUpdateOperationsInput | number
    payer_model?: StringFieldUpdateOperationsInput | string
    amount_paid?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    is_successful?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateCreateInput = {
    class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    subject: SchoolSubjectCreateNestedOneWithoutClassSubjectTemplateInput
  }

  export type ClassSubjectTemplateUncheckedCreateInput = {
    id?: number
    class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSubjectTemplateUpdateInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    subject?: SchoolSubjectUpdateOneRequiredWithoutClassSubjectTemplateNestedInput
  }

  export type ClassSubjectTemplateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateCreateManyInput = {
    id?: number
    class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSubjectTemplateUpdateManyMutationInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassCreateInput = {
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    classdetails?: ClassTemplateCreateNestedOneWithoutSessionClassInput
    sessionterm?: SessionTermCreateNestedOneWithoutSessionclassInput
  }

  export type SessionClassUncheckedCreateInput = {
    id?: number
    session_term_id: number
    class_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassUpdateInput = {
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    classdetails?: ClassTemplateUpdateOneWithoutSessionClassNestedInput
    sessionterm?: SessionTermUpdateOneWithoutSessionclassNestedInput
  }

  export type SessionClassUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_term_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassCreateManyInput = {
    id?: number
    session_term_id: number
    class_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassUpdateManyMutationInput = {
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_term_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectCreateInput = {
    session_class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    subject: SchoolSubjectCreateNestedOneWithoutSessionClassSubjectInput
  }

  export type SessionClassSubjectUncheckedCreateInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassSubjectUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    subject?: SchoolSubjectUpdateOneRequiredWithoutSessionClassSubjectNestedInput
  }

  export type SessionClassSubjectUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectCreateManyInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    subject_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassSubjectUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassStudentSubjectCreateInput = {
    session_class_id: number
    subject_id: number
    student_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassStudentSubjectUncheckedCreateInput = {
    id?: number
    session_class_id: number
    subject_id: number
    student_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassStudentSubjectUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassStudentSubjectUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassStudentSubjectCreateManyInput = {
    id?: number
    session_class_id: number
    subject_id: number
    student_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassStudentSubjectUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassStudentSubjectUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSpecializationCreateInput = {
    school_id: number
    specialization_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSpecializationUncheckedCreateInput = {
    id?: number
    school_id: number
    specialization_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSpecializationUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    specialization_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSpecializationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    specialization_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSpecializationCreateManyInput = {
    id?: number
    school_id: number
    specialization_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSpecializationUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    specialization_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSpecializationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    specialization_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassGroupCreateInput = {
    school_id: number
    group_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassGroupUncheckedCreateInput = {
    id?: number
    school_id: number
    group_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassGroupUpdateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    group_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassGroupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    group_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassGroupCreateManyInput = {
    id?: number
    school_id: number
    group_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassGroupUpdateManyMutationInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    group_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassGroupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    group_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreTypeCreateInput = {
    score_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreTypeUncheckedCreateInput = {
    id?: number
    score_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreTypeUpdateInput = {
    score_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreTypeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreTypeCreateManyInput = {
    id?: number
    score_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreTypeUpdateManyMutationInput = {
    score_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreTypeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreDisplayTypeCreateInput = {
    display_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreDisplayTypeUncheckedCreateInput = {
    id?: number
    display_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreDisplayTypeUpdateInput = {
    display_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreDisplayTypeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    display_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreDisplayTypeCreateManyInput = {
    id?: number
    display_type: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ScoreDisplayTypeUpdateManyMutationInput = {
    display_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ScoreDisplayTypeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    display_type?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentScoreCreateInput = {
    score_setup_id: number
    subject_id: number
    student_id: number
    score: Decimal | DecimalJsLike | number | string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentScoreUncheckedCreateInput = {
    id?: number
    score_setup_id: number
    subject_id: number
    student_id: number
    score: Decimal | DecimalJsLike | number | string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentScoreUpdateInput = {
    score_setup_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    score?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentScoreUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    score?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentScoreCreateManyInput = {
    id?: number
    score_setup_id: number
    subject_id: number
    student_id: number
    score: Decimal | DecimalJsLike | number | string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentScoreUpdateManyMutationInput = {
    score_setup_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    score?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentScoreUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    score?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTotalScoreCreateInput = {
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    totalscore: Decimal | DecimalJsLike | number | string
    no_of_subject: number
    group_position: number
    teachers_comment?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTotalScoreUncheckedCreateInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    totalscore: Decimal | DecimalJsLike | number | string
    no_of_subject: number
    group_position: number
    teachers_comment?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTotalScoreUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    totalscore?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFieldUpdateOperationsInput | number
    group_position?: IntFieldUpdateOperationsInput | number
    teachers_comment?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTotalScoreUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    totalscore?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFieldUpdateOperationsInput | number
    group_position?: IntFieldUpdateOperationsInput | number
    teachers_comment?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTotalScoreCreateManyInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id: number
    student_id: number
    totalscore: Decimal | DecimalJsLike | number | string
    no_of_subject: number
    group_position: number
    teachers_comment?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTotalScoreUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    totalscore?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFieldUpdateOperationsInput | number
    group_position?: IntFieldUpdateOperationsInput | number
    teachers_comment?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTotalScoreUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: IntFieldUpdateOperationsInput | number
    student_id?: IntFieldUpdateOperationsInput | number
    totalscore?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    no_of_subject?: IntFieldUpdateOperationsInput | number
    group_position?: IntFieldUpdateOperationsInput | number
    teachers_comment?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTrackingCreateInput = {
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    student: StudentCreateNestedOneWithoutStudentTrackingInput
  }

  export type StudentTrackingUncheckedCreateInput = {
    id?: number
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    student_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTrackingUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    student?: StudentUpdateOneRequiredWithoutStudentTrackingNestedInput
  }

  export type StudentTrackingUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTrackingCreateManyInput = {
    id?: number
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    student_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTrackingUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTrackingUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReportCardSettingCreateInput = {
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    is_report_generated?: number
    display_student_position?: number
    show_previous_terms?: number
    accumulate_with_previous?: number
    display_attendance_in_report?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReportCardSettingUncheckedCreateInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    is_report_generated?: number
    display_student_position?: number
    show_previous_terms?: number
    accumulate_with_previous?: number
    display_attendance_in_report?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReportCardSettingUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    is_report_generated?: IntFieldUpdateOperationsInput | number
    display_student_position?: IntFieldUpdateOperationsInput | number
    show_previous_terms?: IntFieldUpdateOperationsInput | number
    accumulate_with_previous?: IntFieldUpdateOperationsInput | number
    display_attendance_in_report?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReportCardSettingUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    is_report_generated?: IntFieldUpdateOperationsInput | number
    display_student_position?: IntFieldUpdateOperationsInput | number
    show_previous_terms?: IntFieldUpdateOperationsInput | number
    accumulate_with_previous?: IntFieldUpdateOperationsInput | number
    display_attendance_in_report?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReportCardSettingCreateManyInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    is_report_generated?: number
    display_student_position?: number
    show_previous_terms?: number
    accumulate_with_previous?: number
    display_attendance_in_report?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ReportCardSettingUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    is_report_generated?: IntFieldUpdateOperationsInput | number
    display_student_position?: IntFieldUpdateOperationsInput | number
    show_previous_terms?: IntFieldUpdateOperationsInput | number
    accumulate_with_previous?: IntFieldUpdateOperationsInput | number
    display_attendance_in_report?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ReportCardSettingUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    is_report_generated?: IntFieldUpdateOperationsInput | number
    display_student_position?: IntFieldUpdateOperationsInput | number
    show_previous_terms?: IntFieldUpdateOperationsInput | number
    accumulate_with_previous?: IntFieldUpdateOperationsInput | number
    display_attendance_in_report?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassScoreSetupTemplateCreateInput = {
    class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassScoreSetupTemplateUncheckedCreateInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassScoreSetupTemplateUpdateInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassScoreSetupTemplateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassScoreSetupTemplateCreateManyInput = {
    id?: number
    class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassScoreSetupTemplateUpdateManyMutationInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassScoreSetupTemplateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassScoreSetupCreateInput = {
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutScoresetupInput
  }

  export type SessionClassScoreSetupUncheckedCreateInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutScoresetupInput
  }

  export type SessionClassScoreSetupUpdateInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutScoresetupNestedInput
  }

  export type SessionClassScoreSetupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutScoresetupNestedInput
  }

  export type SessionClassScoreSetupCreateManyInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassScoreSetupUpdateManyMutationInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassScoreSetupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamTypeCreateInput = {
    exam_type_name: string
    exam_type_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamCreateNestedManyWithoutExamtypeInput
  }

  export type ExamTypeUncheckedCreateInput = {
    id?: number
    exam_type_name: string
    exam_type_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamUncheckedCreateNestedManyWithoutExamtypeInput
  }

  export type ExamTypeUpdateInput = {
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUpdateManyWithoutExamtypeNestedInput
  }

  export type ExamTypeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUncheckedUpdateManyWithoutExamtypeNestedInput
  }

  export type ExamTypeCreateManyInput = {
    id?: number
    exam_type_name: string
    exam_type_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamTypeUpdateManyMutationInput = {
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamTypeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCategoryCreateInput = {
    exam_category_name: string
    exam_category_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamCreateNestedManyWithoutExamcategoryInput
  }

  export type ExamCategoryUncheckedCreateInput = {
    id?: number
    exam_category_name: string
    exam_category_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamUncheckedCreateNestedManyWithoutExamcategoryInput
  }

  export type ExamCategoryUpdateInput = {
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUpdateManyWithoutExamcategoryNestedInput
  }

  export type ExamCategoryUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUncheckedUpdateManyWithoutExamcategoryNestedInput
  }

  export type ExamCategoryCreateManyInput = {
    id?: number
    exam_category_name: string
    exam_category_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCategoryUpdateManyMutationInput = {
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCategoryUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionMarkerCreateInput = {
    question_marker_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionMarkerUncheckedCreateInput = {
    id?: number
    question_marker_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionMarkerUpdateInput = {
    question_marker_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionMarkerUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    question_marker_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionMarkerCreateManyInput = {
    id?: number
    question_marker_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionMarkerUpdateManyMutationInput = {
    question_marker_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionMarkerUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    question_marker_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionTemplateCreateInput = {
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionTemplateUncheckedCreateInput = {
    id?: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionTemplateUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionTemplateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionTemplateCreateManyInput = {
    id?: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionTemplateUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionTemplateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionCreateInput = {
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionUncheckedCreateInput = {
    id?: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionUpdateInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionCreateManyInput = {
    id?: number
    branch_id: number
    class_id: number
    subject_id: number
    question: string
    question_marker?: number | null
    is_objective?: number
    is_boolean_question?: number
    max_time?: number | null
    image_path?: string | null
    option_a: string
    option_b: string
    option_c?: string | null
    option_d?: string | null
    option_answer: string
    theory_answer?: string | null
    difficulty_level?: string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type QuestionUpdateManyMutationInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type QuestionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    subject_id?: IntFieldUpdateOperationsInput | number
    question?: StringFieldUpdateOperationsInput | string
    question_marker?: NullableIntFieldUpdateOperationsInput | number | null
    is_objective?: IntFieldUpdateOperationsInput | number
    is_boolean_question?: IntFieldUpdateOperationsInput | number
    max_time?: NullableIntFieldUpdateOperationsInput | number | null
    image_path?: NullableStringFieldUpdateOperationsInput | string | null
    option_a?: StringFieldUpdateOperationsInput | string
    option_b?: StringFieldUpdateOperationsInput | string
    option_c?: NullableStringFieldUpdateOperationsInput | string | null
    option_d?: NullableStringFieldUpdateOperationsInput | string | null
    option_answer?: StringFieldUpdateOperationsInput | string
    theory_answer?: NullableStringFieldUpdateOperationsInput | string | null
    difficulty_level?: NullableStringFieldUpdateOperationsInput | string | null
    tag?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamVisibilityCreateInput = {
    exam_visibility_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamVisibilityUncheckedCreateInput = {
    id?: number
    exam_visibility_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamVisibilityUpdateInput = {
    exam_visibility_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamVisibilityUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_visibility_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamVisibilityCreateManyInput = {
    id?: number
    exam_visibility_name: string
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamVisibilityUpdateManyMutationInput = {
    exam_visibility_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamVisibilityUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_visibility_name?: StringFieldUpdateOperationsInput | string
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCreateInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    term?: TermCreateNestedOneWithoutExamsInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamUpdateInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    term?: TermUpdateOneWithoutExamsNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamCreateManyInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamUpdateManyMutationInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionCreateInput = {
    exam_id: number
    question_id: number
    score_attached: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionUncheckedCreateInput = {
    id?: number
    exam_id: number
    question_id: number
    score_attached: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionUpdateInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    score_attached?: FloatFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    score_attached?: FloatFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionCreateManyInput = {
    id?: number
    exam_id: number
    question_id: number
    score_attached: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionUpdateManyMutationInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    score_attached?: FloatFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    score_attached?: FloatFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkCreateInput = {
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam: ExamCreateNestedOneWithoutExamscoresetuplinkInput
    scoresetup: SessionClassScoreSetupCreateNestedOneWithoutExamscoresetuplinkInput
  }

  export type ExamScoreSetupLinkUncheckedCreateInput = {
    id?: number
    exam_id: number
    score_setup_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkUpdateInput = {
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUpdateOneRequiredWithoutExamscoresetuplinkNestedInput
    scoresetup?: SessionClassScoreSetupUpdateOneRequiredWithoutExamscoresetuplinkNestedInput
  }

  export type ExamScoreSetupLinkUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkCreateManyInput = {
    id?: number
    exam_id: number
    score_setup_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkUpdateManyMutationInput = {
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamAttemptCreateInput = {
    exam_id: number
    person_id: number
    model_name: string
    start_at?: Date | string | null
    submitted_at?: Date | string | null
    score_obtained?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamAttemptUncheckedCreateInput = {
    id?: number
    exam_id: number
    person_id: number
    model_name: string
    start_at?: Date | string | null
    submitted_at?: Date | string | null
    score_obtained?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamAttemptUpdateInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    person_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    start_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    submitted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    score_obtained?: NullableFloatFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamAttemptUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    person_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    start_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    submitted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    score_obtained?: NullableFloatFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamAttemptCreateManyInput = {
    id?: number
    exam_id: number
    person_id: number
    model_name: string
    start_at?: Date | string | null
    submitted_at?: Date | string | null
    score_obtained?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamAttemptUpdateManyMutationInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    person_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    start_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    submitted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    score_obtained?: NullableFloatFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamAttemptUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    person_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    start_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    submitted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    score_obtained?: NullableFloatFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionAnswerCreateInput = {
    attempt_id?: number | null
    exam_id: number
    question_id: number
    model_name: string
    person_id: number
    user_objective_answer: string
    user_theory_answer: string
    score_obtained: number
    marked_by: number
    time_taken?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionAnswerUncheckedCreateInput = {
    id?: number
    attempt_id?: number | null
    exam_id: number
    question_id: number
    model_name: string
    person_id: number
    user_objective_answer: string
    user_theory_answer: string
    score_obtained: number
    marked_by: number
    time_taken?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionAnswerUpdateInput = {
    attempt_id?: NullableIntFieldUpdateOperationsInput | number | null
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    person_id?: IntFieldUpdateOperationsInput | number
    user_objective_answer?: StringFieldUpdateOperationsInput | string
    user_theory_answer?: StringFieldUpdateOperationsInput | string
    score_obtained?: IntFieldUpdateOperationsInput | number
    marked_by?: IntFieldUpdateOperationsInput | number
    time_taken?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionAnswerUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    attempt_id?: NullableIntFieldUpdateOperationsInput | number | null
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    person_id?: IntFieldUpdateOperationsInput | number
    user_objective_answer?: StringFieldUpdateOperationsInput | string
    user_theory_answer?: StringFieldUpdateOperationsInput | string
    score_obtained?: IntFieldUpdateOperationsInput | number
    marked_by?: IntFieldUpdateOperationsInput | number
    time_taken?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionAnswerCreateManyInput = {
    id?: number
    attempt_id?: number | null
    exam_id: number
    question_id: number
    model_name: string
    person_id: number
    user_objective_answer: string
    user_theory_answer: string
    score_obtained: number
    marked_by: number
    time_taken?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamQuestionAnswerUpdateManyMutationInput = {
    attempt_id?: NullableIntFieldUpdateOperationsInput | number | null
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    person_id?: IntFieldUpdateOperationsInput | number
    user_objective_answer?: StringFieldUpdateOperationsInput | string
    user_theory_answer?: StringFieldUpdateOperationsInput | string
    score_obtained?: IntFieldUpdateOperationsInput | number
    marked_by?: IntFieldUpdateOperationsInput | number
    time_taken?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamQuestionAnswerUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    attempt_id?: NullableIntFieldUpdateOperationsInput | number | null
    exam_id?: IntFieldUpdateOperationsInput | number
    question_id?: IntFieldUpdateOperationsInput | number
    model_name?: StringFieldUpdateOperationsInput | string
    person_id?: IntFieldUpdateOperationsInput | number
    user_objective_answer?: StringFieldUpdateOperationsInput | string
    user_theory_answer?: StringFieldUpdateOperationsInput | string
    score_obtained?: IntFieldUpdateOperationsInput | number
    marked_by?: IntFieldUpdateOperationsInput | number
    time_taken?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamGiftCreateInput = {
    exam_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamGiftUncheckedCreateInput = {
    id?: number
    exam_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamGiftUpdateInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamGiftUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamGiftCreateManyInput = {
    id?: number
    exam_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamGiftUpdateManyMutationInput = {
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamGiftUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolRecordCreateInput = {
    school_name: string
    school_code: number
    school_databasename: string
    school_active?: number | null
    school_approved?: number | null
    created_by?: number | null
    created_at?: Date | string | null
    updated_at?: Date | string | null
  }

  export type SchoolRecordUncheckedCreateInput = {
    id?: number
    school_name: string
    school_code: number
    school_databasename: string
    school_active?: number | null
    school_approved?: number | null
    created_by?: number | null
    created_at?: Date | string | null
    updated_at?: Date | string | null
  }

  export type SchoolRecordUpdateInput = {
    school_name?: StringFieldUpdateOperationsInput | string
    school_code?: IntFieldUpdateOperationsInput | number
    school_databasename?: StringFieldUpdateOperationsInput | string
    school_active?: NullableIntFieldUpdateOperationsInput | number | null
    school_approved?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolRecordUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_name?: StringFieldUpdateOperationsInput | string
    school_code?: IntFieldUpdateOperationsInput | number
    school_databasename?: StringFieldUpdateOperationsInput | string
    school_active?: NullableIntFieldUpdateOperationsInput | number | null
    school_approved?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolRecordCreateManyInput = {
    id?: number
    school_name: string
    school_code: number
    school_databasename: string
    school_active?: number | null
    school_approved?: number | null
    created_by?: number | null
    created_at?: Date | string | null
    updated_at?: Date | string | null
  }

  export type SchoolRecordUpdateManyMutationInput = {
    school_name?: StringFieldUpdateOperationsInput | string
    school_code?: IntFieldUpdateOperationsInput | number
    school_databasename?: StringFieldUpdateOperationsInput | string
    school_active?: NullableIntFieldUpdateOperationsInput | number | null
    school_approved?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolRecordUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_name?: StringFieldUpdateOperationsInput | string
    school_code?: IntFieldUpdateOperationsInput | number
    school_databasename?: StringFieldUpdateOperationsInput | string
    school_active?: NullableIntFieldUpdateOperationsInput | number | null
    school_approved?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ComponentGroupCreateInput = {
    component_group_name: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentGroupUncheckedCreateInput = {
    id?: number
    component_group_name: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentGroupUpdateInput = {
    component_group_name?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentGroupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    component_group_name?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentGroupCreateManyInput = {
    id?: number
    component_group_name: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentGroupUpdateManyMutationInput = {
    component_group_name?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentGroupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    component_group_name?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentCreateInput = {
    component_group_id: number
    component_name: string
    component_displayname: string
    component_desc?: string | null
    component_image_url?: string | null
    component_file_name?: string | null
    is_native?: number
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentUncheckedCreateInput = {
    id?: number
    component_group_id: number
    component_name: string
    component_displayname: string
    component_desc?: string | null
    component_image_url?: string | null
    component_file_name?: string | null
    is_native?: number
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentUpdateInput = {
    component_group_id?: IntFieldUpdateOperationsInput | number
    component_name?: StringFieldUpdateOperationsInput | string
    component_displayname?: StringFieldUpdateOperationsInput | string
    component_desc?: NullableStringFieldUpdateOperationsInput | string | null
    component_image_url?: NullableStringFieldUpdateOperationsInput | string | null
    component_file_name?: NullableStringFieldUpdateOperationsInput | string | null
    is_native?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    component_group_id?: IntFieldUpdateOperationsInput | number
    component_name?: StringFieldUpdateOperationsInput | string
    component_displayname?: StringFieldUpdateOperationsInput | string
    component_desc?: NullableStringFieldUpdateOperationsInput | string | null
    component_image_url?: NullableStringFieldUpdateOperationsInput | string | null
    component_file_name?: NullableStringFieldUpdateOperationsInput | string | null
    is_native?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentCreateManyInput = {
    id?: number
    component_group_id: number
    component_name: string
    component_displayname: string
    component_desc?: string | null
    component_image_url?: string | null
    component_file_name?: string | null
    is_native?: number
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type ComponentUpdateManyMutationInput = {
    component_group_id?: IntFieldUpdateOperationsInput | number
    component_name?: StringFieldUpdateOperationsInput | string
    component_displayname?: StringFieldUpdateOperationsInput | string
    component_desc?: NullableStringFieldUpdateOperationsInput | string | null
    component_image_url?: NullableStringFieldUpdateOperationsInput | string | null
    component_file_name?: NullableStringFieldUpdateOperationsInput | string | null
    is_native?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type ComponentUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    component_group_id?: IntFieldUpdateOperationsInput | number
    component_name?: StringFieldUpdateOperationsInput | string
    component_displayname?: StringFieldUpdateOperationsInput | string
    component_desc?: NullableStringFieldUpdateOperationsInput | string | null
    component_image_url?: NullableStringFieldUpdateOperationsInput | string | null
    component_file_name?: NullableStringFieldUpdateOperationsInput | string | null
    is_native?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudPageCreateInput = {
    name: string
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudPageUncheckedCreateInput = {
    id?: number
    name: string
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudPageUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudPageUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudPageCreateManyInput = {
    id?: number
    name: string
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudPageUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudPageUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type AppUserTypeCreateInput = {
    app_user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type AppUserTypeUncheckedCreateInput = {
    id?: number
    app_user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type AppUserTypeUpdateInput = {
    app_user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type AppUserTypeUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    app_user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type AppUserTypeCreateManyInput = {
    id?: number
    app_user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type AppUserTypeUpdateManyMutationInput = {
    app_user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type AppUserTypeUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    app_user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type MenuGroupCreateInput = {
    menu_group_name: string
    menu_group_sort?: number | null
    menu_group_icon?: string | null
    menu_active?: number
    is_root?: number
    parent_group_id?: number | null
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type MenuGroupUncheckedCreateInput = {
    id?: number
    menu_group_name: string
    menu_group_sort?: number | null
    menu_group_icon?: string | null
    menu_active?: number
    is_root?: number
    parent_group_id?: number | null
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type MenuGroupUpdateInput = {
    menu_group_name?: StringFieldUpdateOperationsInput | string
    menu_group_sort?: NullableIntFieldUpdateOperationsInput | number | null
    menu_group_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_active?: IntFieldUpdateOperationsInput | number
    is_root?: IntFieldUpdateOperationsInput | number
    parent_group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type MenuGroupUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    menu_group_name?: StringFieldUpdateOperationsInput | string
    menu_group_sort?: NullableIntFieldUpdateOperationsInput | number | null
    menu_group_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_active?: IntFieldUpdateOperationsInput | number
    is_root?: IntFieldUpdateOperationsInput | number
    parent_group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type MenuGroupCreateManyInput = {
    id?: number
    menu_group_name: string
    menu_group_sort?: number | null
    menu_group_icon?: string | null
    menu_active?: number
    is_root?: number
    parent_group_id?: number | null
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type MenuGroupUpdateManyMutationInput = {
    menu_group_name?: StringFieldUpdateOperationsInput | string
    menu_group_sort?: NullableIntFieldUpdateOperationsInput | number | null
    menu_group_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_active?: IntFieldUpdateOperationsInput | number
    is_root?: IntFieldUpdateOperationsInput | number
    parent_group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type MenuGroupUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    menu_group_name?: StringFieldUpdateOperationsInput | string
    menu_group_sort?: NullableIntFieldUpdateOperationsInput | number | null
    menu_group_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_active?: IntFieldUpdateOperationsInput | number
    is_root?: IntFieldUpdateOperationsInput | number
    parent_group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type SystemConfigurationCreateInput = {
    configuration_name: string
    configurations: JsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type SystemConfigurationUncheckedCreateInput = {
    id?: number
    configuration_name: string
    configurations: JsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type SystemConfigurationUpdateInput = {
    configuration_name?: StringFieldUpdateOperationsInput | string
    configurations?: JsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type SystemConfigurationUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    configuration_name?: StringFieldUpdateOperationsInput | string
    configurations?: JsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type SystemConfigurationCreateManyInput = {
    id?: number
    configuration_name: string
    configurations: JsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type SystemConfigurationUpdateManyMutationInput = {
    configuration_name?: StringFieldUpdateOperationsInput | string
    configurations?: JsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type SystemConfigurationUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    configuration_name?: StringFieldUpdateOperationsInput | string
    configurations?: JsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudFrontCreateInput = {
    name: string
    permission_name?: string | null
    handler_name?: string | null
    post_route?: string | null
    read_route?: string | null
    update_route?: string | null
    delete_route?: string | null
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudFrontUncheckedCreateInput = {
    id?: number
    name: string
    permission_name?: string | null
    handler_name?: string | null
    post_route?: string | null
    read_route?: string | null
    update_route?: string | null
    delete_route?: string | null
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudFrontUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    permission_name?: NullableStringFieldUpdateOperationsInput | string | null
    handler_name?: NullableStringFieldUpdateOperationsInput | string | null
    post_route?: NullableStringFieldUpdateOperationsInput | string | null
    read_route?: NullableStringFieldUpdateOperationsInput | string | null
    update_route?: NullableStringFieldUpdateOperationsInput | string | null
    delete_route?: NullableStringFieldUpdateOperationsInput | string | null
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudFrontUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    permission_name?: NullableStringFieldUpdateOperationsInput | string | null
    handler_name?: NullableStringFieldUpdateOperationsInput | string | null
    post_route?: NullableStringFieldUpdateOperationsInput | string | null
    read_route?: NullableStringFieldUpdateOperationsInput | string | null
    update_route?: NullableStringFieldUpdateOperationsInput | string | null
    delete_route?: NullableStringFieldUpdateOperationsInput | string | null
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudFrontCreateManyInput = {
    id?: number
    name: string
    permission_name?: string | null
    handler_name?: string | null
    post_route?: string | null
    read_route?: string | null
    update_route?: string | null
    delete_route?: string | null
    schema: JsonNullValueInput | InputJsonValue
    is_enabled?: number
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudFrontUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    permission_name?: NullableStringFieldUpdateOperationsInput | string | null
    handler_name?: NullableStringFieldUpdateOperationsInput | string | null
    post_route?: NullableStringFieldUpdateOperationsInput | string | null
    read_route?: NullableStringFieldUpdateOperationsInput | string | null
    update_route?: NullableStringFieldUpdateOperationsInput | string | null
    delete_route?: NullableStringFieldUpdateOperationsInput | string | null
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudFrontUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    permission_name?: NullableStringFieldUpdateOperationsInput | string | null
    handler_name?: NullableStringFieldUpdateOperationsInput | string | null
    post_route?: NullableStringFieldUpdateOperationsInput | string | null
    read_route?: NullableStringFieldUpdateOperationsInput | string | null
    update_route?: NullableStringFieldUpdateOperationsInput | string | null
    delete_route?: NullableStringFieldUpdateOperationsInput | string | null
    schema?: JsonNullValueInput | InputJsonValue
    is_enabled?: IntFieldUpdateOperationsInput | number
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudUtilCreateInput = {
    name: string
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    permission_name: string
    menu_sort?: string | null
    log_update?: number
    primary_key?: string | null
    show_field?: string
    paginate_fetch?: number
    permission_for_all?: string | null
    should_backup?: number
    table_name: string
    model_name: string
    schema: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: number
    fetch_manually?: number
    create_manually?: number
    update_manually?: number
    delete_manually?: number
    use_modal?: number
    use_custom_form?: number
    is_fetch_all_public?: number
    is_fetch_public?: number
    is_create_public?: number
    is_update_public?: number
    is_delete_public?: number
    fetch_all_path?: string | null
    fetch_path?: string | null
    create_path?: string | null
    update_path?: string | null
    delete_path?: string | null
    query_parameter?: string | null
    custom_form_name?: string | null
    block_fetch_all?: number
    block_fetch?: number
    block_create?: number
    block_update?: number
    block_delete?: number
    is_enabled?: number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children: JsonNullValueInput | InputJsonValue
    info_messages: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudUtilUncheckedCreateInput = {
    id?: number
    name: string
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    permission_name: string
    menu_sort?: string | null
    log_update?: number
    primary_key?: string | null
    show_field?: string
    paginate_fetch?: number
    permission_for_all?: string | null
    should_backup?: number
    table_name: string
    model_name: string
    schema: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: number
    fetch_manually?: number
    create_manually?: number
    update_manually?: number
    delete_manually?: number
    use_modal?: number
    use_custom_form?: number
    is_fetch_all_public?: number
    is_fetch_public?: number
    is_create_public?: number
    is_update_public?: number
    is_delete_public?: number
    fetch_all_path?: string | null
    fetch_path?: string | null
    create_path?: string | null
    update_path?: string | null
    delete_path?: string | null
    query_parameter?: string | null
    custom_form_name?: string | null
    block_fetch_all?: number
    block_fetch?: number
    block_create?: number
    block_update?: number
    block_delete?: number
    is_enabled?: number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children: JsonNullValueInput | InputJsonValue
    info_messages: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudUtilUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    permission_name?: StringFieldUpdateOperationsInput | string
    menu_sort?: NullableStringFieldUpdateOperationsInput | string | null
    log_update?: IntFieldUpdateOperationsInput | number
    primary_key?: NullableStringFieldUpdateOperationsInput | string | null
    show_field?: StringFieldUpdateOperationsInput | string
    paginate_fetch?: IntFieldUpdateOperationsInput | number
    permission_for_all?: NullableStringFieldUpdateOperationsInput | string | null
    should_backup?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    model_name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: IntFieldUpdateOperationsInput | number
    fetch_manually?: IntFieldUpdateOperationsInput | number
    create_manually?: IntFieldUpdateOperationsInput | number
    update_manually?: IntFieldUpdateOperationsInput | number
    delete_manually?: IntFieldUpdateOperationsInput | number
    use_modal?: IntFieldUpdateOperationsInput | number
    use_custom_form?: IntFieldUpdateOperationsInput | number
    is_fetch_all_public?: IntFieldUpdateOperationsInput | number
    is_fetch_public?: IntFieldUpdateOperationsInput | number
    is_create_public?: IntFieldUpdateOperationsInput | number
    is_update_public?: IntFieldUpdateOperationsInput | number
    is_delete_public?: IntFieldUpdateOperationsInput | number
    fetch_all_path?: NullableStringFieldUpdateOperationsInput | string | null
    fetch_path?: NullableStringFieldUpdateOperationsInput | string | null
    create_path?: NullableStringFieldUpdateOperationsInput | string | null
    update_path?: NullableStringFieldUpdateOperationsInput | string | null
    delete_path?: NullableStringFieldUpdateOperationsInput | string | null
    query_parameter?: NullableStringFieldUpdateOperationsInput | string | null
    custom_form_name?: NullableStringFieldUpdateOperationsInput | string | null
    block_fetch_all?: IntFieldUpdateOperationsInput | number
    block_fetch?: IntFieldUpdateOperationsInput | number
    block_create?: IntFieldUpdateOperationsInput | number
    block_update?: IntFieldUpdateOperationsInput | number
    block_delete?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters?: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children?: JsonNullValueInput | InputJsonValue
    info_messages?: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudUtilUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    permission_name?: StringFieldUpdateOperationsInput | string
    menu_sort?: NullableStringFieldUpdateOperationsInput | string | null
    log_update?: IntFieldUpdateOperationsInput | number
    primary_key?: NullableStringFieldUpdateOperationsInput | string | null
    show_field?: StringFieldUpdateOperationsInput | string
    paginate_fetch?: IntFieldUpdateOperationsInput | number
    permission_for_all?: NullableStringFieldUpdateOperationsInput | string | null
    should_backup?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    model_name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: IntFieldUpdateOperationsInput | number
    fetch_manually?: IntFieldUpdateOperationsInput | number
    create_manually?: IntFieldUpdateOperationsInput | number
    update_manually?: IntFieldUpdateOperationsInput | number
    delete_manually?: IntFieldUpdateOperationsInput | number
    use_modal?: IntFieldUpdateOperationsInput | number
    use_custom_form?: IntFieldUpdateOperationsInput | number
    is_fetch_all_public?: IntFieldUpdateOperationsInput | number
    is_fetch_public?: IntFieldUpdateOperationsInput | number
    is_create_public?: IntFieldUpdateOperationsInput | number
    is_update_public?: IntFieldUpdateOperationsInput | number
    is_delete_public?: IntFieldUpdateOperationsInput | number
    fetch_all_path?: NullableStringFieldUpdateOperationsInput | string | null
    fetch_path?: NullableStringFieldUpdateOperationsInput | string | null
    create_path?: NullableStringFieldUpdateOperationsInput | string | null
    update_path?: NullableStringFieldUpdateOperationsInput | string | null
    delete_path?: NullableStringFieldUpdateOperationsInput | string | null
    query_parameter?: NullableStringFieldUpdateOperationsInput | string | null
    custom_form_name?: NullableStringFieldUpdateOperationsInput | string | null
    block_fetch_all?: IntFieldUpdateOperationsInput | number
    block_fetch?: IntFieldUpdateOperationsInput | number
    block_create?: IntFieldUpdateOperationsInput | number
    block_update?: IntFieldUpdateOperationsInput | number
    block_delete?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters?: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children?: JsonNullValueInput | InputJsonValue
    info_messages?: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudUtilCreateManyInput = {
    id?: number
    name: string
    menu_name?: string | null
    menu_icon?: string | null
    menu_group?: string | null
    permission_name: string
    menu_sort?: string | null
    log_update?: number
    primary_key?: string | null
    show_field?: string
    paginate_fetch?: number
    permission_for_all?: string | null
    should_backup?: number
    table_name: string
    model_name: string
    schema: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: number
    fetch_manually?: number
    create_manually?: number
    update_manually?: number
    delete_manually?: number
    use_modal?: number
    use_custom_form?: number
    is_fetch_all_public?: number
    is_fetch_public?: number
    is_create_public?: number
    is_update_public?: number
    is_delete_public?: number
    fetch_all_path?: string | null
    fetch_path?: string | null
    create_path?: string | null
    update_path?: string | null
    delete_path?: string | null
    query_parameter?: string | null
    custom_form_name?: string | null
    block_fetch_all?: number
    block_fetch?: number
    block_create?: number
    block_update?: number
    block_delete?: number
    is_enabled?: number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children: JsonNullValueInput | InputJsonValue
    info_messages: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type CrudUtilUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    permission_name?: StringFieldUpdateOperationsInput | string
    menu_sort?: NullableStringFieldUpdateOperationsInput | string | null
    log_update?: IntFieldUpdateOperationsInput | number
    primary_key?: NullableStringFieldUpdateOperationsInput | string | null
    show_field?: StringFieldUpdateOperationsInput | string
    paginate_fetch?: IntFieldUpdateOperationsInput | number
    permission_for_all?: NullableStringFieldUpdateOperationsInput | string | null
    should_backup?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    model_name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: IntFieldUpdateOperationsInput | number
    fetch_manually?: IntFieldUpdateOperationsInput | number
    create_manually?: IntFieldUpdateOperationsInput | number
    update_manually?: IntFieldUpdateOperationsInput | number
    delete_manually?: IntFieldUpdateOperationsInput | number
    use_modal?: IntFieldUpdateOperationsInput | number
    use_custom_form?: IntFieldUpdateOperationsInput | number
    is_fetch_all_public?: IntFieldUpdateOperationsInput | number
    is_fetch_public?: IntFieldUpdateOperationsInput | number
    is_create_public?: IntFieldUpdateOperationsInput | number
    is_update_public?: IntFieldUpdateOperationsInput | number
    is_delete_public?: IntFieldUpdateOperationsInput | number
    fetch_all_path?: NullableStringFieldUpdateOperationsInput | string | null
    fetch_path?: NullableStringFieldUpdateOperationsInput | string | null
    create_path?: NullableStringFieldUpdateOperationsInput | string | null
    update_path?: NullableStringFieldUpdateOperationsInput | string | null
    delete_path?: NullableStringFieldUpdateOperationsInput | string | null
    query_parameter?: NullableStringFieldUpdateOperationsInput | string | null
    custom_form_name?: NullableStringFieldUpdateOperationsInput | string | null
    block_fetch_all?: IntFieldUpdateOperationsInput | number
    block_fetch?: IntFieldUpdateOperationsInput | number
    block_create?: IntFieldUpdateOperationsInput | number
    block_update?: IntFieldUpdateOperationsInput | number
    block_delete?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters?: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children?: JsonNullValueInput | InputJsonValue
    info_messages?: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type CrudUtilUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    menu_name?: NullableStringFieldUpdateOperationsInput | string | null
    menu_icon?: NullableStringFieldUpdateOperationsInput | string | null
    menu_group?: NullableStringFieldUpdateOperationsInput | string | null
    permission_name?: StringFieldUpdateOperationsInput | string
    menu_sort?: NullableStringFieldUpdateOperationsInput | string | null
    log_update?: IntFieldUpdateOperationsInput | number
    primary_key?: NullableStringFieldUpdateOperationsInput | string | null
    show_field?: StringFieldUpdateOperationsInput | string
    paginate_fetch?: IntFieldUpdateOperationsInput | number
    permission_for_all?: NullableStringFieldUpdateOperationsInput | string | null
    should_backup?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    model_name?: StringFieldUpdateOperationsInput | string
    schema?: JsonNullValueInput | InputJsonValue
    fetch_all_manually?: IntFieldUpdateOperationsInput | number
    fetch_manually?: IntFieldUpdateOperationsInput | number
    create_manually?: IntFieldUpdateOperationsInput | number
    update_manually?: IntFieldUpdateOperationsInput | number
    delete_manually?: IntFieldUpdateOperationsInput | number
    use_modal?: IntFieldUpdateOperationsInput | number
    use_custom_form?: IntFieldUpdateOperationsInput | number
    is_fetch_all_public?: IntFieldUpdateOperationsInput | number
    is_fetch_public?: IntFieldUpdateOperationsInput | number
    is_create_public?: IntFieldUpdateOperationsInput | number
    is_update_public?: IntFieldUpdateOperationsInput | number
    is_delete_public?: IntFieldUpdateOperationsInput | number
    fetch_all_path?: NullableStringFieldUpdateOperationsInput | string | null
    fetch_path?: NullableStringFieldUpdateOperationsInput | string | null
    create_path?: NullableStringFieldUpdateOperationsInput | string | null
    update_path?: NullableStringFieldUpdateOperationsInput | string | null
    delete_path?: NullableStringFieldUpdateOperationsInput | string | null
    query_parameter?: NullableStringFieldUpdateOperationsInput | string | null
    custom_form_name?: NullableStringFieldUpdateOperationsInput | string | null
    block_fetch_all?: IntFieldUpdateOperationsInput | number
    block_fetch?: IntFieldUpdateOperationsInput | number
    block_create?: IntFieldUpdateOperationsInput | number
    block_update?: IntFieldUpdateOperationsInput | number
    block_delete?: IntFieldUpdateOperationsInput | number
    is_enabled?: IntFieldUpdateOperationsInput | number
    front_validations?: NullableJsonNullValueInput | InputJsonValue
    table_columns?: NullableJsonNullValueInput | InputJsonValue
    backend_validations?: NullableJsonNullValueInput | InputJsonValue
    relationships?: NullableJsonNullValueInput | InputJsonValue
    filters?: JsonNullValueInput | InputJsonValue
    filters_internal?: NullableJsonNullValueInput | InputJsonValue
    hooks?: NullableJsonNullValueInput | InputJsonValue
    children?: JsonNullValueInput | InputJsonValue
    info_messages?: JsonNullValueInput | InputJsonValue
    config?: NullableJsonNullValueInput | InputJsonValue
    buttons?: NullableJsonNullValueInput | InputJsonValue
    others?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RegionCreateInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryCreateNestedManyWithoutRegionRelationInput
    subregions?: SubregionCreateNestedManyWithoutRegionInput
  }

  export type RegionUncheckedCreateInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryUncheckedCreateNestedManyWithoutRegionRelationInput
    subregions?: SubregionUncheckedCreateNestedManyWithoutRegionInput
  }

  export type RegionUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUpdateManyWithoutRegionRelationNestedInput
    subregions?: SubregionUpdateManyWithoutRegionNestedInput
  }

  export type RegionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUncheckedUpdateManyWithoutRegionRelationNestedInput
    subregions?: SubregionUncheckedUpdateManyWithoutRegionNestedInput
  }

  export type RegionCreateManyInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type RegionUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type RegionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type SubregionCreateInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    region: RegionCreateNestedOneWithoutSubregionsInput
    countries?: CountryCreateNestedManyWithoutSubregionRelationInput
  }

  export type SubregionUncheckedCreateInput = {
    id?: number
    name: string
    region_id: number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryUncheckedCreateNestedManyWithoutSubregionRelationInput
  }

  export type SubregionUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    region?: RegionUpdateOneRequiredWithoutSubregionsNestedInput
    countries?: CountryUpdateManyWithoutSubregionRelationNestedInput
  }

  export type SubregionUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    region_id?: IntFieldUpdateOperationsInput | number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUncheckedUpdateManyWithoutSubregionRelationNestedInput
  }

  export type SubregionCreateManyInput = {
    id?: number
    name: string
    region_id: number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type SubregionUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type SubregionUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    region_id?: IntFieldUpdateOperationsInput | number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CountryCreateInput = {
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    regionRelation?: RegionCreateNestedOneWithoutCountriesInput
    subregionRelation?: SubregionCreateNestedOneWithoutCountriesInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    regionRelation?: RegionUpdateOneWithoutCountriesNestedInput
    subregionRelation?: SubregionUpdateOneWithoutCountriesNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CountryCreateManyInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CountryUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CountryUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StateCreateInput = {
    name: string
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    country: CountryCreateNestedOneWithoutStatesInput
    cities?: CityCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateInput = {
    id?: number
    name: string
    country_id: number
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
    cities?: CityUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateCreateManyInput = {
    id?: number
    name: string
    country_id: number
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type StateUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StateUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityCreateInput = {
    name: string
    state_code: string
    state_name?: string | null
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    state: StateCreateNestedOneWithoutCitiesInput
    country: CountryCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateInput = {
    id?: number
    name: string
    state_id: number
    state_code: string
    state_name?: string | null
    country_id: number
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityUpdateInput = {
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    state?: StateUpdateOneRequiredWithoutCitiesNestedInput
    country?: CountryUpdateOneRequiredWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_id?: IntFieldUpdateOperationsInput | number
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityCreateManyInput = {
    id?: number
    name: string
    state_id: number
    state_code: string
    state_name?: string | null
    country_id: number
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityUpdateManyMutationInput = {
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_id?: IntFieldUpdateOperationsInput | number
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type TableLogCreateInput = {
    table_name: string
    row_id: number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
  }

  export type TableLogUncheckedCreateInput = {
    id?: number
    table_name: string
    row_id: number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
  }

  export type TableLogUpdateInput = {
    table_name?: StringFieldUpdateOperationsInput | string
    row_id?: IntFieldUpdateOperationsInput | number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type TableLogUncheckedUpdateInput = {
    id?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    row_id?: IntFieldUpdateOperationsInput | number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type TableLogCreateManyInput = {
    id?: number
    table_name: string
    row_id: number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: number | null
    created_at?: Date | string
  }

  export type TableLogUpdateManyMutationInput = {
    table_name?: StringFieldUpdateOperationsInput | string
    row_id?: IntFieldUpdateOperationsInput | number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type TableLogUncheckedUpdateManyInput = {
    id?: IntFieldUpdateOperationsInput | number
    table_name?: StringFieldUpdateOperationsInput | string
    row_id?: IntFieldUpdateOperationsInput | number
    previous_fields?: NullableJsonNullValueInput | InputJsonValue
    new_fields?: NullableJsonNullValueInput | InputJsonValue
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type IntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }

  export type StringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type IntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type SortOrderInput = {
    sort: SortOrder
    nulls?: NullsOrder
  }

  export type SessionOrderByRelevanceInput = {
    fields: SessionOrderByRelevanceFieldEnum | SessionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SessionCountOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    ip_address?: SortOrder
    user_agent?: SortOrder
    payload?: SortOrder
    last_activity?: SortOrder
  }

  export type SessionAvgOrderByAggregateInput = {
    user_id?: SortOrder
    last_activity?: SortOrder
  }

  export type SessionMaxOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    ip_address?: SortOrder
    user_agent?: SortOrder
    payload?: SortOrder
    last_activity?: SortOrder
  }

  export type SessionMinOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    ip_address?: SortOrder
    user_agent?: SortOrder
    payload?: SortOrder
    last_activity?: SortOrder
  }

  export type SessionSumOrderByAggregateInput = {
    user_id?: SortOrder
    last_activity?: SortOrder
  }

  export type StringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type IntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }

  export type StringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type IntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type DateTimeFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[]
    notIn?: Date[] | string[]
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeFilter<$PrismaModel> | Date | string
  }

  export type DateTimeNullableFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | null
    notIn?: Date[] | string[] | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
  }

  export type UserListRelationFilter = {
    every?: UserWhereInput
    some?: UserWhereInput
    none?: UserWhereInput
  }

  export type BranchListRelationFilter = {
    every?: BranchWhereInput
    some?: BranchWhereInput
    none?: BranchWhereInput
  }

  export type StudentListRelationFilter = {
    every?: StudentWhereInput
    some?: StudentWhereInput
    none?: StudentWhereInput
  }

  export type GuardianListRelationFilter = {
    every?: GuardianWhereInput
    some?: GuardianWhereInput
    none?: GuardianWhereInput
  }

  export type UserOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type BranchOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type StudentOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type GuardianOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type SchoolOrderByRelevanceInput = {
    fields: SchoolOrderByRelevanceFieldEnum | SchoolOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SchoolCountOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_name?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    profile_photo_path?: SortOrder
    aboutus?: SortOrder
    mission?: SortOrder
    vision?: SortOrder
    idcard_bg_color?: SortOrder
    idcard_design_color?: SortOrder
    idcard_text_color?: SortOrder
    idcard_tnc1?: SortOrder
    idcard_tnc2?: SortOrder
    school_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolAvgOrderByAggregateInput = {
    id?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolMaxOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_name?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    profile_photo_path?: SortOrder
    aboutus?: SortOrder
    mission?: SortOrder
    vision?: SortOrder
    idcard_bg_color?: SortOrder
    idcard_design_color?: SortOrder
    idcard_text_color?: SortOrder
    idcard_tnc1?: SortOrder
    idcard_tnc2?: SortOrder
    school_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolMinOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_name?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    profile_photo_path?: SortOrder
    aboutus?: SortOrder
    mission?: SortOrder
    vision?: SortOrder
    idcard_bg_color?: SortOrder
    idcard_design_color?: SortOrder
    idcard_text_color?: SortOrder
    idcard_tnc1?: SortOrder
    idcard_tnc2?: SortOrder
    school_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSumOrderByAggregateInput = {
    id?: SortOrder
    school_approved?: SortOrder
    school_active?: SortOrder
    created_by?: SortOrder
  }

  export type DateTimeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[]
    notIn?: Date[] | string[]
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedDateTimeFilter<$PrismaModel>
    _max?: NestedDateTimeFilter<$PrismaModel>
  }

  export type DateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | null
    notIn?: Date[] | string[] | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedDateTimeNullableFilter<$PrismaModel>
    _max?: NestedDateTimeNullableFilter<$PrismaModel>
  }

  export type SchoolScalarRelationFilter = {
    is?: SchoolWhereInput
    isNot?: SchoolWhereInput
  }

  export type BranchLevelListRelationFilter = {
    every?: BranchLevelWhereInput
    some?: BranchLevelWhereInput
    none?: BranchLevelWhereInput
  }

  export type MultimediaListRelationFilter = {
    every?: MultimediaWhereInput
    some?: MultimediaWhereInput
    none?: MultimediaWhereInput
  }

  export type LibraryBookListRelationFilter = {
    every?: LibraryBookWhereInput
    some?: LibraryBookWhereInput
    none?: LibraryBookWhereInput
  }

  export type BranchLevelOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type MultimediaOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type LibraryBookOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type BranchOrderByRelevanceInput = {
    fields: BranchOrderByRelevanceFieldEnum | BranchOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type BranchCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrder
    branch_state_id?: SortOrder
    branch_name?: SortOrder
    branch_phone?: SortOrder
    branch_email?: SortOrder
    branch_address?: SortOrder
    branch_state?: SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    branch_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrder
    branch_state_id?: SortOrder
    branch_state?: SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    created_by?: SortOrder
  }

  export type BranchMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrder
    branch_state_id?: SortOrder
    branch_name?: SortOrder
    branch_phone?: SortOrder
    branch_email?: SortOrder
    branch_address?: SortOrder
    branch_state?: SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    branch_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrder
    branch_state_id?: SortOrder
    branch_name?: SortOrder
    branch_phone?: SortOrder
    branch_email?: SortOrder
    branch_address?: SortOrder
    branch_state?: SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    branch_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_country_id?: SortOrder
    branch_state_id?: SortOrder
    branch_state?: SortOrder
    branch_active?: SortOrder
    branch_main?: SortOrder
    prevent_users_to_login?: SortOrder
    created_by?: SortOrder
  }

  export type BranchScalarRelationFilter = {
    is?: BranchWhereInput
    isNot?: BranchWhereInput
  }

  export type BranchLevelOrderByRelevanceInput = {
    fields: BranchLevelOrderByRelevanceFieldEnum | BranchLevelOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type BranchLevelCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_name?: SortOrder
    level_leader?: SortOrder
    level_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchLevelAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_leader?: SortOrder
    level_active?: SortOrder
    created_by?: SortOrder
  }

  export type BranchLevelMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_name?: SortOrder
    level_leader?: SortOrder
    level_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchLevelMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_name?: SortOrder
    level_leader?: SortOrder
    level_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchLevelSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_leader?: SortOrder
    level_active?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassListRelationFilter = {
    every?: SessionClassWhereInput
    some?: SessionClassWhereInput
    none?: SessionClassWhereInput
  }

  export type ExamListRelationFilter = {
    every?: ExamWhereInput
    some?: ExamWhereInput
    none?: ExamWhereInput
  }

  export type SessionClassOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ExamOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ClassTemplateOrderByRelevanceInput = {
    fields: ClassTemplateOrderByRelevanceFieldEnum | ClassTemplateOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ClassTemplateCountOrderByAggregateInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrder
    class_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassTemplateAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrder
    class_active?: SortOrder
    created_by?: SortOrder
  }

  export type ClassTemplateMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrder
    class_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassTemplateMinOrderByAggregateInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrder
    class_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassTemplateSumOrderByAggregateInput = {
    id?: SortOrder
    branch_level_id?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    rank?: SortOrder
    class_active?: SortOrder
    created_by?: SortOrder
  }

  export type SubjectSetupOrderByRelevanceInput = {
    fields: SubjectSetupOrderByRelevanceFieldEnum | SubjectSetupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SubjectSetupCountOrderByAggregateInput = {
    id?: SortOrder
    subject_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SubjectSetupAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type SubjectSetupMaxOrderByAggregateInput = {
    id?: SortOrder
    subject_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SubjectSetupMinOrderByAggregateInput = {
    id?: SortOrder
    subject_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SubjectSetupSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }
  export type JsonNullableFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonNullableFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonNullableFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonNullableFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonNullableFilterBase<$PrismaModel>>, 'path'>>

  export type JsonNullableFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type SessionClassSubjectListRelationFilter = {
    every?: SessionClassSubjectWhereInput
    some?: SessionClassSubjectWhereInput
    none?: SessionClassSubjectWhereInput
  }

  export type ClassSubjectTemplateListRelationFilter = {
    every?: ClassSubjectTemplateWhereInput
    some?: ClassSubjectTemplateWhereInput
    none?: ClassSubjectTemplateWhereInput
  }

  export type SessionClassSubjectOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type ClassSubjectTemplateOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type SchoolSubjectOrderByRelevanceInput = {
    fields: SchoolSubjectOrderByRelevanceFieldEnum | SchoolSubjectOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SchoolSubjectCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    subject_name?: SortOrder
    branch_config?: SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSubjectAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolSubjectMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    subject_name?: SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSubjectMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    subject_name?: SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSubjectSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    school_subjects_active?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
  }
  export type JsonNullableWithAggregatesFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonNullableWithAggregatesFilterBase<$PrismaModel>>, 'path'>>

  export type JsonNullableWithAggregatesFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedJsonNullableFilter<$PrismaModel>
    _max?: NestedJsonNullableFilter<$PrismaModel>
  }

  export type SessionTermListRelationFilter = {
    every?: SessionTermWhereInput
    some?: SessionTermWhereInput
    none?: SessionTermWhereInput
  }

  export type SessionTermOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type BranchSessionOrderByRelevanceInput = {
    fields: BranchSessionOrderByRelevanceFieldEnum | BranchSessionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type BranchSessionBranch_idSession_nameCompoundUniqueInput = {
    branch_id: number
    session_name: string
  }

  export type BranchSessionCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_name?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchSessionAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrder
  }

  export type BranchSessionMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_name?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchSessionMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_name?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type BranchSessionSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    no_of_terms?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolSettingCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrder
    library_card_no_of_years?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSettingAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrder
    library_card_no_of_years?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolSettingMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrder
    library_card_no_of_years?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSettingMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrder
    library_card_no_of_years?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolSettingSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    isolate_branch_library?: SortOrder
    isolate_branch_multimedia?: SortOrder
    id_card_amount?: SortOrder
    library_card_amount?: SortOrder
    result_serial_ammount?: SortOrder
    id_card_no_of_years?: SortOrder
    library_card_no_of_years?: SortOrder
    created_by?: SortOrder
  }

  export type MultimediaGroupOrderByRelevanceInput = {
    fields: MultimediaGroupOrderByRelevanceFieldEnum | MultimediaGroupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type MultimediaGroupCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_group_name?: SortOrder
    multimedia_group_desc?: SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaGroupAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrder
  }

  export type MultimediaGroupMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_group_name?: SortOrder
    multimedia_group_desc?: SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaGroupMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_group_name?: SortOrder
    multimedia_group_desc?: SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaGroupSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_group_active?: SortOrder
    created_by?: SortOrder
  }

  export type BranchNullableScalarRelationFilter = {
    is?: BranchWhereInput | null
    isNot?: BranchWhereInput | null
  }

  export type MultimediaOrderByRelevanceInput = {
    fields: MultimediaOrderByRelevanceFieldEnum | MultimediaOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type MultimediaCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_is_image?: SortOrder
    multimedia_name?: SortOrder
    multimedia_desc?: SortOrder
    multimedia_path?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_is_image?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrder
  }

  export type MultimediaMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_is_image?: SortOrder
    multimedia_name?: SortOrder
    multimedia_desc?: SortOrder
    multimedia_path?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_is_image?: SortOrder
    multimedia_name?: SortOrder
    multimedia_desc?: SortOrder
    multimedia_path?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type MultimediaSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    multimedia_is_image?: SortOrder
    multimedia_active?: SortOrder
    created_by?: SortOrder
  }

  export type Enumbook_typeFilter<$PrismaModel = never> = {
    equals?: $Enums.book_type | Enumbook_typeFieldRefInput<$PrismaModel>
    in?: $Enums.book_type[]
    notIn?: $Enums.book_type[]
    not?: NestedEnumbook_typeFilter<$PrismaModel> | $Enums.book_type
  }

  export type LibraryBookOrderByRelevanceInput = {
    fields: LibraryBookOrderByRelevanceFieldEnum | LibraryBookOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type LibraryBookCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    book_name?: SortOrder
    book_desc?: SortOrder
    book_author_name?: SortOrder
    book_cover?: SortOrder
    book_path?: SortOrder
    book_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryBookAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    created_by?: SortOrder
  }

  export type LibraryBookMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    book_name?: SortOrder
    book_desc?: SortOrder
    book_author_name?: SortOrder
    book_cover?: SortOrder
    book_path?: SortOrder
    book_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryBookMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    book_name?: SortOrder
    book_desc?: SortOrder
    book_author_name?: SortOrder
    book_cover?: SortOrder
    book_path?: SortOrder
    book_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryBookSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    created_by?: SortOrder
  }

  export type Enumbook_typeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.book_type | Enumbook_typeFieldRefInput<$PrismaModel>
    in?: $Enums.book_type[]
    notIn?: $Enums.book_type[]
    not?: NestedEnumbook_typeWithAggregatesFilter<$PrismaModel> | $Enums.book_type
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumbook_typeFilter<$PrismaModel>
    _max?: NestedEnumbook_typeFilter<$PrismaModel>
  }

  export type DecimalFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    in?: Decimal[] | DecimalJsLike[] | number[] | string[]
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[]
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string
  }

  export type IdCardOrderByRelevanceInput = {
    fields: IdCardOrderByRelevanceFieldEnum | IdCardOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type IdCardCountOrderByAggregateInput = {
    id?: SortOrder
    id_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type IdCardAvgOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type IdCardMaxOrderByAggregateInput = {
    id?: SortOrder
    id_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type IdCardMinOrderByAggregateInput = {
    id?: SortOrder
    id_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type IdCardSumOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type DecimalWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    in?: Decimal[] | DecimalJsLike[] | number[] | string[]
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[]
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedDecimalFilter<$PrismaModel>
    _sum?: NestedDecimalFilter<$PrismaModel>
    _min?: NestedDecimalFilter<$PrismaModel>
    _max?: NestedDecimalFilter<$PrismaModel>
  }

  export type LibraryCardOrderByRelevanceInput = {
    fields: LibraryCardOrderByRelevanceFieldEnum | LibraryCardOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type LibraryCardCountOrderByAggregateInput = {
    id?: SortOrder
    library_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryCardAvgOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type LibraryCardMaxOrderByAggregateInput = {
    id?: SortOrder
    library_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryCardMinOrderByAggregateInput = {
    id?: SortOrder
    library_card_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type LibraryCardSumOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type ResultSerialNumbersOrderByRelevanceInput = {
    fields: ResultSerialNumbersOrderByRelevanceFieldEnum | ResultSerialNumbersOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ResultSerialNumbersCountOrderByAggregateInput = {
    id?: SortOrder
    serial_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ResultSerialNumbersAvgOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type ResultSerialNumbersMaxOrderByAggregateInput = {
    id?: SortOrder
    serial_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ResultSerialNumbersMinOrderByAggregateInput = {
    id?: SortOrder
    serial_no?: SortOrder
    issued_on?: SortOrder
    expired_on?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_school_on?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_admin_on?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    acknowledged_from_superadmin_on?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ResultSerialNumbersSumOrderByAggregateInput = {
    id?: SortOrder
    fare_amont?: SortOrder
    acknowledged_from_school?: SortOrder
    acknowledged_from_school_by?: SortOrder
    acknowledged_from_admin?: SortOrder
    acknowledged_from_admin_by?: SortOrder
    acknowledged_from_superadmin?: SortOrder
    created_by?: SortOrder
  }

  export type BranchSessionNullableScalarRelationFilter = {
    is?: BranchSessionWhereInput | null
    isNot?: BranchSessionWhereInput | null
  }

  export type TermNullableScalarRelationFilter = {
    is?: TermWhereInput | null
    isNot?: TermWhereInput | null
  }

  export type SessionTermOrderByRelevanceInput = {
    fields: SessionTermOrderByRelevanceFieldEnum | SessionTermOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SessionTermSession_idTerm_idCompoundUniqueInput = {
    session_id: number
    term_id: number
  }

  export type SessionTermCountOrderByAggregateInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_name?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrder
    session_term_clone_details_from?: SortOrder
    session_term_clone_details_from_id?: SortOrder
    session_term_clone_classinstances?: SortOrder
    session_terms_clone_subjects?: SortOrder
    session_terms_clone_scoresetup?: SortOrder
    session_term_start?: SortOrder
    session_term_end?: SortOrder
    session_term_next_begin?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionTermAvgOrderByAggregateInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrder
    session_term_clone_details_from?: SortOrder
    session_term_clone_details_from_id?: SortOrder
    session_term_clone_classinstances?: SortOrder
    session_terms_clone_subjects?: SortOrder
    session_terms_clone_scoresetup?: SortOrder
    created_by?: SortOrder
  }

  export type SessionTermMaxOrderByAggregateInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_name?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrder
    session_term_clone_details_from?: SortOrder
    session_term_clone_details_from_id?: SortOrder
    session_term_clone_classinstances?: SortOrder
    session_terms_clone_subjects?: SortOrder
    session_terms_clone_scoresetup?: SortOrder
    session_term_start?: SortOrder
    session_term_end?: SortOrder
    session_term_next_begin?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionTermMinOrderByAggregateInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_name?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrder
    session_term_clone_details_from?: SortOrder
    session_term_clone_details_from_id?: SortOrder
    session_term_clone_classinstances?: SortOrder
    session_terms_clone_subjects?: SortOrder
    session_terms_clone_scoresetup?: SortOrder
    session_term_start?: SortOrder
    session_term_end?: SortOrder
    session_term_next_begin?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionTermSumOrderByAggregateInput = {
    id?: SortOrder
    session_id?: SortOrder
    term_id?: SortOrder
    session_term_visible?: SortOrder
    session_term_locked?: SortOrder
    session_term_current?: SortOrder
    session_term_clone_details?: SortOrder
    session_term_clone_details_from?: SortOrder
    session_term_clone_details_from_id?: SortOrder
    session_term_clone_classinstances?: SortOrder
    session_terms_clone_subjects?: SortOrder
    session_terms_clone_scoresetup?: SortOrder
    created_by?: SortOrder
  }

  export type UserLevelCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserLevelAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type UserLevelMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserLevelMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserLevelSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    level_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type UserTrackingCountOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingAvgOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type UserTrackingMaxOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingMinOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingSumOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type UserTrackingSubjectCountOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingSubjectAvgOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type UserTrackingSubjectMaxOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingSubjectMinOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserTrackingSubjectSumOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    subject_id?: SortOrder
    user_id?: SortOrder
    created_by?: SortOrder
  }

  export type AllUserOrderByRelevanceInput = {
    fields: AllUserOrderByRelevanceFieldEnum | AllUserOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type AllUserCountOrderByAggregateInput = {
    id?: SortOrder
    model?: SortOrder
    model_id?: SortOrder
  }

  export type AllUserAvgOrderByAggregateInput = {
    id?: SortOrder
    model_id?: SortOrder
  }

  export type AllUserMaxOrderByAggregateInput = {
    id?: SortOrder
    model?: SortOrder
    model_id?: SortOrder
  }

  export type AllUserMinOrderByAggregateInput = {
    id?: SortOrder
    model?: SortOrder
    model_id?: SortOrder
  }

  export type AllUserSumOrderByAggregateInput = {
    id?: SortOrder
    model_id?: SortOrder
  }

  export type Enumusers_staff_deptFilter<$PrismaModel = never> = {
    equals?: $Enums.users_staff_dept | Enumusers_staff_deptFieldRefInput<$PrismaModel>
    in?: $Enums.users_staff_dept[]
    notIn?: $Enums.users_staff_dept[]
    not?: NestedEnumusers_staff_deptFilter<$PrismaModel> | $Enums.users_staff_dept
  }

  export type UserCrudPermissionListRelationFilter = {
    every?: UserCrudPermissionWhereInput
    some?: UserCrudPermissionWhereInput
    none?: UserCrudPermissionWhereInput
  }

  export type UserPermissionListRelationFilter = {
    every?: UserPermissionWhereInput
    some?: UserPermissionWhereInput
    none?: UserPermissionWhereInput
  }

  export type SchoolNullableScalarRelationFilter = {
    is?: SchoolWhereInput | null
    isNot?: SchoolWhereInput | null
  }

  export type UserCrudPermissionOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type UserPermissionOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type UserOrderByRelevanceInput = {
    fields: UserOrderByRelevanceFieldEnum | UserOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type UserCountOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    user_country_id?: SortOrder
    user_state_id?: SortOrder
    user_city_id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    staff_dept?: SortOrder
    user_name?: SortOrder
    user_phone?: SortOrder
    user_sex?: SortOrder
    email?: SortOrder
    email_verified_at?: SortOrder
    user_address?: SortOrder
    qualification_id?: SortOrder
    user_proffession?: SortOrder
    profile_photo_path?: SortOrder
    date_of_birth?: SortOrder
    breif_bio?: SortOrder
    facebook_handle?: SortOrder
    twitter_handle?: SortOrder
    instagram_handle?: SortOrder
    username?: SortOrder
    password?: SortOrder
    remember_token?: SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    user_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserAvgOrderByAggregateInput = {
    id?: SortOrder
    user_country_id?: SortOrder
    user_state_id?: SortOrder
    user_city_id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    user_sex?: SortOrder
    qualification_id?: SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
  }

  export type UserMaxOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    user_country_id?: SortOrder
    user_state_id?: SortOrder
    user_city_id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    staff_dept?: SortOrder
    user_name?: SortOrder
    user_phone?: SortOrder
    user_sex?: SortOrder
    email?: SortOrder
    email_verified_at?: SortOrder
    user_address?: SortOrder
    qualification_id?: SortOrder
    user_proffession?: SortOrder
    profile_photo_path?: SortOrder
    date_of_birth?: SortOrder
    breif_bio?: SortOrder
    facebook_handle?: SortOrder
    twitter_handle?: SortOrder
    instagram_handle?: SortOrder
    username?: SortOrder
    password?: SortOrder
    remember_token?: SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    user_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserMinOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    user_country_id?: SortOrder
    user_state_id?: SortOrder
    user_city_id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    staff_dept?: SortOrder
    user_name?: SortOrder
    user_phone?: SortOrder
    user_sex?: SortOrder
    email?: SortOrder
    email_verified_at?: SortOrder
    user_address?: SortOrder
    qualification_id?: SortOrder
    user_proffession?: SortOrder
    profile_photo_path?: SortOrder
    date_of_birth?: SortOrder
    breif_bio?: SortOrder
    facebook_handle?: SortOrder
    twitter_handle?: SortOrder
    instagram_handle?: SortOrder
    username?: SortOrder
    password?: SortOrder
    remember_token?: SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    user_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type UserSumOrderByAggregateInput = {
    id?: SortOrder
    user_country_id?: SortOrder
    user_state_id?: SortOrder
    user_city_id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    user_sex?: SortOrder
    qualification_id?: SortOrder
    user_active?: SortOrder
    user_must_change_password?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
  }

  export type Enumusers_staff_deptWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.users_staff_dept | Enumusers_staff_deptFieldRefInput<$PrismaModel>
    in?: $Enums.users_staff_dept[]
    notIn?: $Enums.users_staff_dept[]
    not?: NestedEnumusers_staff_deptWithAggregatesFilter<$PrismaModel> | $Enums.users_staff_dept
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumusers_staff_deptFilter<$PrismaModel>
    _max?: NestedEnumusers_staff_deptFilter<$PrismaModel>
  }

  export type StudentTrackingListRelationFilter = {
    every?: StudentTrackingWhereInput
    some?: StudentTrackingWhereInput
    none?: StudentTrackingWhereInput
  }

  export type StudentTrackingOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type StudentOrderByRelevanceInput = {
    fields: StudentOrderByRelevanceFieldEnum | StudentOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type StudentCountOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    student_country_id?: SortOrder
    student_state_id?: SortOrder
    guardian_id?: SortOrder
    religion_id?: SortOrder
    first_name?: SortOrder
    middle_name?: SortOrder
    last_name?: SortOrder
    email?: SortOrder
    student_phone?: SortOrder
    student_address?: SortOrder
    student_sex?: SortOrder
    student_bio?: SortOrder
    profile_photo_path?: SortOrder
    username?: SortOrder
    password?: SortOrder
    student_active?: SortOrder
    student_blocked_reason?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    student_country_id?: SortOrder
    student_state_id?: SortOrder
    guardian_id?: SortOrder
    religion_id?: SortOrder
    student_sex?: SortOrder
    student_active?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
  }

  export type StudentMaxOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    student_country_id?: SortOrder
    student_state_id?: SortOrder
    guardian_id?: SortOrder
    religion_id?: SortOrder
    first_name?: SortOrder
    middle_name?: SortOrder
    last_name?: SortOrder
    email?: SortOrder
    student_phone?: SortOrder
    student_address?: SortOrder
    student_sex?: SortOrder
    student_bio?: SortOrder
    profile_photo_path?: SortOrder
    username?: SortOrder
    password?: SortOrder
    student_active?: SortOrder
    student_blocked_reason?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentMinOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    student_country_id?: SortOrder
    student_state_id?: SortOrder
    guardian_id?: SortOrder
    religion_id?: SortOrder
    first_name?: SortOrder
    middle_name?: SortOrder
    last_name?: SortOrder
    email?: SortOrder
    student_phone?: SortOrder
    student_address?: SortOrder
    student_sex?: SortOrder
    student_bio?: SortOrder
    profile_photo_path?: SortOrder
    username?: SortOrder
    password?: SortOrder
    student_active?: SortOrder
    student_blocked_reason?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    local_id?: SortOrder
    student_country_id?: SortOrder
    student_state_id?: SortOrder
    guardian_id?: SortOrder
    religion_id?: SortOrder
    student_sex?: SortOrder
    student_active?: SortOrder
    use_role?: SortOrder
    created_by?: SortOrder
  }

  export type GuardianOrderByRelevanceInput = {
    fields: GuardianOrderByRelevanceFieldEnum | GuardianOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type GuardianCountOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    surname?: SortOrder
    first_name?: SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    relation_how_related?: SortOrder
    guardian_proffession?: SortOrder
    phonenumber?: SortOrder
    email?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    password?: SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    guardian_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GuardianAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    created_by?: SortOrder
  }

  export type GuardianMaxOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    surname?: SortOrder
    first_name?: SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    relation_how_related?: SortOrder
    guardian_proffession?: SortOrder
    phonenumber?: SortOrder
    email?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    password?: SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    guardian_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GuardianMinOrderByAggregateInput = {
    id?: SortOrder
    uuid?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    surname?: SortOrder
    first_name?: SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    relation_how_related?: SortOrder
    guardian_proffession?: SortOrder
    phonenumber?: SortOrder
    email?: SortOrder
    role?: SortOrder
    user_type?: SortOrder
    password?: SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    guardian_blocked_reason?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GuardianSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    guardian_sex?: SortOrder
    is_married?: SortOrder
    marriage_disolved?: SortOrder
    is_parent?: SortOrder
    use_role?: SortOrder
    guardian_active?: SortOrder
    created_by?: SortOrder
  }

  export type StudentGuardianStudent_idGuardian_idCompoundUniqueInput = {
    student_id: number
    guardian_id: number
  }

  export type StudentGuardianCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type StudentGuardianAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type StudentGuardianMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type StudentGuardianMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type StudentGuardianSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    student_id?: SortOrder
    guardian_id?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleCrudPermissionListRelationFilter = {
    every?: RoleCrudPermissionWhereInput
    some?: RoleCrudPermissionWhereInput
    none?: RoleCrudPermissionWhereInput
  }

  export type RolePermissionListRelationFilter = {
    every?: RolePermissionWhereInput
    some?: RolePermissionWhereInput
    none?: RolePermissionWhereInput
  }

  export type RoleCrudPermissionOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type RolePermissionOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type PermissionOrderByRelevanceInput = {
    fields: PermissionOrderByRelevanceFieldEnum | PermissionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PermissionCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    is_crud?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type PermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    is_crud?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type PermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    is_crud?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type PermissionMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    is_crud?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type PermissionSumOrderByAggregateInput = {
    id?: SortOrder
    is_crud?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleScalarRelationFilter = {
    is?: RoleWhereInput
    isNot?: RoleWhereInput
  }

  export type PermissionScalarRelationFilter = {
    is?: PermissionWhereInput
    isNot?: PermissionWhereInput
  }

  export type RoleCrudPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleCrudPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleCrudPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleCrudPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleCrudPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxCrudPermissionsCountOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxCrudPermissionsAvgOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxCrudPermissionsMaxOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxCrudPermissionsMinOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxCrudPermissionsSumOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RolePermissionRole_idPermission_idCompoundUniqueInput = {
    role_id: number
    permission_id: number
  }

  export type RolePermissionCountOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RolePermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RolePermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RolePermissionMinOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RolePermissionSumOrderByAggregateInput = {
    id?: SortOrder
    role_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleOrderByRelevanceInput = {
    fields: RoleOrderByRelevanceFieldEnum | RoleOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type RoleCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    display_name?: SortOrder
    description?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type RoleSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserNullableScalarRelationFilter = {
    is?: UserWhereInput | null
    isNot?: UserWhereInput | null
  }

  export type UserCrudPermissionOrderByRelevanceInput = {
    fields: UserCrudPermissionOrderByRelevanceFieldEnum | UserCrudPermissionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type UserCrudPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserCrudPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserCrudPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserCrudPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserCrudPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UserPermissionOrderByRelevanceInput = {
    fields: UserPermissionOrderByRelevanceFieldEnum | UserPermissionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type UserPermissionUser_idPermission_idUser_typeCompoundUniqueInput = {
    user_id: number
    permission_id: number
    user_type: string
  }

  export type UserPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
    userId?: SortOrder
  }

  export type UserPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
    userId?: SortOrder
  }

  export type UserPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
    userId?: SortOrder
  }

  export type UserPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
    userId?: SortOrder
  }

  export type UserPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    user_id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
    userId?: SortOrder
  }

  export type UsertypeMaxCrudPermissionOrderByRelevanceInput = {
    fields: UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum | UsertypeMaxCrudPermissionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type UsertypeMaxCrudPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxCrudPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxCrudPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxCrudPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxCrudPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    permission_id?: SortOrder
    permission_menu?: SortOrder
    permission_create?: SortOrder
    permission_read?: SortOrder
    permission_update?: SortOrder
    permission_delete?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxPermissionOrderByRelevanceInput = {
    fields: UsertypeMaxPermissionOrderByRelevanceFieldEnum | UsertypeMaxPermissionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type UsertypeMaxPermissionCountOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxPermissionAvgOrderByAggregateInput = {
    id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxPermissionMaxOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxPermissionMinOrderByAggregateInput = {
    id?: SortOrder
    user_type?: SortOrder
    permission_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type UsertypeMaxPermissionSumOrderByAggregateInput = {
    id?: SortOrder
    permission_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type QualificationOrderByRelevanceInput = {
    fields: QualificationOrderByRelevanceFieldEnum | QualificationOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type QualificationCountOrderByAggregateInput = {
    id?: SortOrder
    qualification_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QualificationAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type QualificationMaxOrderByAggregateInput = {
    id?: SortOrder
    qualification_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QualificationMinOrderByAggregateInput = {
    id?: SortOrder
    qualification_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QualificationSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type GenderOrderByRelevanceInput = {
    fields: GenderOrderByRelevanceFieldEnum | GenderOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type GenderCountOrderByAggregateInput = {
    id?: SortOrder
    gender_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GenderAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type GenderMaxOrderByAggregateInput = {
    id?: SortOrder
    gender_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GenderMinOrderByAggregateInput = {
    id?: SortOrder
    gender_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type GenderSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type TermOrderByRelevanceInput = {
    fields: TermOrderByRelevanceFieldEnum | TermOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type TermCountOrderByAggregateInput = {
    id?: SortOrder
    term_name?: SortOrder
    term_alias?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type TermAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type TermMaxOrderByAggregateInput = {
    id?: SortOrder
    term_name?: SortOrder
    term_alias?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type TermMinOrderByAggregateInput = {
    id?: SortOrder
    term_name?: SortOrder
    term_alias?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type TermSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ReligionOrderByRelevanceInput = {
    fields: ReligionOrderByRelevanceFieldEnum | ReligionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ReligionCountOrderByAggregateInput = {
    id?: SortOrder
    religion_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReligionAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ReligionMaxOrderByAggregateInput = {
    id?: SortOrder
    religion_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReligionMinOrderByAggregateInput = {
    id?: SortOrder
    religion_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReligionSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ComplainFromTeacherOrderByRelevanceInput = {
    fields: ComplainFromTeacherOrderByRelevanceFieldEnum | ComplainFromTeacherOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ComplainFromTeacherCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    complain?: SortOrder
    is_urgent?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ComplainFromTeacherAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    is_urgent?: SortOrder
    created_by?: SortOrder
  }

  export type ComplainFromTeacherMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    complain?: SortOrder
    is_urgent?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ComplainFromTeacherMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    complain?: SortOrder
    is_urgent?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ComplainFromTeacherSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    is_urgent?: SortOrder
    created_by?: SortOrder
  }

  export type AttendanceCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    staff_id?: SortOrder
    attendance_date?: SortOrder
    status?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type AttendanceAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    staff_id?: SortOrder
    status?: SortOrder
    created_by?: SortOrder
  }

  export type AttendanceMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    staff_id?: SortOrder
    attendance_date?: SortOrder
    status?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type AttendanceMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    staff_id?: SortOrder
    attendance_date?: SortOrder
    status?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type AttendanceSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    student_id?: SortOrder
    staff_id?: SortOrder
    status?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolNoteOrderByRelevanceInput = {
    fields: SchoolNoteOrderByRelevanceFieldEnum | SchoolNoteOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SchoolNoteCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    topic?: SortOrder
    topic_desc?: SortOrder
    students_question_to_answer?: SortOrder
    note?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolNoteAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolNoteMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    topic?: SortOrder
    topic_desc?: SortOrder
    note?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolNoteMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    topic?: SortOrder
    topic_desc?: SortOrder
    note?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SchoolNoteSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    branch_id?: SortOrder
    class_template_id?: SortOrder
    school_subject_id?: SortOrder
    term_id?: SortOrder
    week?: SortOrder
    order?: SortOrder
    created_by?: SortOrder
  }

  export type DecimalNullableFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null
    in?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalNullableFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null
  }

  export type FeeOrderByRelevanceInput = {
    fields: FeeOrderByRelevanceFieldEnum | FeeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type FeeCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    fee_name?: SortOrder
    price_template?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type FeeAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    price_template?: SortOrder
    created_by?: SortOrder
  }

  export type FeeMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    fee_name?: SortOrder
    price_template?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type FeeMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    fee_name?: SortOrder
    price_template?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type FeeSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    price_template?: SortOrder
    created_by?: SortOrder
  }

  export type DecimalNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null
    in?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalNullableWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedDecimalNullableFilter<$PrismaModel>
    _sum?: NestedDecimalNullableFilter<$PrismaModel>
    _min?: NestedDecimalNullableFilter<$PrismaModel>
    _max?: NestedDecimalNullableFilter<$PrismaModel>
  }

  export type PaymentTypeOrderByRelevanceInput = {
    fields: PaymentTypeOrderByRelevanceFieldEnum | PaymentTypeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentTypeCountOrderByAggregateInput = {
    id?: SortOrder
    payment_type_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentTypeAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentTypeMaxOrderByAggregateInput = {
    id?: SortOrder
    payment_type_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentTypeMinOrderByAggregateInput = {
    id?: SortOrder
    payment_type_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentTypeSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentDurationOrderByRelevanceInput = {
    fields: PaymentDurationOrderByRelevanceFieldEnum | PaymentDurationOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentDurationCountOrderByAggregateInput = {
    id?: SortOrder
    duration?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentDurationAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentDurationMaxOrderByAggregateInput = {
    id?: SortOrder
    duration?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentDurationMinOrderByAggregateInput = {
    id?: SortOrder
    duration?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentDurationSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentOrderByRelevanceInput = {
    fields: PaymentOrderByRelevanceFieldEnum | PaymentOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    who_would_pay?: SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrder
    start_date?: SortOrder
    end_date?: SortOrder
    due_date?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    who_would_pay?: SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrder
    start_date?: SortOrder
    end_date?: SortOrder
    due_date?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    who_would_pay?: SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrder
    start_date?: SortOrder
    end_date?: SortOrder
    due_date?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    fee_id?: SortOrder
    payment_duration_id?: SortOrder
    payment_amount?: SortOrder
    is_compulsory?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentMadeOrderByRelevanceInput = {
    fields: PaymentMadeOrderByRelevanceFieldEnum | PaymentMadeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentMadeCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentMadeAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_paid?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentMadeMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentMadeMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentMadeSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_paid?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentPartMadeOrderByRelevanceInput = {
    fields: PaymentPartMadeOrderByRelevanceFieldEnum | PaymentPartMadeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentPartMadeCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_part_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentPartMadeAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_part_paid?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentPartMadeMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_part_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentPartMadeMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    payer_phonenumber?: SortOrder
    payer_name?: SortOrder
    amount_part_paid?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentPartMadeSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_part_paid?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentAttemptOrderByRelevanceInput = {
    fields: PaymentAttemptOrderByRelevanceFieldEnum | PaymentAttemptOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type PaymentAttemptCountOrderByAggregateInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    ref_code?: SortOrder
    access_code?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    amount_paid?: SortOrder
    is_successful?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentAttemptAvgOrderByAggregateInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_paid?: SortOrder
    is_successful?: SortOrder
    created_by?: SortOrder
  }

  export type PaymentAttemptMaxOrderByAggregateInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    ref_code?: SortOrder
    access_code?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    amount_paid?: SortOrder
    is_successful?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentAttemptMinOrderByAggregateInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    ref_code?: SortOrder
    access_code?: SortOrder
    payer_id?: SortOrder
    payer_model?: SortOrder
    amount_paid?: SortOrder
    is_successful?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type PaymentAttemptSumOrderByAggregateInput = {
    id?: SortOrder
    payment_id?: SortOrder
    student_id?: SortOrder
    payer_id?: SortOrder
    amount_paid?: SortOrder
    is_successful?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolSubjectScalarRelationFilter = {
    is?: SchoolSubjectWhereInput
    isNot?: SchoolSubjectWhereInput
  }

  export type ClassSubjectTemplateClass_idSpecialization_idSubject_idCompoundUniqueInput = {
    class_id: number
    specialization_id: number
    subject_id: number
  }

  export type ClassSubjectTemplateCountOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSubjectTemplateAvgOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
  }

  export type ClassSubjectTemplateMaxOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSubjectTemplateMinOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSubjectTemplateSumOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
  }

  export type ClassTemplateNullableScalarRelationFilter = {
    is?: ClassTemplateWhereInput | null
    isNot?: ClassTemplateWhereInput | null
  }

  export type SessionTermNullableScalarRelationFilter = {
    is?: SessionTermWhereInput | null
    isNot?: SessionTermWhereInput | null
  }

  export type SessionClassOrderByRelevanceInput = {
    fields: SessionClassOrderByRelevanceFieldEnum | SessionClassOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SessionClassSession_term_idClass_idCompoundUniqueInput = {
    session_term_id: number
    class_id: number
  }

  export type SessionClassCountOrderByAggregateInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    session_class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassAvgOrderByAggregateInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassMaxOrderByAggregateInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    session_class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassMinOrderByAggregateInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    session_class_name?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassSumOrderByAggregateInput = {
    id?: SortOrder
    session_term_id?: SortOrder
    class_id?: SortOrder
    no_of_group?: SortOrder
    has_multiple_teacher?: SortOrder
    has_specialization?: SortOrder
    has_optionals_subject?: SortOrder
    main_treachear?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassSubjectSession_class_idSpecialization_idSubject_idCompoundUniqueInput = {
    session_class_id: number
    specialization_id: number
    subject_id: number
  }

  export type SessionClassSubjectCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassSubjectAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassSubjectMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassSubjectMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassSubjectSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    subject_id?: SortOrder
    is_compulsory?: SortOrder
    include_in_result?: SortOrder
    include_in_calculation?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassStudentSubjectSession_class_idSubject_idStudent_idCompoundUniqueInput = {
    session_class_id: number
    subject_id: number
    student_id: number
  }

  export type SessionClassStudentSubjectCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassStudentSubjectAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassStudentSubjectMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassStudentSubjectMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassStudentSubjectSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
  }

  export type ClassSpecializationOrderByRelevanceInput = {
    fields: ClassSpecializationOrderByRelevanceFieldEnum | ClassSpecializationOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ClassSpecializationCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    specialization_name?: SortOrder
    branch_config?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSpecializationAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    created_by?: SortOrder
  }

  export type ClassSpecializationMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    specialization_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSpecializationMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    specialization_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassSpecializationSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    created_by?: SortOrder
  }

  export type ClassGroupOrderByRelevanceInput = {
    fields: ClassGroupOrderByRelevanceFieldEnum | ClassGroupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ClassGroupCountOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    group_name?: SortOrder
    branch_config?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassGroupAvgOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    created_by?: SortOrder
  }

  export type ClassGroupMaxOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    group_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassGroupMinOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    group_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassGroupSumOrderByAggregateInput = {
    id?: SortOrder
    school_id?: SortOrder
    created_by?: SortOrder
  }

  export type ScoreTypeOrderByRelevanceInput = {
    fields: ScoreTypeOrderByRelevanceFieldEnum | ScoreTypeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ScoreTypeCountOrderByAggregateInput = {
    id?: SortOrder
    score_type?: SortOrder
    branch_config?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreTypeAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ScoreTypeMaxOrderByAggregateInput = {
    id?: SortOrder
    score_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreTypeMinOrderByAggregateInput = {
    id?: SortOrder
    score_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreTypeSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ScoreDisplayTypeOrderByRelevanceInput = {
    fields: ScoreDisplayTypeOrderByRelevanceFieldEnum | ScoreDisplayTypeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ScoreDisplayTypeCountOrderByAggregateInput = {
    id?: SortOrder
    display_type?: SortOrder
    branch_config?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreDisplayTypeAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ScoreDisplayTypeMaxOrderByAggregateInput = {
    id?: SortOrder
    display_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreDisplayTypeMinOrderByAggregateInput = {
    id?: SortOrder
    display_type?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ScoreDisplayTypeSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type StudentScoreCountOrderByAggregateInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentScoreAvgOrderByAggregateInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrder
  }

  export type StudentScoreMaxOrderByAggregateInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentScoreMinOrderByAggregateInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentScoreSumOrderByAggregateInput = {
    id?: SortOrder
    score_setup_id?: SortOrder
    subject_id?: SortOrder
    student_id?: SortOrder
    score?: SortOrder
    created_by?: SortOrder
  }

  export type StudentTotalScoreOrderByRelevanceInput = {
    fields: StudentTotalScoreOrderByRelevanceFieldEnum | StudentTotalScoreOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type StudentTotalScoreCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    teachers_comment?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTotalScoreAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    created_by?: SortOrder
  }

  export type StudentTotalScoreMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    teachers_comment?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTotalScoreMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    teachers_comment?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTotalScoreSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    totalscore?: SortOrder
    no_of_subject?: SortOrder
    group_position?: SortOrder
    created_by?: SortOrder
  }

  export type StudentScalarRelationFilter = {
    is?: StudentWhereInput
    isNot?: StudentWhereInput
  }

  export type StudentTrackingSession_class_idStudent_idCompoundUniqueInput = {
    session_class_id: number
    student_id: number
  }

  export type StudentTrackingCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTrackingAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
  }

  export type StudentTrackingMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTrackingMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type StudentTrackingSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    student_id?: SortOrder
    created_by?: SortOrder
  }

  export type ReportCardSettingSession_class_idSpecialization_idGroup_idCompoundUniqueInput = {
    session_class_id: number
    specialization_id: number
    group_id: number
  }

  export type ReportCardSettingCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReportCardSettingAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrder
  }

  export type ReportCardSettingMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReportCardSettingMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ReportCardSettingSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    is_report_generated?: SortOrder
    display_student_position?: SortOrder
    show_previous_terms?: SortOrder
    accumulate_with_previous?: SortOrder
    display_attendance_in_report?: SortOrder
    created_by?: SortOrder
  }

  export type ClassScoreSetupTemplateOrderByRelevanceInput = {
    fields: ClassScoreSetupTemplateOrderByRelevanceFieldEnum | ClassScoreSetupTemplateOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ClassScoreSetupTemplateCountOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassScoreSetupTemplateAvgOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
  }

  export type ClassScoreSetupTemplateMaxOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassScoreSetupTemplateMinOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ClassScoreSetupTemplateSumOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
  }

  export type ExamScoreSetupLinkListRelationFilter = {
    every?: ExamScoreSetupLinkWhereInput
    some?: ExamScoreSetupLinkWhereInput
    none?: ExamScoreSetupLinkWhereInput
  }

  export type ExamScoreSetupLinkOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type SessionClassScoreSetupOrderByRelevanceInput = {
    fields: SessionClassScoreSetupOrderByRelevanceFieldEnum | SessionClassScoreSetupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SessionClassScoreSetupCountOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassScoreSetupAvgOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
  }

  export type SessionClassScoreSetupMaxOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassScoreSetupMinOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    display_name?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type SessionClassScoreSetupSumOrderByAggregateInput = {
    id?: SortOrder
    session_class_id?: SortOrder
    specialization_id?: SortOrder
    group_id?: SortOrder
    score_type_id?: SortOrder
    display_type?: SortOrder
    max_score?: SortOrder
    created_by?: SortOrder
  }

  export type ExamTypeOrderByRelevanceInput = {
    fields: ExamTypeOrderByRelevanceFieldEnum | ExamTypeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamTypeCountOrderByAggregateInput = {
    id?: SortOrder
    exam_type_name?: SortOrder
    exam_type_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamTypeAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_type_active?: SortOrder
    created_by?: SortOrder
  }

  export type ExamTypeMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_type_name?: SortOrder
    exam_type_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamTypeMinOrderByAggregateInput = {
    id?: SortOrder
    exam_type_name?: SortOrder
    exam_type_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamTypeSumOrderByAggregateInput = {
    id?: SortOrder
    exam_type_active?: SortOrder
    created_by?: SortOrder
  }

  export type ExamCategoryOrderByRelevanceInput = {
    fields: ExamCategoryOrderByRelevanceFieldEnum | ExamCategoryOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamCategoryCountOrderByAggregateInput = {
    id?: SortOrder
    exam_category_name?: SortOrder
    exam_category_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamCategoryAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_category_active?: SortOrder
    created_by?: SortOrder
  }

  export type ExamCategoryMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_category_name?: SortOrder
    exam_category_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamCategoryMinOrderByAggregateInput = {
    id?: SortOrder
    exam_category_name?: SortOrder
    exam_category_active?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamCategorySumOrderByAggregateInput = {
    id?: SortOrder
    exam_category_active?: SortOrder
    created_by?: SortOrder
  }

  export type ExamQuestionMarkerOrderByRelevanceInput = {
    fields: ExamQuestionMarkerOrderByRelevanceFieldEnum | ExamQuestionMarkerOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamQuestionMarkerCountOrderByAggregateInput = {
    id?: SortOrder
    question_marker_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionMarkerAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ExamQuestionMarkerMaxOrderByAggregateInput = {
    id?: SortOrder
    question_marker_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionMarkerMinOrderByAggregateInput = {
    id?: SortOrder
    question_marker_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionMarkerSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type QuestionTemplateOrderByRelevanceInput = {
    fields: QuestionTemplateOrderByRelevanceFieldEnum | QuestionTemplateOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type QuestionTemplateCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    tag?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionTemplateAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    created_by?: SortOrder
  }

  export type QuestionTemplateMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionTemplateMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionTemplateSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    created_by?: SortOrder
  }

  export type QuestionOrderByRelevanceInput = {
    fields: QuestionOrderByRelevanceFieldEnum | QuestionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type QuestionCountOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    tag?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionAvgOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    created_by?: SortOrder
  }

  export type QuestionMaxOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionMinOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    image_path?: SortOrder
    option_a?: SortOrder
    option_b?: SortOrder
    option_c?: SortOrder
    option_d?: SortOrder
    option_answer?: SortOrder
    theory_answer?: SortOrder
    difficulty_level?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type QuestionSumOrderByAggregateInput = {
    id?: SortOrder
    branch_id?: SortOrder
    class_id?: SortOrder
    subject_id?: SortOrder
    question_marker?: SortOrder
    is_objective?: SortOrder
    is_boolean_question?: SortOrder
    max_time?: SortOrder
    created_by?: SortOrder
  }

  export type ExamVisibilityOrderByRelevanceInput = {
    fields: ExamVisibilityOrderByRelevanceFieldEnum | ExamVisibilityOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamVisibilityCountOrderByAggregateInput = {
    id?: SortOrder
    exam_visibility_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamVisibilityAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type ExamVisibilityMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_visibility_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamVisibilityMinOrderByAggregateInput = {
    id?: SortOrder
    exam_visibility_name?: SortOrder
    desc?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamVisibilitySumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolSubjectNullableScalarRelationFilter = {
    is?: SchoolSubjectWhereInput | null
    isNot?: SchoolSubjectWhereInput | null
  }

  export type ExamTypeNullableScalarRelationFilter = {
    is?: ExamTypeWhereInput | null
    isNot?: ExamTypeWhereInput | null
  }

  export type ExamCategoryNullableScalarRelationFilter = {
    is?: ExamCategoryWhereInput | null
    isNot?: ExamCategoryWhereInput | null
  }

  export type ExamOrderByRelevanceInput = {
    fields: ExamOrderByRelevanceFieldEnum | ExamOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamCountOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    term_id?: SortOrder
    subject_id?: SortOrder
    desc?: SortOrder
    exam_date?: SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrder
    exam_objective_max_score?: SortOrder
    exam_theory_max_score?: SortOrder
    objective_max_no_of_question?: SortOrder
    theory_max_no_of_question?: SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamAvgOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    term_id?: SortOrder
    subject_id?: SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrder
    exam_objective_max_score?: SortOrder
    exam_theory_max_score?: SortOrder
    objective_max_no_of_question?: SortOrder
    theory_max_no_of_question?: SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrder
    created_by?: SortOrder
  }

  export type ExamMaxOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    term_id?: SortOrder
    subject_id?: SortOrder
    desc?: SortOrder
    exam_date?: SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrder
    exam_objective_max_score?: SortOrder
    exam_theory_max_score?: SortOrder
    objective_max_no_of_question?: SortOrder
    theory_max_no_of_question?: SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamMinOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    term_id?: SortOrder
    subject_id?: SortOrder
    desc?: SortOrder
    exam_date?: SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrder
    exam_objective_max_score?: SortOrder
    exam_theory_max_score?: SortOrder
    objective_max_no_of_question?: SortOrder
    theory_max_no_of_question?: SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamSumOrderByAggregateInput = {
    id?: SortOrder
    class_id?: SortOrder
    term_id?: SortOrder
    subject_id?: SortOrder
    exam_type?: SortOrder
    exam_category?: SortOrder
    exam_visibility?: SortOrder
    max_time_allowed?: SortOrder
    no_of_life?: SortOrder
    exam_objective_max_score?: SortOrder
    exam_theory_max_score?: SortOrder
    objective_max_no_of_question?: SortOrder
    theory_max_no_of_question?: SortOrder
    exam_enabled?: SortOrder
    allow_assessment_only_at_specified_time?: SortOrder
    allow_submit_after_time_elapsed?: SortOrder
    is_practise_exam?: SortOrder
    exam_gift_id?: SortOrder
    created_by?: SortOrder
  }

  export type FloatFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatFilter<$PrismaModel> | number
  }

  export type ExamQuestionCountOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrder
  }

  export type ExamQuestionMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionMinOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionSumOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    score_attached?: SortOrder
    created_by?: SortOrder
  }

  export type FloatWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedFloatFilter<$PrismaModel>
    _min?: NestedFloatFilter<$PrismaModel>
    _max?: NestedFloatFilter<$PrismaModel>
  }

  export type ExamScalarRelationFilter = {
    is?: ExamWhereInput
    isNot?: ExamWhereInput
  }

  export type SessionClassScoreSetupScalarRelationFilter = {
    is?: SessionClassScoreSetupWhereInput
    isNot?: SessionClassScoreSetupWhereInput
  }

  export type ExamScoreSetupLinkExam_idScore_setup_idCompoundUniqueInput = {
    exam_id: number
    score_setup_id: number
  }

  export type ExamScoreSetupLinkCountOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamScoreSetupLinkAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrder
  }

  export type ExamScoreSetupLinkMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamScoreSetupLinkMinOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamScoreSetupLinkSumOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    score_setup_id?: SortOrder
    created_by?: SortOrder
  }

  export type FloatNullableFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableFilter<$PrismaModel> | number | null
  }

  export type ExamAttemptOrderByRelevanceInput = {
    fields: ExamAttemptOrderByRelevanceFieldEnum | ExamAttemptOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamAttemptCountOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    model_name?: SortOrder
    start_at?: SortOrder
    submitted_at?: SortOrder
    score_obtained?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamAttemptAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    score_obtained?: SortOrder
    created_by?: SortOrder
  }

  export type ExamAttemptMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    model_name?: SortOrder
    start_at?: SortOrder
    submitted_at?: SortOrder
    score_obtained?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamAttemptMinOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    model_name?: SortOrder
    start_at?: SortOrder
    submitted_at?: SortOrder
    score_obtained?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamAttemptSumOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    person_id?: SortOrder
    score_obtained?: SortOrder
    created_by?: SortOrder
  }

  export type FloatNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedFloatNullableFilter<$PrismaModel>
    _min?: NestedFloatNullableFilter<$PrismaModel>
    _max?: NestedFloatNullableFilter<$PrismaModel>
  }

  export type ExamQuestionAnswerOrderByRelevanceInput = {
    fields: ExamQuestionAnswerOrderByRelevanceFieldEnum | ExamQuestionAnswerOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ExamQuestionAnswerCountOrderByAggregateInput = {
    id?: SortOrder
    attempt_id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    model_name?: SortOrder
    person_id?: SortOrder
    user_objective_answer?: SortOrder
    user_theory_answer?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionAnswerAvgOrderByAggregateInput = {
    id?: SortOrder
    attempt_id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    person_id?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrder
    created_by?: SortOrder
  }

  export type ExamQuestionAnswerMaxOrderByAggregateInput = {
    id?: SortOrder
    attempt_id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    model_name?: SortOrder
    person_id?: SortOrder
    user_objective_answer?: SortOrder
    user_theory_answer?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionAnswerMinOrderByAggregateInput = {
    id?: SortOrder
    attempt_id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    model_name?: SortOrder
    person_id?: SortOrder
    user_objective_answer?: SortOrder
    user_theory_answer?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamQuestionAnswerSumOrderByAggregateInput = {
    id?: SortOrder
    attempt_id?: SortOrder
    exam_id?: SortOrder
    question_id?: SortOrder
    person_id?: SortOrder
    score_obtained?: SortOrder
    marked_by?: SortOrder
    time_taken?: SortOrder
    created_by?: SortOrder
  }

  export type ExamGiftCountOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamGiftAvgOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrder
  }

  export type ExamGiftMaxOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamGiftMinOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
  }

  export type ExamGiftSumOrderByAggregateInput = {
    id?: SortOrder
    exam_id?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolRecordOrderByRelevanceInput = {
    fields: SchoolRecordOrderByRelevanceFieldEnum | SchoolRecordOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SchoolRecordCountOrderByAggregateInput = {
    id?: SortOrder
    school_name?: SortOrder
    school_code?: SortOrder
    school_databasename?: SortOrder
    school_active?: SortOrder
    school_approved?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
  }

  export type SchoolRecordAvgOrderByAggregateInput = {
    id?: SortOrder
    school_code?: SortOrder
    school_active?: SortOrder
    school_approved?: SortOrder
    created_by?: SortOrder
  }

  export type SchoolRecordMaxOrderByAggregateInput = {
    id?: SortOrder
    school_name?: SortOrder
    school_code?: SortOrder
    school_databasename?: SortOrder
    school_active?: SortOrder
    school_approved?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
  }

  export type SchoolRecordMinOrderByAggregateInput = {
    id?: SortOrder
    school_name?: SortOrder
    school_code?: SortOrder
    school_databasename?: SortOrder
    school_active?: SortOrder
    school_approved?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
  }

  export type SchoolRecordSumOrderByAggregateInput = {
    id?: SortOrder
    school_code?: SortOrder
    school_active?: SortOrder
    school_approved?: SortOrder
    created_by?: SortOrder
  }

  export type ComponentGroupOrderByRelevanceInput = {
    fields: ComponentGroupOrderByRelevanceFieldEnum | ComponentGroupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ComponentGroupCountOrderByAggregateInput = {
    id?: SortOrder
    component_group_name?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentGroupAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentGroupMaxOrderByAggregateInput = {
    id?: SortOrder
    component_group_name?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentGroupMinOrderByAggregateInput = {
    id?: SortOrder
    component_group_name?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentGroupSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentOrderByRelevanceInput = {
    fields: ComponentOrderByRelevanceFieldEnum | ComponentOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type ComponentCountOrderByAggregateInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    component_name?: SortOrder
    component_displayname?: SortOrder
    component_desc?: SortOrder
    component_image_url?: SortOrder
    component_file_name?: SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentAvgOrderByAggregateInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentMaxOrderByAggregateInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    component_name?: SortOrder
    component_displayname?: SortOrder
    component_desc?: SortOrder
    component_image_url?: SortOrder
    component_file_name?: SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentMinOrderByAggregateInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    component_name?: SortOrder
    component_displayname?: SortOrder
    component_desc?: SortOrder
    component_image_url?: SortOrder
    component_file_name?: SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type ComponentSumOrderByAggregateInput = {
    id?: SortOrder
    component_group_id?: SortOrder
    is_native?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }
  export type JsonFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonFilterBase<$PrismaModel>>, 'path'>>

  export type JsonFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type CrudPageOrderByRelevanceInput = {
    fields: CrudPageOrderByRelevanceFieldEnum | CrudPageOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type CrudPageCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudPageAvgOrderByAggregateInput = {
    id?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudPageMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudPageMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    is_enabled?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudPageSumOrderByAggregateInput = {
    id?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }
  export type JsonWithAggregatesFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<JsonWithAggregatesFilterBase<$PrismaModel>>, Exclude<keyof Required<JsonWithAggregatesFilterBase<$PrismaModel>>, 'path'>>,
        Required<JsonWithAggregatesFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<JsonWithAggregatesFilterBase<$PrismaModel>>, 'path'>>

  export type JsonWithAggregatesFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedJsonFilter<$PrismaModel>
    _max?: NestedJsonFilter<$PrismaModel>
  }

  export type AppUserTypeOrderByRelevanceInput = {
    fields: AppUserTypeOrderByRelevanceFieldEnum | AppUserTypeOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type AppUserTypeCountOrderByAggregateInput = {
    id?: SortOrder
    app_user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type AppUserTypeAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type AppUserTypeMaxOrderByAggregateInput = {
    id?: SortOrder
    app_user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type AppUserTypeMinOrderByAggregateInput = {
    id?: SortOrder
    app_user_type?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type AppUserTypeSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type MenuGroupOrderByRelevanceInput = {
    fields: MenuGroupOrderByRelevanceFieldEnum | MenuGroupOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type MenuGroupCountOrderByAggregateInput = {
    id?: SortOrder
    menu_group_name?: SortOrder
    menu_group_sort?: SortOrder
    menu_group_icon?: SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type MenuGroupAvgOrderByAggregateInput = {
    id?: SortOrder
    menu_group_sort?: SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type MenuGroupMaxOrderByAggregateInput = {
    id?: SortOrder
    menu_group_name?: SortOrder
    menu_group_sort?: SortOrder
    menu_group_icon?: SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type MenuGroupMinOrderByAggregateInput = {
    id?: SortOrder
    menu_group_name?: SortOrder
    menu_group_sort?: SortOrder
    menu_group_icon?: SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrder
    created_at?: SortOrder
    created_by?: SortOrder
    updated_at?: SortOrder
    updated_by?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type MenuGroupSumOrderByAggregateInput = {
    id?: SortOrder
    menu_group_sort?: SortOrder
    menu_active?: SortOrder
    is_root?: SortOrder
    parent_group_id?: SortOrder
    created_by?: SortOrder
    updated_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type SystemConfigurationOrderByRelevanceInput = {
    fields: SystemConfigurationOrderByRelevanceFieldEnum | SystemConfigurationOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SystemConfigurationCountOrderByAggregateInput = {
    id?: SortOrder
    configuration_name?: SortOrder
    configurations?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type SystemConfigurationAvgOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type SystemConfigurationMaxOrderByAggregateInput = {
    id?: SortOrder
    configuration_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type SystemConfigurationMinOrderByAggregateInput = {
    id?: SortOrder
    configuration_name?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type SystemConfigurationSumOrderByAggregateInput = {
    id?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudFrontOrderByRelevanceInput = {
    fields: CrudFrontOrderByRelevanceFieldEnum | CrudFrontOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type CrudFrontCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    permission_name?: SortOrder
    handler_name?: SortOrder
    post_route?: SortOrder
    read_route?: SortOrder
    update_route?: SortOrder
    delete_route?: SortOrder
    schema?: SortOrder
    is_enabled?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudFrontAvgOrderByAggregateInput = {
    id?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudFrontMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    permission_name?: SortOrder
    handler_name?: SortOrder
    post_route?: SortOrder
    read_route?: SortOrder
    update_route?: SortOrder
    delete_route?: SortOrder
    is_enabled?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudFrontMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    permission_name?: SortOrder
    handler_name?: SortOrder
    post_route?: SortOrder
    read_route?: SortOrder
    update_route?: SortOrder
    delete_route?: SortOrder
    is_enabled?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudFrontSumOrderByAggregateInput = {
    id?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudUtilOrderByRelevanceInput = {
    fields: CrudUtilOrderByRelevanceFieldEnum | CrudUtilOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type CrudUtilCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    permission_name?: SortOrder
    menu_sort?: SortOrder
    log_update?: SortOrder
    primary_key?: SortOrder
    show_field?: SortOrder
    paginate_fetch?: SortOrder
    permission_for_all?: SortOrder
    should_backup?: SortOrder
    table_name?: SortOrder
    model_name?: SortOrder
    schema?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    fetch_all_path?: SortOrder
    fetch_path?: SortOrder
    create_path?: SortOrder
    update_path?: SortOrder
    delete_path?: SortOrder
    query_parameter?: SortOrder
    custom_form_name?: SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    front_validations?: SortOrder
    table_columns?: SortOrder
    backend_validations?: SortOrder
    relationships?: SortOrder
    filters?: SortOrder
    filters_internal?: SortOrder
    hooks?: SortOrder
    children?: SortOrder
    info_messages?: SortOrder
    config?: SortOrder
    buttons?: SortOrder
    others?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudUtilAvgOrderByAggregateInput = {
    id?: SortOrder
    log_update?: SortOrder
    paginate_fetch?: SortOrder
    should_backup?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudUtilMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    permission_name?: SortOrder
    menu_sort?: SortOrder
    log_update?: SortOrder
    primary_key?: SortOrder
    show_field?: SortOrder
    paginate_fetch?: SortOrder
    permission_for_all?: SortOrder
    should_backup?: SortOrder
    table_name?: SortOrder
    model_name?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    fetch_all_path?: SortOrder
    fetch_path?: SortOrder
    create_path?: SortOrder
    update_path?: SortOrder
    delete_path?: SortOrder
    query_parameter?: SortOrder
    custom_form_name?: SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudUtilMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    menu_name?: SortOrder
    menu_icon?: SortOrder
    menu_group?: SortOrder
    permission_name?: SortOrder
    menu_sort?: SortOrder
    log_update?: SortOrder
    primary_key?: SortOrder
    show_field?: SortOrder
    paginate_fetch?: SortOrder
    permission_for_all?: SortOrder
    should_backup?: SortOrder
    table_name?: SortOrder
    model_name?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    fetch_all_path?: SortOrder
    fetch_path?: SortOrder
    create_path?: SortOrder
    update_path?: SortOrder
    delete_path?: SortOrder
    query_parameter?: SortOrder
    custom_form_name?: SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
    updated_at?: SortOrder
    deleted_at?: SortOrder
    deleted_by?: SortOrder
  }

  export type CrudUtilSumOrderByAggregateInput = {
    id?: SortOrder
    log_update?: SortOrder
    paginate_fetch?: SortOrder
    should_backup?: SortOrder
    fetch_all_manually?: SortOrder
    fetch_manually?: SortOrder
    create_manually?: SortOrder
    update_manually?: SortOrder
    delete_manually?: SortOrder
    use_modal?: SortOrder
    use_custom_form?: SortOrder
    is_fetch_all_public?: SortOrder
    is_fetch_public?: SortOrder
    is_create_public?: SortOrder
    is_update_public?: SortOrder
    is_delete_public?: SortOrder
    block_fetch_all?: SortOrder
    block_fetch?: SortOrder
    block_create?: SortOrder
    block_update?: SortOrder
    block_delete?: SortOrder
    is_enabled?: SortOrder
    created_by?: SortOrder
    deleted_by?: SortOrder
  }

  export type CountryListRelationFilter = {
    every?: CountryWhereInput
    some?: CountryWhereInput
    none?: CountryWhereInput
  }

  export type SubregionListRelationFilter = {
    every?: SubregionWhereInput
    some?: SubregionWhereInput
    none?: SubregionWhereInput
  }

  export type CountryOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type SubregionOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type RegionOrderByRelevanceInput = {
    fields: RegionOrderByRelevanceFieldEnum | RegionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type RegionCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    translations?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type RegionAvgOrderByAggregateInput = {
    id?: SortOrder
  }

  export type RegionMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type RegionMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type RegionSumOrderByAggregateInput = {
    id?: SortOrder
  }

  export type RegionScalarRelationFilter = {
    is?: RegionWhereInput
    isNot?: RegionWhereInput
  }

  export type SubregionOrderByRelevanceInput = {
    fields: SubregionOrderByRelevanceFieldEnum | SubregionOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type SubregionCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    region_id?: SortOrder
    translations?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type SubregionAvgOrderByAggregateInput = {
    id?: SortOrder
    region_id?: SortOrder
  }

  export type SubregionMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    region_id?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type SubregionMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    region_id?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type SubregionSumOrderByAggregateInput = {
    id?: SortOrder
    region_id?: SortOrder
  }

  export type RegionNullableScalarRelationFilter = {
    is?: RegionWhereInput | null
    isNot?: RegionWhereInput | null
  }

  export type SubregionNullableScalarRelationFilter = {
    is?: SubregionWhereInput | null
    isNot?: SubregionWhereInput | null
  }

  export type StateListRelationFilter = {
    every?: StateWhereInput
    some?: StateWhereInput
    none?: StateWhereInput
  }

  export type CityListRelationFilter = {
    every?: CityWhereInput
    some?: CityWhereInput
    none?: CityWhereInput
  }

  export type StateOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CityOrderByRelationAggregateInput = {
    _count?: SortOrder
  }

  export type CountryOrderByRelevanceInput = {
    fields: CountryOrderByRelevanceFieldEnum | CountryOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type CountryCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso3?: SortOrder
    iso2?: SortOrder
    numeric_code?: SortOrder
    phonecode?: SortOrder
    capital?: SortOrder
    currency?: SortOrder
    currency_name?: SortOrder
    currency_symbol?: SortOrder
    tld?: SortOrder
    native_reserved?: SortOrder
    population?: SortOrder
    gdp?: SortOrder
    region?: SortOrder
    region_id?: SortOrder
    subregion?: SortOrder
    subregion_id?: SortOrder
    nationality?: SortOrder
    timezones?: SortOrder
    translations?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    emoji?: SortOrder
    emojiU?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CountryAvgOrderByAggregateInput = {
    id?: SortOrder
    population?: SortOrder
    gdp?: SortOrder
    region_id?: SortOrder
    subregion_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type CountryMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso3?: SortOrder
    iso2?: SortOrder
    numeric_code?: SortOrder
    phonecode?: SortOrder
    capital?: SortOrder
    currency?: SortOrder
    currency_name?: SortOrder
    currency_symbol?: SortOrder
    tld?: SortOrder
    native_reserved?: SortOrder
    population?: SortOrder
    gdp?: SortOrder
    region?: SortOrder
    region_id?: SortOrder
    subregion?: SortOrder
    subregion_id?: SortOrder
    nationality?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    emoji?: SortOrder
    emojiU?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CountryMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    iso3?: SortOrder
    iso2?: SortOrder
    numeric_code?: SortOrder
    phonecode?: SortOrder
    capital?: SortOrder
    currency?: SortOrder
    currency_name?: SortOrder
    currency_symbol?: SortOrder
    tld?: SortOrder
    native_reserved?: SortOrder
    population?: SortOrder
    gdp?: SortOrder
    region?: SortOrder
    region_id?: SortOrder
    subregion?: SortOrder
    subregion_id?: SortOrder
    nationality?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    emoji?: SortOrder
    emojiU?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CountrySumOrderByAggregateInput = {
    id?: SortOrder
    population?: SortOrder
    gdp?: SortOrder
    region_id?: SortOrder
    subregion_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type CountryScalarRelationFilter = {
    is?: CountryWhereInput
    isNot?: CountryWhereInput
  }

  export type StateOrderByRelevanceInput = {
    fields: StateOrderByRelevanceFieldEnum | StateOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type StateCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    iso2?: SortOrder
    iso3166_2?: SortOrder
    fips_code?: SortOrder
    type?: SortOrder
    level?: SortOrder
    parent_id?: SortOrder
    native_reserved?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    state_code?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type StateAvgOrderByAggregateInput = {
    id?: SortOrder
    country_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type StateMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    iso2?: SortOrder
    iso3166_2?: SortOrder
    fips_code?: SortOrder
    type?: SortOrder
    level?: SortOrder
    parent_id?: SortOrder
    native_reserved?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    state_code?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type StateMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    iso2?: SortOrder
    iso3166_2?: SortOrder
    fips_code?: SortOrder
    type?: SortOrder
    level?: SortOrder
    parent_id?: SortOrder
    native_reserved?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    state_code?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type StateSumOrderByAggregateInput = {
    id?: SortOrder
    country_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type StateScalarRelationFilter = {
    is?: StateWhereInput
    isNot?: StateWhereInput
  }

  export type CityOrderByRelevanceInput = {
    fields: CityOrderByRelevanceFieldEnum | CityOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type CityCountOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    state_id?: SortOrder
    state_code?: SortOrder
    state_name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CityAvgOrderByAggregateInput = {
    id?: SortOrder
    state_id?: SortOrder
    country_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type CityMaxOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    state_id?: SortOrder
    state_code?: SortOrder
    state_name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CityMinOrderByAggregateInput = {
    id?: SortOrder
    name?: SortOrder
    state_id?: SortOrder
    state_code?: SortOrder
    state_name?: SortOrder
    country_id?: SortOrder
    country_code?: SortOrder
    country_name?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
    timezone?: SortOrder
    wikiDataId?: SortOrder
    createdAt?: SortOrder
    updatedAt?: SortOrder
  }

  export type CitySumOrderByAggregateInput = {
    id?: SortOrder
    state_id?: SortOrder
    country_id?: SortOrder
    latitude?: SortOrder
    longitude?: SortOrder
  }

  export type TableLogOrderByRelevanceInput = {
    fields: TableLogOrderByRelevanceFieldEnum | TableLogOrderByRelevanceFieldEnum[]
    sort: SortOrder
    search: string
  }

  export type TableLogCountOrderByAggregateInput = {
    id?: SortOrder
    table_name?: SortOrder
    row_id?: SortOrder
    previous_fields?: SortOrder
    new_fields?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
  }

  export type TableLogAvgOrderByAggregateInput = {
    id?: SortOrder
    row_id?: SortOrder
    created_by?: SortOrder
  }

  export type TableLogMaxOrderByAggregateInput = {
    id?: SortOrder
    table_name?: SortOrder
    row_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
  }

  export type TableLogMinOrderByAggregateInput = {
    id?: SortOrder
    table_name?: SortOrder
    row_id?: SortOrder
    created_by?: SortOrder
    created_at?: SortOrder
  }

  export type TableLogSumOrderByAggregateInput = {
    id?: SortOrder
    row_id?: SortOrder
    created_by?: SortOrder
  }

  export type StringFieldUpdateOperationsInput = {
    set?: string
  }

  export type NullableIntFieldUpdateOperationsInput = {
    set?: number | null
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type NullableStringFieldUpdateOperationsInput = {
    set?: string | null
  }

  export type IntFieldUpdateOperationsInput = {
    set?: number
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type UserCreateNestedManyWithoutSchoolInput = {
    create?: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput> | UserCreateWithoutSchoolInput[] | UserUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: UserCreateOrConnectWithoutSchoolInput | UserCreateOrConnectWithoutSchoolInput[]
    createMany?: UserCreateManySchoolInputEnvelope
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
  }

  export type BranchCreateNestedManyWithoutSchoolInput = {
    create?: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput> | BranchCreateWithoutSchoolInput[] | BranchUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: BranchCreateOrConnectWithoutSchoolInput | BranchCreateOrConnectWithoutSchoolInput[]
    createMany?: BranchCreateManySchoolInputEnvelope
    connect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
  }

  export type StudentCreateNestedManyWithoutSchoolInput = {
    create?: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput> | StudentCreateWithoutSchoolInput[] | StudentUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutSchoolInput | StudentCreateOrConnectWithoutSchoolInput[]
    createMany?: StudentCreateManySchoolInputEnvelope
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
  }

  export type GuardianCreateNestedManyWithoutSchoolInput = {
    create?: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput> | GuardianCreateWithoutSchoolInput[] | GuardianUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutSchoolInput | GuardianCreateOrConnectWithoutSchoolInput[]
    createMany?: GuardianCreateManySchoolInputEnvelope
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
  }

  export type UserUncheckedCreateNestedManyWithoutSchoolInput = {
    create?: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput> | UserCreateWithoutSchoolInput[] | UserUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: UserCreateOrConnectWithoutSchoolInput | UserCreateOrConnectWithoutSchoolInput[]
    createMany?: UserCreateManySchoolInputEnvelope
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
  }

  export type BranchUncheckedCreateNestedManyWithoutSchoolInput = {
    create?: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput> | BranchCreateWithoutSchoolInput[] | BranchUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: BranchCreateOrConnectWithoutSchoolInput | BranchCreateOrConnectWithoutSchoolInput[]
    createMany?: BranchCreateManySchoolInputEnvelope
    connect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
  }

  export type StudentUncheckedCreateNestedManyWithoutSchoolInput = {
    create?: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput> | StudentCreateWithoutSchoolInput[] | StudentUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutSchoolInput | StudentCreateOrConnectWithoutSchoolInput[]
    createMany?: StudentCreateManySchoolInputEnvelope
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
  }

  export type GuardianUncheckedCreateNestedManyWithoutSchoolInput = {
    create?: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput> | GuardianCreateWithoutSchoolInput[] | GuardianUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutSchoolInput | GuardianCreateOrConnectWithoutSchoolInput[]
    createMany?: GuardianCreateManySchoolInputEnvelope
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
  }

  export type DateTimeFieldUpdateOperationsInput = {
    set?: Date | string
  }

  export type NullableDateTimeFieldUpdateOperationsInput = {
    set?: Date | string | null
  }

  export type UserUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput> | UserCreateWithoutSchoolInput[] | UserUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: UserCreateOrConnectWithoutSchoolInput | UserCreateOrConnectWithoutSchoolInput[]
    upsert?: UserUpsertWithWhereUniqueWithoutSchoolInput | UserUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: UserCreateManySchoolInputEnvelope
    set?: UserWhereUniqueInput | UserWhereUniqueInput[]
    disconnect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    delete?: UserWhereUniqueInput | UserWhereUniqueInput[]
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    update?: UserUpdateWithWhereUniqueWithoutSchoolInput | UserUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: UserUpdateManyWithWhereWithoutSchoolInput | UserUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: UserScalarWhereInput | UserScalarWhereInput[]
  }

  export type BranchUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput> | BranchCreateWithoutSchoolInput[] | BranchUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: BranchCreateOrConnectWithoutSchoolInput | BranchCreateOrConnectWithoutSchoolInput[]
    upsert?: BranchUpsertWithWhereUniqueWithoutSchoolInput | BranchUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: BranchCreateManySchoolInputEnvelope
    set?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    disconnect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    delete?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    connect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    update?: BranchUpdateWithWhereUniqueWithoutSchoolInput | BranchUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: BranchUpdateManyWithWhereWithoutSchoolInput | BranchUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: BranchScalarWhereInput | BranchScalarWhereInput[]
  }

  export type StudentUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput> | StudentCreateWithoutSchoolInput[] | StudentUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutSchoolInput | StudentCreateOrConnectWithoutSchoolInput[]
    upsert?: StudentUpsertWithWhereUniqueWithoutSchoolInput | StudentUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: StudentCreateManySchoolInputEnvelope
    set?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    disconnect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    delete?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    update?: StudentUpdateWithWhereUniqueWithoutSchoolInput | StudentUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: StudentUpdateManyWithWhereWithoutSchoolInput | StudentUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: StudentScalarWhereInput | StudentScalarWhereInput[]
  }

  export type GuardianUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput> | GuardianCreateWithoutSchoolInput[] | GuardianUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutSchoolInput | GuardianCreateOrConnectWithoutSchoolInput[]
    upsert?: GuardianUpsertWithWhereUniqueWithoutSchoolInput | GuardianUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: GuardianCreateManySchoolInputEnvelope
    set?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    disconnect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    delete?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    update?: GuardianUpdateWithWhereUniqueWithoutSchoolInput | GuardianUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: GuardianUpdateManyWithWhereWithoutSchoolInput | GuardianUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
  }

  export type UserUncheckedUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput> | UserCreateWithoutSchoolInput[] | UserUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: UserCreateOrConnectWithoutSchoolInput | UserCreateOrConnectWithoutSchoolInput[]
    upsert?: UserUpsertWithWhereUniqueWithoutSchoolInput | UserUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: UserCreateManySchoolInputEnvelope
    set?: UserWhereUniqueInput | UserWhereUniqueInput[]
    disconnect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    delete?: UserWhereUniqueInput | UserWhereUniqueInput[]
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    update?: UserUpdateWithWhereUniqueWithoutSchoolInput | UserUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: UserUpdateManyWithWhereWithoutSchoolInput | UserUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: UserScalarWhereInput | UserScalarWhereInput[]
  }

  export type BranchUncheckedUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput> | BranchCreateWithoutSchoolInput[] | BranchUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: BranchCreateOrConnectWithoutSchoolInput | BranchCreateOrConnectWithoutSchoolInput[]
    upsert?: BranchUpsertWithWhereUniqueWithoutSchoolInput | BranchUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: BranchCreateManySchoolInputEnvelope
    set?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    disconnect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    delete?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    connect?: BranchWhereUniqueInput | BranchWhereUniqueInput[]
    update?: BranchUpdateWithWhereUniqueWithoutSchoolInput | BranchUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: BranchUpdateManyWithWhereWithoutSchoolInput | BranchUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: BranchScalarWhereInput | BranchScalarWhereInput[]
  }

  export type StudentUncheckedUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput> | StudentCreateWithoutSchoolInput[] | StudentUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutSchoolInput | StudentCreateOrConnectWithoutSchoolInput[]
    upsert?: StudentUpsertWithWhereUniqueWithoutSchoolInput | StudentUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: StudentCreateManySchoolInputEnvelope
    set?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    disconnect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    delete?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    update?: StudentUpdateWithWhereUniqueWithoutSchoolInput | StudentUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: StudentUpdateManyWithWhereWithoutSchoolInput | StudentUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: StudentScalarWhereInput | StudentScalarWhereInput[]
  }

  export type GuardianUncheckedUpdateManyWithoutSchoolNestedInput = {
    create?: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput> | GuardianCreateWithoutSchoolInput[] | GuardianUncheckedCreateWithoutSchoolInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutSchoolInput | GuardianCreateOrConnectWithoutSchoolInput[]
    upsert?: GuardianUpsertWithWhereUniqueWithoutSchoolInput | GuardianUpsertWithWhereUniqueWithoutSchoolInput[]
    createMany?: GuardianCreateManySchoolInputEnvelope
    set?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    disconnect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    delete?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    update?: GuardianUpdateWithWhereUniqueWithoutSchoolInput | GuardianUpdateWithWhereUniqueWithoutSchoolInput[]
    updateMany?: GuardianUpdateManyWithWhereWithoutSchoolInput | GuardianUpdateManyWithWhereWithoutSchoolInput[]
    deleteMany?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
  }

  export type SchoolCreateNestedOneWithoutBranchesInput = {
    create?: XOR<SchoolCreateWithoutBranchesInput, SchoolUncheckedCreateWithoutBranchesInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutBranchesInput
    connect?: SchoolWhereUniqueInput
  }

  export type BranchLevelCreateNestedManyWithoutBranchInput = {
    create?: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput> | BranchLevelCreateWithoutBranchInput[] | BranchLevelUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: BranchLevelCreateOrConnectWithoutBranchInput | BranchLevelCreateOrConnectWithoutBranchInput[]
    createMany?: BranchLevelCreateManyBranchInputEnvelope
    connect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
  }

  export type StudentCreateNestedManyWithoutBranchInput = {
    create?: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput> | StudentCreateWithoutBranchInput[] | StudentUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutBranchInput | StudentCreateOrConnectWithoutBranchInput[]
    createMany?: StudentCreateManyBranchInputEnvelope
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
  }

  export type UserCreateNestedManyWithoutBranchInput = {
    create?: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput> | UserCreateWithoutBranchInput[] | UserUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: UserCreateOrConnectWithoutBranchInput | UserCreateOrConnectWithoutBranchInput[]
    createMany?: UserCreateManyBranchInputEnvelope
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
  }

  export type MultimediaCreateNestedManyWithoutBranchInput = {
    create?: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput> | MultimediaCreateWithoutBranchInput[] | MultimediaUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: MultimediaCreateOrConnectWithoutBranchInput | MultimediaCreateOrConnectWithoutBranchInput[]
    createMany?: MultimediaCreateManyBranchInputEnvelope
    connect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
  }

  export type LibraryBookCreateNestedManyWithoutBranchInput = {
    create?: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput> | LibraryBookCreateWithoutBranchInput[] | LibraryBookUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: LibraryBookCreateOrConnectWithoutBranchInput | LibraryBookCreateOrConnectWithoutBranchInput[]
    createMany?: LibraryBookCreateManyBranchInputEnvelope
    connect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
  }

  export type GuardianCreateNestedManyWithoutBranchInput = {
    create?: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput> | GuardianCreateWithoutBranchInput[] | GuardianUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutBranchInput | GuardianCreateOrConnectWithoutBranchInput[]
    createMany?: GuardianCreateManyBranchInputEnvelope
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
  }

  export type BranchLevelUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput> | BranchLevelCreateWithoutBranchInput[] | BranchLevelUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: BranchLevelCreateOrConnectWithoutBranchInput | BranchLevelCreateOrConnectWithoutBranchInput[]
    createMany?: BranchLevelCreateManyBranchInputEnvelope
    connect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
  }

  export type StudentUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput> | StudentCreateWithoutBranchInput[] | StudentUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutBranchInput | StudentCreateOrConnectWithoutBranchInput[]
    createMany?: StudentCreateManyBranchInputEnvelope
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
  }

  export type UserUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput> | UserCreateWithoutBranchInput[] | UserUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: UserCreateOrConnectWithoutBranchInput | UserCreateOrConnectWithoutBranchInput[]
    createMany?: UserCreateManyBranchInputEnvelope
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
  }

  export type MultimediaUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput> | MultimediaCreateWithoutBranchInput[] | MultimediaUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: MultimediaCreateOrConnectWithoutBranchInput | MultimediaCreateOrConnectWithoutBranchInput[]
    createMany?: MultimediaCreateManyBranchInputEnvelope
    connect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
  }

  export type LibraryBookUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput> | LibraryBookCreateWithoutBranchInput[] | LibraryBookUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: LibraryBookCreateOrConnectWithoutBranchInput | LibraryBookCreateOrConnectWithoutBranchInput[]
    createMany?: LibraryBookCreateManyBranchInputEnvelope
    connect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
  }

  export type GuardianUncheckedCreateNestedManyWithoutBranchInput = {
    create?: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput> | GuardianCreateWithoutBranchInput[] | GuardianUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutBranchInput | GuardianCreateOrConnectWithoutBranchInput[]
    createMany?: GuardianCreateManyBranchInputEnvelope
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
  }

  export type SchoolUpdateOneRequiredWithoutBranchesNestedInput = {
    create?: XOR<SchoolCreateWithoutBranchesInput, SchoolUncheckedCreateWithoutBranchesInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutBranchesInput
    upsert?: SchoolUpsertWithoutBranchesInput
    connect?: SchoolWhereUniqueInput
    update?: XOR<XOR<SchoolUpdateToOneWithWhereWithoutBranchesInput, SchoolUpdateWithoutBranchesInput>, SchoolUncheckedUpdateWithoutBranchesInput>
  }

  export type BranchLevelUpdateManyWithoutBranchNestedInput = {
    create?: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput> | BranchLevelCreateWithoutBranchInput[] | BranchLevelUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: BranchLevelCreateOrConnectWithoutBranchInput | BranchLevelCreateOrConnectWithoutBranchInput[]
    upsert?: BranchLevelUpsertWithWhereUniqueWithoutBranchInput | BranchLevelUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: BranchLevelCreateManyBranchInputEnvelope
    set?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    disconnect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    delete?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    connect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    update?: BranchLevelUpdateWithWhereUniqueWithoutBranchInput | BranchLevelUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: BranchLevelUpdateManyWithWhereWithoutBranchInput | BranchLevelUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: BranchLevelScalarWhereInput | BranchLevelScalarWhereInput[]
  }

  export type StudentUpdateManyWithoutBranchNestedInput = {
    create?: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput> | StudentCreateWithoutBranchInput[] | StudentUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutBranchInput | StudentCreateOrConnectWithoutBranchInput[]
    upsert?: StudentUpsertWithWhereUniqueWithoutBranchInput | StudentUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: StudentCreateManyBranchInputEnvelope
    set?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    disconnect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    delete?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    update?: StudentUpdateWithWhereUniqueWithoutBranchInput | StudentUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: StudentUpdateManyWithWhereWithoutBranchInput | StudentUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: StudentScalarWhereInput | StudentScalarWhereInput[]
  }

  export type UserUpdateManyWithoutBranchNestedInput = {
    create?: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput> | UserCreateWithoutBranchInput[] | UserUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: UserCreateOrConnectWithoutBranchInput | UserCreateOrConnectWithoutBranchInput[]
    upsert?: UserUpsertWithWhereUniqueWithoutBranchInput | UserUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: UserCreateManyBranchInputEnvelope
    set?: UserWhereUniqueInput | UserWhereUniqueInput[]
    disconnect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    delete?: UserWhereUniqueInput | UserWhereUniqueInput[]
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    update?: UserUpdateWithWhereUniqueWithoutBranchInput | UserUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: UserUpdateManyWithWhereWithoutBranchInput | UserUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: UserScalarWhereInput | UserScalarWhereInput[]
  }

  export type MultimediaUpdateManyWithoutBranchNestedInput = {
    create?: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput> | MultimediaCreateWithoutBranchInput[] | MultimediaUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: MultimediaCreateOrConnectWithoutBranchInput | MultimediaCreateOrConnectWithoutBranchInput[]
    upsert?: MultimediaUpsertWithWhereUniqueWithoutBranchInput | MultimediaUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: MultimediaCreateManyBranchInputEnvelope
    set?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    disconnect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    delete?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    connect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    update?: MultimediaUpdateWithWhereUniqueWithoutBranchInput | MultimediaUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: MultimediaUpdateManyWithWhereWithoutBranchInput | MultimediaUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: MultimediaScalarWhereInput | MultimediaScalarWhereInput[]
  }

  export type LibraryBookUpdateManyWithoutBranchNestedInput = {
    create?: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput> | LibraryBookCreateWithoutBranchInput[] | LibraryBookUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: LibraryBookCreateOrConnectWithoutBranchInput | LibraryBookCreateOrConnectWithoutBranchInput[]
    upsert?: LibraryBookUpsertWithWhereUniqueWithoutBranchInput | LibraryBookUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: LibraryBookCreateManyBranchInputEnvelope
    set?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    disconnect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    delete?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    connect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    update?: LibraryBookUpdateWithWhereUniqueWithoutBranchInput | LibraryBookUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: LibraryBookUpdateManyWithWhereWithoutBranchInput | LibraryBookUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: LibraryBookScalarWhereInput | LibraryBookScalarWhereInput[]
  }

  export type GuardianUpdateManyWithoutBranchNestedInput = {
    create?: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput> | GuardianCreateWithoutBranchInput[] | GuardianUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutBranchInput | GuardianCreateOrConnectWithoutBranchInput[]
    upsert?: GuardianUpsertWithWhereUniqueWithoutBranchInput | GuardianUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: GuardianCreateManyBranchInputEnvelope
    set?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    disconnect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    delete?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    update?: GuardianUpdateWithWhereUniqueWithoutBranchInput | GuardianUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: GuardianUpdateManyWithWhereWithoutBranchInput | GuardianUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
  }

  export type BranchLevelUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput> | BranchLevelCreateWithoutBranchInput[] | BranchLevelUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: BranchLevelCreateOrConnectWithoutBranchInput | BranchLevelCreateOrConnectWithoutBranchInput[]
    upsert?: BranchLevelUpsertWithWhereUniqueWithoutBranchInput | BranchLevelUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: BranchLevelCreateManyBranchInputEnvelope
    set?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    disconnect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    delete?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    connect?: BranchLevelWhereUniqueInput | BranchLevelWhereUniqueInput[]
    update?: BranchLevelUpdateWithWhereUniqueWithoutBranchInput | BranchLevelUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: BranchLevelUpdateManyWithWhereWithoutBranchInput | BranchLevelUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: BranchLevelScalarWhereInput | BranchLevelScalarWhereInput[]
  }

  export type StudentUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput> | StudentCreateWithoutBranchInput[] | StudentUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: StudentCreateOrConnectWithoutBranchInput | StudentCreateOrConnectWithoutBranchInput[]
    upsert?: StudentUpsertWithWhereUniqueWithoutBranchInput | StudentUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: StudentCreateManyBranchInputEnvelope
    set?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    disconnect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    delete?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    connect?: StudentWhereUniqueInput | StudentWhereUniqueInput[]
    update?: StudentUpdateWithWhereUniqueWithoutBranchInput | StudentUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: StudentUpdateManyWithWhereWithoutBranchInput | StudentUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: StudentScalarWhereInput | StudentScalarWhereInput[]
  }

  export type UserUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput> | UserCreateWithoutBranchInput[] | UserUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: UserCreateOrConnectWithoutBranchInput | UserCreateOrConnectWithoutBranchInput[]
    upsert?: UserUpsertWithWhereUniqueWithoutBranchInput | UserUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: UserCreateManyBranchInputEnvelope
    set?: UserWhereUniqueInput | UserWhereUniqueInput[]
    disconnect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    delete?: UserWhereUniqueInput | UserWhereUniqueInput[]
    connect?: UserWhereUniqueInput | UserWhereUniqueInput[]
    update?: UserUpdateWithWhereUniqueWithoutBranchInput | UserUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: UserUpdateManyWithWhereWithoutBranchInput | UserUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: UserScalarWhereInput | UserScalarWhereInput[]
  }

  export type MultimediaUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput> | MultimediaCreateWithoutBranchInput[] | MultimediaUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: MultimediaCreateOrConnectWithoutBranchInput | MultimediaCreateOrConnectWithoutBranchInput[]
    upsert?: MultimediaUpsertWithWhereUniqueWithoutBranchInput | MultimediaUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: MultimediaCreateManyBranchInputEnvelope
    set?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    disconnect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    delete?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    connect?: MultimediaWhereUniqueInput | MultimediaWhereUniqueInput[]
    update?: MultimediaUpdateWithWhereUniqueWithoutBranchInput | MultimediaUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: MultimediaUpdateManyWithWhereWithoutBranchInput | MultimediaUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: MultimediaScalarWhereInput | MultimediaScalarWhereInput[]
  }

  export type LibraryBookUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput> | LibraryBookCreateWithoutBranchInput[] | LibraryBookUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: LibraryBookCreateOrConnectWithoutBranchInput | LibraryBookCreateOrConnectWithoutBranchInput[]
    upsert?: LibraryBookUpsertWithWhereUniqueWithoutBranchInput | LibraryBookUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: LibraryBookCreateManyBranchInputEnvelope
    set?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    disconnect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    delete?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    connect?: LibraryBookWhereUniqueInput | LibraryBookWhereUniqueInput[]
    update?: LibraryBookUpdateWithWhereUniqueWithoutBranchInput | LibraryBookUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: LibraryBookUpdateManyWithWhereWithoutBranchInput | LibraryBookUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: LibraryBookScalarWhereInput | LibraryBookScalarWhereInput[]
  }

  export type GuardianUncheckedUpdateManyWithoutBranchNestedInput = {
    create?: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput> | GuardianCreateWithoutBranchInput[] | GuardianUncheckedCreateWithoutBranchInput[]
    connectOrCreate?: GuardianCreateOrConnectWithoutBranchInput | GuardianCreateOrConnectWithoutBranchInput[]
    upsert?: GuardianUpsertWithWhereUniqueWithoutBranchInput | GuardianUpsertWithWhereUniqueWithoutBranchInput[]
    createMany?: GuardianCreateManyBranchInputEnvelope
    set?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    disconnect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    delete?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    connect?: GuardianWhereUniqueInput | GuardianWhereUniqueInput[]
    update?: GuardianUpdateWithWhereUniqueWithoutBranchInput | GuardianUpdateWithWhereUniqueWithoutBranchInput[]
    updateMany?: GuardianUpdateManyWithWhereWithoutBranchInput | GuardianUpdateManyWithWhereWithoutBranchInput[]
    deleteMany?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
  }

  export type BranchCreateNestedOneWithoutBranchLevelsInput = {
    create?: XOR<BranchCreateWithoutBranchLevelsInput, BranchUncheckedCreateWithoutBranchLevelsInput>
    connectOrCreate?: BranchCreateOrConnectWithoutBranchLevelsInput
    connect?: BranchWhereUniqueInput
  }

  export type BranchUpdateOneRequiredWithoutBranchLevelsNestedInput = {
    create?: XOR<BranchCreateWithoutBranchLevelsInput, BranchUncheckedCreateWithoutBranchLevelsInput>
    connectOrCreate?: BranchCreateOrConnectWithoutBranchLevelsInput
    upsert?: BranchUpsertWithoutBranchLevelsInput
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutBranchLevelsInput, BranchUpdateWithoutBranchLevelsInput>, BranchUncheckedUpdateWithoutBranchLevelsInput>
  }

  export type SessionClassCreateNestedManyWithoutClassdetailsInput = {
    create?: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput> | SessionClassCreateWithoutClassdetailsInput[] | SessionClassUncheckedCreateWithoutClassdetailsInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutClassdetailsInput | SessionClassCreateOrConnectWithoutClassdetailsInput[]
    createMany?: SessionClassCreateManyClassdetailsInputEnvelope
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
  }

  export type ExamCreateNestedManyWithoutClassInput = {
    create?: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput> | ExamCreateWithoutClassInput[] | ExamUncheckedCreateWithoutClassInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutClassInput | ExamCreateOrConnectWithoutClassInput[]
    createMany?: ExamCreateManyClassInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionClassUncheckedCreateNestedManyWithoutClassdetailsInput = {
    create?: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput> | SessionClassCreateWithoutClassdetailsInput[] | SessionClassUncheckedCreateWithoutClassdetailsInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutClassdetailsInput | SessionClassCreateOrConnectWithoutClassdetailsInput[]
    createMany?: SessionClassCreateManyClassdetailsInputEnvelope
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
  }

  export type ExamUncheckedCreateNestedManyWithoutClassInput = {
    create?: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput> | ExamCreateWithoutClassInput[] | ExamUncheckedCreateWithoutClassInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutClassInput | ExamCreateOrConnectWithoutClassInput[]
    createMany?: ExamCreateManyClassInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionClassUpdateManyWithoutClassdetailsNestedInput = {
    create?: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput> | SessionClassCreateWithoutClassdetailsInput[] | SessionClassUncheckedCreateWithoutClassdetailsInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutClassdetailsInput | SessionClassCreateOrConnectWithoutClassdetailsInput[]
    upsert?: SessionClassUpsertWithWhereUniqueWithoutClassdetailsInput | SessionClassUpsertWithWhereUniqueWithoutClassdetailsInput[]
    createMany?: SessionClassCreateManyClassdetailsInputEnvelope
    set?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    disconnect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    delete?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    update?: SessionClassUpdateWithWhereUniqueWithoutClassdetailsInput | SessionClassUpdateWithWhereUniqueWithoutClassdetailsInput[]
    updateMany?: SessionClassUpdateManyWithWhereWithoutClassdetailsInput | SessionClassUpdateManyWithWhereWithoutClassdetailsInput[]
    deleteMany?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
  }

  export type ExamUpdateManyWithoutClassNestedInput = {
    create?: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput> | ExamCreateWithoutClassInput[] | ExamUncheckedCreateWithoutClassInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutClassInput | ExamCreateOrConnectWithoutClassInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutClassInput | ExamUpsertWithWhereUniqueWithoutClassInput[]
    createMany?: ExamCreateManyClassInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutClassInput | ExamUpdateWithWhereUniqueWithoutClassInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutClassInput | ExamUpdateManyWithWhereWithoutClassInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type SessionClassUncheckedUpdateManyWithoutClassdetailsNestedInput = {
    create?: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput> | SessionClassCreateWithoutClassdetailsInput[] | SessionClassUncheckedCreateWithoutClassdetailsInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutClassdetailsInput | SessionClassCreateOrConnectWithoutClassdetailsInput[]
    upsert?: SessionClassUpsertWithWhereUniqueWithoutClassdetailsInput | SessionClassUpsertWithWhereUniqueWithoutClassdetailsInput[]
    createMany?: SessionClassCreateManyClassdetailsInputEnvelope
    set?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    disconnect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    delete?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    update?: SessionClassUpdateWithWhereUniqueWithoutClassdetailsInput | SessionClassUpdateWithWhereUniqueWithoutClassdetailsInput[]
    updateMany?: SessionClassUpdateManyWithWhereWithoutClassdetailsInput | SessionClassUpdateManyWithWhereWithoutClassdetailsInput[]
    deleteMany?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
  }

  export type ExamUncheckedUpdateManyWithoutClassNestedInput = {
    create?: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput> | ExamCreateWithoutClassInput[] | ExamUncheckedCreateWithoutClassInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutClassInput | ExamCreateOrConnectWithoutClassInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutClassInput | ExamUpsertWithWhereUniqueWithoutClassInput[]
    createMany?: ExamCreateManyClassInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutClassInput | ExamUpdateWithWhereUniqueWithoutClassInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutClassInput | ExamUpdateManyWithWhereWithoutClassInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type SessionClassSubjectCreateNestedManyWithoutSubjectInput = {
    create?: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput> | SessionClassSubjectCreateWithoutSubjectInput[] | SessionClassSubjectUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: SessionClassSubjectCreateOrConnectWithoutSubjectInput | SessionClassSubjectCreateOrConnectWithoutSubjectInput[]
    createMany?: SessionClassSubjectCreateManySubjectInputEnvelope
    connect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
  }

  export type ClassSubjectTemplateCreateNestedManyWithoutSubjectInput = {
    create?: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput> | ClassSubjectTemplateCreateWithoutSubjectInput[] | ClassSubjectTemplateUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ClassSubjectTemplateCreateOrConnectWithoutSubjectInput | ClassSubjectTemplateCreateOrConnectWithoutSubjectInput[]
    createMany?: ClassSubjectTemplateCreateManySubjectInputEnvelope
    connect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
  }

  export type ExamCreateNestedManyWithoutSubjectInput = {
    create?: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput> | ExamCreateWithoutSubjectInput[] | ExamUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutSubjectInput | ExamCreateOrConnectWithoutSubjectInput[]
    createMany?: ExamCreateManySubjectInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionClassSubjectUncheckedCreateNestedManyWithoutSubjectInput = {
    create?: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput> | SessionClassSubjectCreateWithoutSubjectInput[] | SessionClassSubjectUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: SessionClassSubjectCreateOrConnectWithoutSubjectInput | SessionClassSubjectCreateOrConnectWithoutSubjectInput[]
    createMany?: SessionClassSubjectCreateManySubjectInputEnvelope
    connect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
  }

  export type ClassSubjectTemplateUncheckedCreateNestedManyWithoutSubjectInput = {
    create?: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput> | ClassSubjectTemplateCreateWithoutSubjectInput[] | ClassSubjectTemplateUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ClassSubjectTemplateCreateOrConnectWithoutSubjectInput | ClassSubjectTemplateCreateOrConnectWithoutSubjectInput[]
    createMany?: ClassSubjectTemplateCreateManySubjectInputEnvelope
    connect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
  }

  export type ExamUncheckedCreateNestedManyWithoutSubjectInput = {
    create?: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput> | ExamCreateWithoutSubjectInput[] | ExamUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutSubjectInput | ExamCreateOrConnectWithoutSubjectInput[]
    createMany?: ExamCreateManySubjectInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionClassSubjectUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput> | SessionClassSubjectCreateWithoutSubjectInput[] | SessionClassSubjectUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: SessionClassSubjectCreateOrConnectWithoutSubjectInput | SessionClassSubjectCreateOrConnectWithoutSubjectInput[]
    upsert?: SessionClassSubjectUpsertWithWhereUniqueWithoutSubjectInput | SessionClassSubjectUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: SessionClassSubjectCreateManySubjectInputEnvelope
    set?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    disconnect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    delete?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    connect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    update?: SessionClassSubjectUpdateWithWhereUniqueWithoutSubjectInput | SessionClassSubjectUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: SessionClassSubjectUpdateManyWithWhereWithoutSubjectInput | SessionClassSubjectUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: SessionClassSubjectScalarWhereInput | SessionClassSubjectScalarWhereInput[]
  }

  export type ClassSubjectTemplateUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput> | ClassSubjectTemplateCreateWithoutSubjectInput[] | ClassSubjectTemplateUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ClassSubjectTemplateCreateOrConnectWithoutSubjectInput | ClassSubjectTemplateCreateOrConnectWithoutSubjectInput[]
    upsert?: ClassSubjectTemplateUpsertWithWhereUniqueWithoutSubjectInput | ClassSubjectTemplateUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: ClassSubjectTemplateCreateManySubjectInputEnvelope
    set?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    disconnect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    delete?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    connect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    update?: ClassSubjectTemplateUpdateWithWhereUniqueWithoutSubjectInput | ClassSubjectTemplateUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: ClassSubjectTemplateUpdateManyWithWhereWithoutSubjectInput | ClassSubjectTemplateUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: ClassSubjectTemplateScalarWhereInput | ClassSubjectTemplateScalarWhereInput[]
  }

  export type ExamUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput> | ExamCreateWithoutSubjectInput[] | ExamUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutSubjectInput | ExamCreateOrConnectWithoutSubjectInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutSubjectInput | ExamUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: ExamCreateManySubjectInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutSubjectInput | ExamUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutSubjectInput | ExamUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type SessionClassSubjectUncheckedUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput> | SessionClassSubjectCreateWithoutSubjectInput[] | SessionClassSubjectUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: SessionClassSubjectCreateOrConnectWithoutSubjectInput | SessionClassSubjectCreateOrConnectWithoutSubjectInput[]
    upsert?: SessionClassSubjectUpsertWithWhereUniqueWithoutSubjectInput | SessionClassSubjectUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: SessionClassSubjectCreateManySubjectInputEnvelope
    set?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    disconnect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    delete?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    connect?: SessionClassSubjectWhereUniqueInput | SessionClassSubjectWhereUniqueInput[]
    update?: SessionClassSubjectUpdateWithWhereUniqueWithoutSubjectInput | SessionClassSubjectUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: SessionClassSubjectUpdateManyWithWhereWithoutSubjectInput | SessionClassSubjectUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: SessionClassSubjectScalarWhereInput | SessionClassSubjectScalarWhereInput[]
  }

  export type ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput> | ClassSubjectTemplateCreateWithoutSubjectInput[] | ClassSubjectTemplateUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ClassSubjectTemplateCreateOrConnectWithoutSubjectInput | ClassSubjectTemplateCreateOrConnectWithoutSubjectInput[]
    upsert?: ClassSubjectTemplateUpsertWithWhereUniqueWithoutSubjectInput | ClassSubjectTemplateUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: ClassSubjectTemplateCreateManySubjectInputEnvelope
    set?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    disconnect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    delete?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    connect?: ClassSubjectTemplateWhereUniqueInput | ClassSubjectTemplateWhereUniqueInput[]
    update?: ClassSubjectTemplateUpdateWithWhereUniqueWithoutSubjectInput | ClassSubjectTemplateUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: ClassSubjectTemplateUpdateManyWithWhereWithoutSubjectInput | ClassSubjectTemplateUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: ClassSubjectTemplateScalarWhereInput | ClassSubjectTemplateScalarWhereInput[]
  }

  export type ExamUncheckedUpdateManyWithoutSubjectNestedInput = {
    create?: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput> | ExamCreateWithoutSubjectInput[] | ExamUncheckedCreateWithoutSubjectInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutSubjectInput | ExamCreateOrConnectWithoutSubjectInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutSubjectInput | ExamUpsertWithWhereUniqueWithoutSubjectInput[]
    createMany?: ExamCreateManySubjectInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutSubjectInput | ExamUpdateWithWhereUniqueWithoutSubjectInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutSubjectInput | ExamUpdateManyWithWhereWithoutSubjectInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type SessionTermCreateNestedManyWithoutSessionInput = {
    create?: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput> | SessionTermCreateWithoutSessionInput[] | SessionTermUncheckedCreateWithoutSessionInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionInput | SessionTermCreateOrConnectWithoutSessionInput[]
    createMany?: SessionTermCreateManySessionInputEnvelope
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
  }

  export type SessionTermUncheckedCreateNestedManyWithoutSessionInput = {
    create?: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput> | SessionTermCreateWithoutSessionInput[] | SessionTermUncheckedCreateWithoutSessionInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionInput | SessionTermCreateOrConnectWithoutSessionInput[]
    createMany?: SessionTermCreateManySessionInputEnvelope
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
  }

  export type SessionTermUpdateManyWithoutSessionNestedInput = {
    create?: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput> | SessionTermCreateWithoutSessionInput[] | SessionTermUncheckedCreateWithoutSessionInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionInput | SessionTermCreateOrConnectWithoutSessionInput[]
    upsert?: SessionTermUpsertWithWhereUniqueWithoutSessionInput | SessionTermUpsertWithWhereUniqueWithoutSessionInput[]
    createMany?: SessionTermCreateManySessionInputEnvelope
    set?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    disconnect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    delete?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    update?: SessionTermUpdateWithWhereUniqueWithoutSessionInput | SessionTermUpdateWithWhereUniqueWithoutSessionInput[]
    updateMany?: SessionTermUpdateManyWithWhereWithoutSessionInput | SessionTermUpdateManyWithWhereWithoutSessionInput[]
    deleteMany?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
  }

  export type SessionTermUncheckedUpdateManyWithoutSessionNestedInput = {
    create?: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput> | SessionTermCreateWithoutSessionInput[] | SessionTermUncheckedCreateWithoutSessionInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionInput | SessionTermCreateOrConnectWithoutSessionInput[]
    upsert?: SessionTermUpsertWithWhereUniqueWithoutSessionInput | SessionTermUpsertWithWhereUniqueWithoutSessionInput[]
    createMany?: SessionTermCreateManySessionInputEnvelope
    set?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    disconnect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    delete?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    update?: SessionTermUpdateWithWhereUniqueWithoutSessionInput | SessionTermUpdateWithWhereUniqueWithoutSessionInput[]
    updateMany?: SessionTermUpdateManyWithWhereWithoutSessionInput | SessionTermUpdateManyWithWhereWithoutSessionInput[]
    deleteMany?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
  }

  export type BranchCreateNestedOneWithoutMultimediaInput = {
    create?: XOR<BranchCreateWithoutMultimediaInput, BranchUncheckedCreateWithoutMultimediaInput>
    connectOrCreate?: BranchCreateOrConnectWithoutMultimediaInput
    connect?: BranchWhereUniqueInput
  }

  export type BranchUpdateOneWithoutMultimediaNestedInput = {
    create?: XOR<BranchCreateWithoutMultimediaInput, BranchUncheckedCreateWithoutMultimediaInput>
    connectOrCreate?: BranchCreateOrConnectWithoutMultimediaInput
    upsert?: BranchUpsertWithoutMultimediaInput
    disconnect?: BranchWhereInput | boolean
    delete?: BranchWhereInput | boolean
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutMultimediaInput, BranchUpdateWithoutMultimediaInput>, BranchUncheckedUpdateWithoutMultimediaInput>
  }

  export type BranchCreateNestedOneWithoutLibrarybooksInput = {
    create?: XOR<BranchCreateWithoutLibrarybooksInput, BranchUncheckedCreateWithoutLibrarybooksInput>
    connectOrCreate?: BranchCreateOrConnectWithoutLibrarybooksInput
    connect?: BranchWhereUniqueInput
  }

  export type Enumbook_typeFieldUpdateOperationsInput = {
    set?: $Enums.book_type
  }

  export type BranchUpdateOneWithoutLibrarybooksNestedInput = {
    create?: XOR<BranchCreateWithoutLibrarybooksInput, BranchUncheckedCreateWithoutLibrarybooksInput>
    connectOrCreate?: BranchCreateOrConnectWithoutLibrarybooksInput
    upsert?: BranchUpsertWithoutLibrarybooksInput
    disconnect?: BranchWhereInput | boolean
    delete?: BranchWhereInput | boolean
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutLibrarybooksInput, BranchUpdateWithoutLibrarybooksInput>, BranchUncheckedUpdateWithoutLibrarybooksInput>
  }

  export type DecimalFieldUpdateOperationsInput = {
    set?: Decimal | DecimalJsLike | number | string
    increment?: Decimal | DecimalJsLike | number | string
    decrement?: Decimal | DecimalJsLike | number | string
    multiply?: Decimal | DecimalJsLike | number | string
    divide?: Decimal | DecimalJsLike | number | string
  }

  export type BranchSessionCreateNestedOneWithoutSessionTermInput = {
    create?: XOR<BranchSessionCreateWithoutSessionTermInput, BranchSessionUncheckedCreateWithoutSessionTermInput>
    connectOrCreate?: BranchSessionCreateOrConnectWithoutSessionTermInput
    connect?: BranchSessionWhereUniqueInput
  }

  export type TermCreateNestedOneWithoutSessionTermInput = {
    create?: XOR<TermCreateWithoutSessionTermInput, TermUncheckedCreateWithoutSessionTermInput>
    connectOrCreate?: TermCreateOrConnectWithoutSessionTermInput
    connect?: TermWhereUniqueInput
  }

  export type SessionClassCreateNestedManyWithoutSessiontermInput = {
    create?: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput> | SessionClassCreateWithoutSessiontermInput[] | SessionClassUncheckedCreateWithoutSessiontermInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutSessiontermInput | SessionClassCreateOrConnectWithoutSessiontermInput[]
    createMany?: SessionClassCreateManySessiontermInputEnvelope
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
  }

  export type SessionClassUncheckedCreateNestedManyWithoutSessiontermInput = {
    create?: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput> | SessionClassCreateWithoutSessiontermInput[] | SessionClassUncheckedCreateWithoutSessiontermInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutSessiontermInput | SessionClassCreateOrConnectWithoutSessiontermInput[]
    createMany?: SessionClassCreateManySessiontermInputEnvelope
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
  }

  export type BranchSessionUpdateOneWithoutSessionTermNestedInput = {
    create?: XOR<BranchSessionCreateWithoutSessionTermInput, BranchSessionUncheckedCreateWithoutSessionTermInput>
    connectOrCreate?: BranchSessionCreateOrConnectWithoutSessionTermInput
    upsert?: BranchSessionUpsertWithoutSessionTermInput
    disconnect?: BranchSessionWhereInput | boolean
    delete?: BranchSessionWhereInput | boolean
    connect?: BranchSessionWhereUniqueInput
    update?: XOR<XOR<BranchSessionUpdateToOneWithWhereWithoutSessionTermInput, BranchSessionUpdateWithoutSessionTermInput>, BranchSessionUncheckedUpdateWithoutSessionTermInput>
  }

  export type TermUpdateOneWithoutSessionTermNestedInput = {
    create?: XOR<TermCreateWithoutSessionTermInput, TermUncheckedCreateWithoutSessionTermInput>
    connectOrCreate?: TermCreateOrConnectWithoutSessionTermInput
    upsert?: TermUpsertWithoutSessionTermInput
    disconnect?: TermWhereInput | boolean
    delete?: TermWhereInput | boolean
    connect?: TermWhereUniqueInput
    update?: XOR<XOR<TermUpdateToOneWithWhereWithoutSessionTermInput, TermUpdateWithoutSessionTermInput>, TermUncheckedUpdateWithoutSessionTermInput>
  }

  export type SessionClassUpdateManyWithoutSessiontermNestedInput = {
    create?: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput> | SessionClassCreateWithoutSessiontermInput[] | SessionClassUncheckedCreateWithoutSessiontermInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutSessiontermInput | SessionClassCreateOrConnectWithoutSessiontermInput[]
    upsert?: SessionClassUpsertWithWhereUniqueWithoutSessiontermInput | SessionClassUpsertWithWhereUniqueWithoutSessiontermInput[]
    createMany?: SessionClassCreateManySessiontermInputEnvelope
    set?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    disconnect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    delete?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    update?: SessionClassUpdateWithWhereUniqueWithoutSessiontermInput | SessionClassUpdateWithWhereUniqueWithoutSessiontermInput[]
    updateMany?: SessionClassUpdateManyWithWhereWithoutSessiontermInput | SessionClassUpdateManyWithWhereWithoutSessiontermInput[]
    deleteMany?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
  }

  export type SessionClassUncheckedUpdateManyWithoutSessiontermNestedInput = {
    create?: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput> | SessionClassCreateWithoutSessiontermInput[] | SessionClassUncheckedCreateWithoutSessiontermInput[]
    connectOrCreate?: SessionClassCreateOrConnectWithoutSessiontermInput | SessionClassCreateOrConnectWithoutSessiontermInput[]
    upsert?: SessionClassUpsertWithWhereUniqueWithoutSessiontermInput | SessionClassUpsertWithWhereUniqueWithoutSessiontermInput[]
    createMany?: SessionClassCreateManySessiontermInputEnvelope
    set?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    disconnect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    delete?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    connect?: SessionClassWhereUniqueInput | SessionClassWhereUniqueInput[]
    update?: SessionClassUpdateWithWhereUniqueWithoutSessiontermInput | SessionClassUpdateWithWhereUniqueWithoutSessiontermInput[]
    updateMany?: SessionClassUpdateManyWithWhereWithoutSessiontermInput | SessionClassUpdateManyWithWhereWithoutSessiontermInput[]
    deleteMany?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
  }

  export type UserCrudPermissionCreateNestedManyWithoutUserInput = {
    create?: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput> | UserCrudPermissionCreateWithoutUserInput[] | UserCrudPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutUserInput | UserCrudPermissionCreateOrConnectWithoutUserInput[]
    createMany?: UserCrudPermissionCreateManyUserInputEnvelope
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
  }

  export type UserPermissionCreateNestedManyWithoutUserInput = {
    create?: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput> | UserPermissionCreateWithoutUserInput[] | UserPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutUserInput | UserPermissionCreateOrConnectWithoutUserInput[]
    createMany?: UserPermissionCreateManyUserInputEnvelope
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
  }

  export type SchoolCreateNestedOneWithoutUsersInput = {
    create?: XOR<SchoolCreateWithoutUsersInput, SchoolUncheckedCreateWithoutUsersInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutUsersInput
    connect?: SchoolWhereUniqueInput
  }

  export type BranchCreateNestedOneWithoutUsersInput = {
    create?: XOR<BranchCreateWithoutUsersInput, BranchUncheckedCreateWithoutUsersInput>
    connectOrCreate?: BranchCreateOrConnectWithoutUsersInput
    connect?: BranchWhereUniqueInput
  }

  export type UserCrudPermissionUncheckedCreateNestedManyWithoutUserInput = {
    create?: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput> | UserCrudPermissionCreateWithoutUserInput[] | UserCrudPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutUserInput | UserCrudPermissionCreateOrConnectWithoutUserInput[]
    createMany?: UserCrudPermissionCreateManyUserInputEnvelope
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
  }

  export type UserPermissionUncheckedCreateNestedManyWithoutUserInput = {
    create?: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput> | UserPermissionCreateWithoutUserInput[] | UserPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutUserInput | UserPermissionCreateOrConnectWithoutUserInput[]
    createMany?: UserPermissionCreateManyUserInputEnvelope
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
  }

  export type Enumusers_staff_deptFieldUpdateOperationsInput = {
    set?: $Enums.users_staff_dept
  }

  export type UserCrudPermissionUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput> | UserCrudPermissionCreateWithoutUserInput[] | UserCrudPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutUserInput | UserCrudPermissionCreateOrConnectWithoutUserInput[]
    upsert?: UserCrudPermissionUpsertWithWhereUniqueWithoutUserInput | UserCrudPermissionUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserCrudPermissionCreateManyUserInputEnvelope
    set?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    disconnect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    delete?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    update?: UserCrudPermissionUpdateWithWhereUniqueWithoutUserInput | UserCrudPermissionUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserCrudPermissionUpdateManyWithWhereWithoutUserInput | UserCrudPermissionUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
  }

  export type UserPermissionUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput> | UserPermissionCreateWithoutUserInput[] | UserPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutUserInput | UserPermissionCreateOrConnectWithoutUserInput[]
    upsert?: UserPermissionUpsertWithWhereUniqueWithoutUserInput | UserPermissionUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserPermissionCreateManyUserInputEnvelope
    set?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    disconnect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    delete?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    update?: UserPermissionUpdateWithWhereUniqueWithoutUserInput | UserPermissionUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserPermissionUpdateManyWithWhereWithoutUserInput | UserPermissionUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
  }

  export type SchoolUpdateOneWithoutUsersNestedInput = {
    create?: XOR<SchoolCreateWithoutUsersInput, SchoolUncheckedCreateWithoutUsersInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutUsersInput
    upsert?: SchoolUpsertWithoutUsersInput
    disconnect?: SchoolWhereInput | boolean
    delete?: SchoolWhereInput | boolean
    connect?: SchoolWhereUniqueInput
    update?: XOR<XOR<SchoolUpdateToOneWithWhereWithoutUsersInput, SchoolUpdateWithoutUsersInput>, SchoolUncheckedUpdateWithoutUsersInput>
  }

  export type BranchUpdateOneWithoutUsersNestedInput = {
    create?: XOR<BranchCreateWithoutUsersInput, BranchUncheckedCreateWithoutUsersInput>
    connectOrCreate?: BranchCreateOrConnectWithoutUsersInput
    upsert?: BranchUpsertWithoutUsersInput
    disconnect?: BranchWhereInput | boolean
    delete?: BranchWhereInput | boolean
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutUsersInput, BranchUpdateWithoutUsersInput>, BranchUncheckedUpdateWithoutUsersInput>
  }

  export type UserCrudPermissionUncheckedUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput> | UserCrudPermissionCreateWithoutUserInput[] | UserCrudPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutUserInput | UserCrudPermissionCreateOrConnectWithoutUserInput[]
    upsert?: UserCrudPermissionUpsertWithWhereUniqueWithoutUserInput | UserCrudPermissionUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserCrudPermissionCreateManyUserInputEnvelope
    set?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    disconnect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    delete?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    update?: UserCrudPermissionUpdateWithWhereUniqueWithoutUserInput | UserCrudPermissionUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserCrudPermissionUpdateManyWithWhereWithoutUserInput | UserCrudPermissionUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
  }

  export type UserPermissionUncheckedUpdateManyWithoutUserNestedInput = {
    create?: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput> | UserPermissionCreateWithoutUserInput[] | UserPermissionUncheckedCreateWithoutUserInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutUserInput | UserPermissionCreateOrConnectWithoutUserInput[]
    upsert?: UserPermissionUpsertWithWhereUniqueWithoutUserInput | UserPermissionUpsertWithWhereUniqueWithoutUserInput[]
    createMany?: UserPermissionCreateManyUserInputEnvelope
    set?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    disconnect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    delete?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    update?: UserPermissionUpdateWithWhereUniqueWithoutUserInput | UserPermissionUpdateWithWhereUniqueWithoutUserInput[]
    updateMany?: UserPermissionUpdateManyWithWhereWithoutUserInput | UserPermissionUpdateManyWithWhereWithoutUserInput[]
    deleteMany?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
  }

  export type BranchCreateNestedOneWithoutStudentsInput = {
    create?: XOR<BranchCreateWithoutStudentsInput, BranchUncheckedCreateWithoutStudentsInput>
    connectOrCreate?: BranchCreateOrConnectWithoutStudentsInput
    connect?: BranchWhereUniqueInput
  }

  export type SchoolCreateNestedOneWithoutStudentsInput = {
    create?: XOR<SchoolCreateWithoutStudentsInput, SchoolUncheckedCreateWithoutStudentsInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutStudentsInput
    connect?: SchoolWhereUniqueInput
  }

  export type StudentTrackingCreateNestedManyWithoutStudentInput = {
    create?: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput> | StudentTrackingCreateWithoutStudentInput[] | StudentTrackingUncheckedCreateWithoutStudentInput[]
    connectOrCreate?: StudentTrackingCreateOrConnectWithoutStudentInput | StudentTrackingCreateOrConnectWithoutStudentInput[]
    createMany?: StudentTrackingCreateManyStudentInputEnvelope
    connect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
  }

  export type StudentTrackingUncheckedCreateNestedManyWithoutStudentInput = {
    create?: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput> | StudentTrackingCreateWithoutStudentInput[] | StudentTrackingUncheckedCreateWithoutStudentInput[]
    connectOrCreate?: StudentTrackingCreateOrConnectWithoutStudentInput | StudentTrackingCreateOrConnectWithoutStudentInput[]
    createMany?: StudentTrackingCreateManyStudentInputEnvelope
    connect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
  }

  export type BranchUpdateOneWithoutStudentsNestedInput = {
    create?: XOR<BranchCreateWithoutStudentsInput, BranchUncheckedCreateWithoutStudentsInput>
    connectOrCreate?: BranchCreateOrConnectWithoutStudentsInput
    upsert?: BranchUpsertWithoutStudentsInput
    disconnect?: BranchWhereInput | boolean
    delete?: BranchWhereInput | boolean
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutStudentsInput, BranchUpdateWithoutStudentsInput>, BranchUncheckedUpdateWithoutStudentsInput>
  }

  export type SchoolUpdateOneWithoutStudentsNestedInput = {
    create?: XOR<SchoolCreateWithoutStudentsInput, SchoolUncheckedCreateWithoutStudentsInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutStudentsInput
    upsert?: SchoolUpsertWithoutStudentsInput
    disconnect?: SchoolWhereInput | boolean
    delete?: SchoolWhereInput | boolean
    connect?: SchoolWhereUniqueInput
    update?: XOR<XOR<SchoolUpdateToOneWithWhereWithoutStudentsInput, SchoolUpdateWithoutStudentsInput>, SchoolUncheckedUpdateWithoutStudentsInput>
  }

  export type StudentTrackingUpdateManyWithoutStudentNestedInput = {
    create?: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput> | StudentTrackingCreateWithoutStudentInput[] | StudentTrackingUncheckedCreateWithoutStudentInput[]
    connectOrCreate?: StudentTrackingCreateOrConnectWithoutStudentInput | StudentTrackingCreateOrConnectWithoutStudentInput[]
    upsert?: StudentTrackingUpsertWithWhereUniqueWithoutStudentInput | StudentTrackingUpsertWithWhereUniqueWithoutStudentInput[]
    createMany?: StudentTrackingCreateManyStudentInputEnvelope
    set?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    disconnect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    delete?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    connect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    update?: StudentTrackingUpdateWithWhereUniqueWithoutStudentInput | StudentTrackingUpdateWithWhereUniqueWithoutStudentInput[]
    updateMany?: StudentTrackingUpdateManyWithWhereWithoutStudentInput | StudentTrackingUpdateManyWithWhereWithoutStudentInput[]
    deleteMany?: StudentTrackingScalarWhereInput | StudentTrackingScalarWhereInput[]
  }

  export type StudentTrackingUncheckedUpdateManyWithoutStudentNestedInput = {
    create?: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput> | StudentTrackingCreateWithoutStudentInput[] | StudentTrackingUncheckedCreateWithoutStudentInput[]
    connectOrCreate?: StudentTrackingCreateOrConnectWithoutStudentInput | StudentTrackingCreateOrConnectWithoutStudentInput[]
    upsert?: StudentTrackingUpsertWithWhereUniqueWithoutStudentInput | StudentTrackingUpsertWithWhereUniqueWithoutStudentInput[]
    createMany?: StudentTrackingCreateManyStudentInputEnvelope
    set?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    disconnect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    delete?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    connect?: StudentTrackingWhereUniqueInput | StudentTrackingWhereUniqueInput[]
    update?: StudentTrackingUpdateWithWhereUniqueWithoutStudentInput | StudentTrackingUpdateWithWhereUniqueWithoutStudentInput[]
    updateMany?: StudentTrackingUpdateManyWithWhereWithoutStudentInput | StudentTrackingUpdateManyWithWhereWithoutStudentInput[]
    deleteMany?: StudentTrackingScalarWhereInput | StudentTrackingScalarWhereInput[]
  }

  export type SchoolCreateNestedOneWithoutGuardiansInput = {
    create?: XOR<SchoolCreateWithoutGuardiansInput, SchoolUncheckedCreateWithoutGuardiansInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutGuardiansInput
    connect?: SchoolWhereUniqueInput
  }

  export type BranchCreateNestedOneWithoutGuardiansInput = {
    create?: XOR<BranchCreateWithoutGuardiansInput, BranchUncheckedCreateWithoutGuardiansInput>
    connectOrCreate?: BranchCreateOrConnectWithoutGuardiansInput
    connect?: BranchWhereUniqueInput
  }

  export type SchoolUpdateOneWithoutGuardiansNestedInput = {
    create?: XOR<SchoolCreateWithoutGuardiansInput, SchoolUncheckedCreateWithoutGuardiansInput>
    connectOrCreate?: SchoolCreateOrConnectWithoutGuardiansInput
    upsert?: SchoolUpsertWithoutGuardiansInput
    disconnect?: SchoolWhereInput | boolean
    delete?: SchoolWhereInput | boolean
    connect?: SchoolWhereUniqueInput
    update?: XOR<XOR<SchoolUpdateToOneWithWhereWithoutGuardiansInput, SchoolUpdateWithoutGuardiansInput>, SchoolUncheckedUpdateWithoutGuardiansInput>
  }

  export type BranchUpdateOneWithoutGuardiansNestedInput = {
    create?: XOR<BranchCreateWithoutGuardiansInput, BranchUncheckedCreateWithoutGuardiansInput>
    connectOrCreate?: BranchCreateOrConnectWithoutGuardiansInput
    upsert?: BranchUpsertWithoutGuardiansInput
    disconnect?: BranchWhereInput | boolean
    delete?: BranchWhereInput | boolean
    connect?: BranchWhereUniqueInput
    update?: XOR<XOR<BranchUpdateToOneWithWhereWithoutGuardiansInput, BranchUpdateWithoutGuardiansInput>, BranchUncheckedUpdateWithoutGuardiansInput>
  }

  export type RoleCrudPermissionCreateNestedManyWithoutPermissionInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput> | RoleCrudPermissionCreateWithoutPermissionInput[] | RoleCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutPermissionInput | RoleCrudPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: RoleCrudPermissionCreateManyPermissionInputEnvelope
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
  }

  export type UserCrudPermissionCreateNestedManyWithoutPermissionInput = {
    create?: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput> | UserCrudPermissionCreateWithoutPermissionInput[] | UserCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutPermissionInput | UserCrudPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: UserCrudPermissionCreateManyPermissionInputEnvelope
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
  }

  export type RolePermissionCreateNestedManyWithoutPermissionInput = {
    create?: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput> | RolePermissionCreateWithoutPermissionInput[] | RolePermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RolePermissionCreateOrConnectWithoutPermissionInput | RolePermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: RolePermissionCreateManyPermissionInputEnvelope
    connect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
  }

  export type UserPermissionCreateNestedManyWithoutPermissionInput = {
    create?: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput> | UserPermissionCreateWithoutPermissionInput[] | UserPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutPermissionInput | UserPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: UserPermissionCreateManyPermissionInputEnvelope
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
  }

  export type RoleCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput> | RoleCrudPermissionCreateWithoutPermissionInput[] | RoleCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutPermissionInput | RoleCrudPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: RoleCrudPermissionCreateManyPermissionInputEnvelope
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
  }

  export type UserCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput = {
    create?: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput> | UserCrudPermissionCreateWithoutPermissionInput[] | UserCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutPermissionInput | UserCrudPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: UserCrudPermissionCreateManyPermissionInputEnvelope
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
  }

  export type RolePermissionUncheckedCreateNestedManyWithoutPermissionInput = {
    create?: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput> | RolePermissionCreateWithoutPermissionInput[] | RolePermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RolePermissionCreateOrConnectWithoutPermissionInput | RolePermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: RolePermissionCreateManyPermissionInputEnvelope
    connect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
  }

  export type UserPermissionUncheckedCreateNestedManyWithoutPermissionInput = {
    create?: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput> | UserPermissionCreateWithoutPermissionInput[] | UserPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutPermissionInput | UserPermissionCreateOrConnectWithoutPermissionInput[]
    createMany?: UserPermissionCreateManyPermissionInputEnvelope
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
  }

  export type RoleCrudPermissionUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput> | RoleCrudPermissionCreateWithoutPermissionInput[] | RoleCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutPermissionInput | RoleCrudPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: RoleCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput | RoleCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: RoleCrudPermissionCreateManyPermissionInputEnvelope
    set?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    disconnect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    delete?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    update?: RoleCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput | RoleCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: RoleCrudPermissionUpdateManyWithWhereWithoutPermissionInput | RoleCrudPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
  }

  export type UserCrudPermissionUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput> | UserCrudPermissionCreateWithoutPermissionInput[] | UserCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutPermissionInput | UserCrudPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: UserCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput | UserCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: UserCrudPermissionCreateManyPermissionInputEnvelope
    set?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    disconnect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    delete?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    update?: UserCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput | UserCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: UserCrudPermissionUpdateManyWithWhereWithoutPermissionInput | UserCrudPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
  }

  export type RolePermissionUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput> | RolePermissionCreateWithoutPermissionInput[] | RolePermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RolePermissionCreateOrConnectWithoutPermissionInput | RolePermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: RolePermissionUpsertWithWhereUniqueWithoutPermissionInput | RolePermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: RolePermissionCreateManyPermissionInputEnvelope
    set?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    disconnect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    delete?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    connect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    update?: RolePermissionUpdateWithWhereUniqueWithoutPermissionInput | RolePermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: RolePermissionUpdateManyWithWhereWithoutPermissionInput | RolePermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: RolePermissionScalarWhereInput | RolePermissionScalarWhereInput[]
  }

  export type UserPermissionUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput> | UserPermissionCreateWithoutPermissionInput[] | UserPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutPermissionInput | UserPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: UserPermissionUpsertWithWhereUniqueWithoutPermissionInput | UserPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: UserPermissionCreateManyPermissionInputEnvelope
    set?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    disconnect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    delete?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    update?: UserPermissionUpdateWithWhereUniqueWithoutPermissionInput | UserPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: UserPermissionUpdateManyWithWhereWithoutPermissionInput | UserPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
  }

  export type RoleCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput> | RoleCrudPermissionCreateWithoutPermissionInput[] | RoleCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutPermissionInput | RoleCrudPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: RoleCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput | RoleCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: RoleCrudPermissionCreateManyPermissionInputEnvelope
    set?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    disconnect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    delete?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    update?: RoleCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput | RoleCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: RoleCrudPermissionUpdateManyWithWhereWithoutPermissionInput | RoleCrudPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
  }

  export type UserCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput> | UserCrudPermissionCreateWithoutPermissionInput[] | UserCrudPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserCrudPermissionCreateOrConnectWithoutPermissionInput | UserCrudPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: UserCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput | UserCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: UserCrudPermissionCreateManyPermissionInputEnvelope
    set?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    disconnect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    delete?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    connect?: UserCrudPermissionWhereUniqueInput | UserCrudPermissionWhereUniqueInput[]
    update?: UserCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput | UserCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: UserCrudPermissionUpdateManyWithWhereWithoutPermissionInput | UserCrudPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
  }

  export type RolePermissionUncheckedUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput> | RolePermissionCreateWithoutPermissionInput[] | RolePermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: RolePermissionCreateOrConnectWithoutPermissionInput | RolePermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: RolePermissionUpsertWithWhereUniqueWithoutPermissionInput | RolePermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: RolePermissionCreateManyPermissionInputEnvelope
    set?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    disconnect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    delete?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    connect?: RolePermissionWhereUniqueInput | RolePermissionWhereUniqueInput[]
    update?: RolePermissionUpdateWithWhereUniqueWithoutPermissionInput | RolePermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: RolePermissionUpdateManyWithWhereWithoutPermissionInput | RolePermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: RolePermissionScalarWhereInput | RolePermissionScalarWhereInput[]
  }

  export type UserPermissionUncheckedUpdateManyWithoutPermissionNestedInput = {
    create?: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput> | UserPermissionCreateWithoutPermissionInput[] | UserPermissionUncheckedCreateWithoutPermissionInput[]
    connectOrCreate?: UserPermissionCreateOrConnectWithoutPermissionInput | UserPermissionCreateOrConnectWithoutPermissionInput[]
    upsert?: UserPermissionUpsertWithWhereUniqueWithoutPermissionInput | UserPermissionUpsertWithWhereUniqueWithoutPermissionInput[]
    createMany?: UserPermissionCreateManyPermissionInputEnvelope
    set?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    disconnect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    delete?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    connect?: UserPermissionWhereUniqueInput | UserPermissionWhereUniqueInput[]
    update?: UserPermissionUpdateWithWhereUniqueWithoutPermissionInput | UserPermissionUpdateWithWhereUniqueWithoutPermissionInput[]
    updateMany?: UserPermissionUpdateManyWithWhereWithoutPermissionInput | UserPermissionUpdateManyWithWhereWithoutPermissionInput[]
    deleteMany?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
  }

  export type RoleCreateNestedOneWithoutRoleCrudPermissionInput = {
    create?: XOR<RoleCreateWithoutRoleCrudPermissionInput, RoleUncheckedCreateWithoutRoleCrudPermissionInput>
    connectOrCreate?: RoleCreateOrConnectWithoutRoleCrudPermissionInput
    connect?: RoleWhereUniqueInput
  }

  export type PermissionCreateNestedOneWithoutRoleCrudPermissionInput = {
    create?: XOR<PermissionCreateWithoutRoleCrudPermissionInput, PermissionUncheckedCreateWithoutRoleCrudPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutRoleCrudPermissionInput
    connect?: PermissionWhereUniqueInput
  }

  export type RoleUpdateOneRequiredWithoutRoleCrudPermissionNestedInput = {
    create?: XOR<RoleCreateWithoutRoleCrudPermissionInput, RoleUncheckedCreateWithoutRoleCrudPermissionInput>
    connectOrCreate?: RoleCreateOrConnectWithoutRoleCrudPermissionInput
    upsert?: RoleUpsertWithoutRoleCrudPermissionInput
    connect?: RoleWhereUniqueInput
    update?: XOR<XOR<RoleUpdateToOneWithWhereWithoutRoleCrudPermissionInput, RoleUpdateWithoutRoleCrudPermissionInput>, RoleUncheckedUpdateWithoutRoleCrudPermissionInput>
  }

  export type PermissionUpdateOneRequiredWithoutRoleCrudPermissionNestedInput = {
    create?: XOR<PermissionCreateWithoutRoleCrudPermissionInput, PermissionUncheckedCreateWithoutRoleCrudPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutRoleCrudPermissionInput
    upsert?: PermissionUpsertWithoutRoleCrudPermissionInput
    connect?: PermissionWhereUniqueInput
    update?: XOR<XOR<PermissionUpdateToOneWithWhereWithoutRoleCrudPermissionInput, PermissionUpdateWithoutRoleCrudPermissionInput>, PermissionUncheckedUpdateWithoutRoleCrudPermissionInput>
  }

  export type PermissionCreateNestedOneWithoutRolePermissionInput = {
    create?: XOR<PermissionCreateWithoutRolePermissionInput, PermissionUncheckedCreateWithoutRolePermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutRolePermissionInput
    connect?: PermissionWhereUniqueInput
  }

  export type PermissionUpdateOneRequiredWithoutRolePermissionNestedInput = {
    create?: XOR<PermissionCreateWithoutRolePermissionInput, PermissionUncheckedCreateWithoutRolePermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutRolePermissionInput
    upsert?: PermissionUpsertWithoutRolePermissionInput
    connect?: PermissionWhereUniqueInput
    update?: XOR<XOR<PermissionUpdateToOneWithWhereWithoutRolePermissionInput, PermissionUpdateWithoutRolePermissionInput>, PermissionUncheckedUpdateWithoutRolePermissionInput>
  }

  export type RoleCrudPermissionCreateNestedManyWithoutRoleInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput> | RoleCrudPermissionCreateWithoutRoleInput[] | RoleCrudPermissionUncheckedCreateWithoutRoleInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutRoleInput | RoleCrudPermissionCreateOrConnectWithoutRoleInput[]
    createMany?: RoleCrudPermissionCreateManyRoleInputEnvelope
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
  }

  export type RoleCrudPermissionUncheckedCreateNestedManyWithoutRoleInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput> | RoleCrudPermissionCreateWithoutRoleInput[] | RoleCrudPermissionUncheckedCreateWithoutRoleInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutRoleInput | RoleCrudPermissionCreateOrConnectWithoutRoleInput[]
    createMany?: RoleCrudPermissionCreateManyRoleInputEnvelope
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
  }

  export type RoleCrudPermissionUpdateManyWithoutRoleNestedInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput> | RoleCrudPermissionCreateWithoutRoleInput[] | RoleCrudPermissionUncheckedCreateWithoutRoleInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutRoleInput | RoleCrudPermissionCreateOrConnectWithoutRoleInput[]
    upsert?: RoleCrudPermissionUpsertWithWhereUniqueWithoutRoleInput | RoleCrudPermissionUpsertWithWhereUniqueWithoutRoleInput[]
    createMany?: RoleCrudPermissionCreateManyRoleInputEnvelope
    set?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    disconnect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    delete?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    update?: RoleCrudPermissionUpdateWithWhereUniqueWithoutRoleInput | RoleCrudPermissionUpdateWithWhereUniqueWithoutRoleInput[]
    updateMany?: RoleCrudPermissionUpdateManyWithWhereWithoutRoleInput | RoleCrudPermissionUpdateManyWithWhereWithoutRoleInput[]
    deleteMany?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
  }

  export type RoleCrudPermissionUncheckedUpdateManyWithoutRoleNestedInput = {
    create?: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput> | RoleCrudPermissionCreateWithoutRoleInput[] | RoleCrudPermissionUncheckedCreateWithoutRoleInput[]
    connectOrCreate?: RoleCrudPermissionCreateOrConnectWithoutRoleInput | RoleCrudPermissionCreateOrConnectWithoutRoleInput[]
    upsert?: RoleCrudPermissionUpsertWithWhereUniqueWithoutRoleInput | RoleCrudPermissionUpsertWithWhereUniqueWithoutRoleInput[]
    createMany?: RoleCrudPermissionCreateManyRoleInputEnvelope
    set?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    disconnect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    delete?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    connect?: RoleCrudPermissionWhereUniqueInput | RoleCrudPermissionWhereUniqueInput[]
    update?: RoleCrudPermissionUpdateWithWhereUniqueWithoutRoleInput | RoleCrudPermissionUpdateWithWhereUniqueWithoutRoleInput[]
    updateMany?: RoleCrudPermissionUpdateManyWithWhereWithoutRoleInput | RoleCrudPermissionUpdateManyWithWhereWithoutRoleInput[]
    deleteMany?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
  }

  export type PermissionCreateNestedOneWithoutUserCrudPermissionInput = {
    create?: XOR<PermissionCreateWithoutUserCrudPermissionInput, PermissionUncheckedCreateWithoutUserCrudPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutUserCrudPermissionInput
    connect?: PermissionWhereUniqueInput
  }

  export type UserCreateNestedOneWithoutCrudUserPermissionInput = {
    create?: XOR<UserCreateWithoutCrudUserPermissionInput, UserUncheckedCreateWithoutCrudUserPermissionInput>
    connectOrCreate?: UserCreateOrConnectWithoutCrudUserPermissionInput
    connect?: UserWhereUniqueInput
  }

  export type PermissionUpdateOneRequiredWithoutUserCrudPermissionNestedInput = {
    create?: XOR<PermissionCreateWithoutUserCrudPermissionInput, PermissionUncheckedCreateWithoutUserCrudPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutUserCrudPermissionInput
    upsert?: PermissionUpsertWithoutUserCrudPermissionInput
    connect?: PermissionWhereUniqueInput
    update?: XOR<XOR<PermissionUpdateToOneWithWhereWithoutUserCrudPermissionInput, PermissionUpdateWithoutUserCrudPermissionInput>, PermissionUncheckedUpdateWithoutUserCrudPermissionInput>
  }

  export type UserUpdateOneWithoutCrudUserPermissionNestedInput = {
    create?: XOR<UserCreateWithoutCrudUserPermissionInput, UserUncheckedCreateWithoutCrudUserPermissionInput>
    connectOrCreate?: UserCreateOrConnectWithoutCrudUserPermissionInput
    upsert?: UserUpsertWithoutCrudUserPermissionInput
    disconnect?: UserWhereInput | boolean
    delete?: UserWhereInput | boolean
    connect?: UserWhereUniqueInput
    update?: XOR<XOR<UserUpdateToOneWithWhereWithoutCrudUserPermissionInput, UserUpdateWithoutCrudUserPermissionInput>, UserUncheckedUpdateWithoutCrudUserPermissionInput>
  }

  export type PermissionCreateNestedOneWithoutUserPermissionInput = {
    create?: XOR<PermissionCreateWithoutUserPermissionInput, PermissionUncheckedCreateWithoutUserPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutUserPermissionInput
    connect?: PermissionWhereUniqueInput
  }

  export type UserCreateNestedOneWithoutPermissionUserInput = {
    create?: XOR<UserCreateWithoutPermissionUserInput, UserUncheckedCreateWithoutPermissionUserInput>
    connectOrCreate?: UserCreateOrConnectWithoutPermissionUserInput
    connect?: UserWhereUniqueInput
  }

  export type PermissionUpdateOneRequiredWithoutUserPermissionNestedInput = {
    create?: XOR<PermissionCreateWithoutUserPermissionInput, PermissionUncheckedCreateWithoutUserPermissionInput>
    connectOrCreate?: PermissionCreateOrConnectWithoutUserPermissionInput
    upsert?: PermissionUpsertWithoutUserPermissionInput
    connect?: PermissionWhereUniqueInput
    update?: XOR<XOR<PermissionUpdateToOneWithWhereWithoutUserPermissionInput, PermissionUpdateWithoutUserPermissionInput>, PermissionUncheckedUpdateWithoutUserPermissionInput>
  }

  export type UserUpdateOneWithoutPermissionUserNestedInput = {
    create?: XOR<UserCreateWithoutPermissionUserInput, UserUncheckedCreateWithoutPermissionUserInput>
    connectOrCreate?: UserCreateOrConnectWithoutPermissionUserInput
    upsert?: UserUpsertWithoutPermissionUserInput
    disconnect?: UserWhereInput | boolean
    delete?: UserWhereInput | boolean
    connect?: UserWhereUniqueInput
    update?: XOR<XOR<UserUpdateToOneWithWhereWithoutPermissionUserInput, UserUpdateWithoutPermissionUserInput>, UserUncheckedUpdateWithoutPermissionUserInput>
  }

  export type SessionTermCreateNestedManyWithoutTermInput = {
    create?: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput> | SessionTermCreateWithoutTermInput[] | SessionTermUncheckedCreateWithoutTermInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutTermInput | SessionTermCreateOrConnectWithoutTermInput[]
    createMany?: SessionTermCreateManyTermInputEnvelope
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
  }

  export type ExamCreateNestedManyWithoutTermInput = {
    create?: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput> | ExamCreateWithoutTermInput[] | ExamUncheckedCreateWithoutTermInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutTermInput | ExamCreateOrConnectWithoutTermInput[]
    createMany?: ExamCreateManyTermInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionTermUncheckedCreateNestedManyWithoutTermInput = {
    create?: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput> | SessionTermCreateWithoutTermInput[] | SessionTermUncheckedCreateWithoutTermInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutTermInput | SessionTermCreateOrConnectWithoutTermInput[]
    createMany?: SessionTermCreateManyTermInputEnvelope
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
  }

  export type ExamUncheckedCreateNestedManyWithoutTermInput = {
    create?: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput> | ExamCreateWithoutTermInput[] | ExamUncheckedCreateWithoutTermInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutTermInput | ExamCreateOrConnectWithoutTermInput[]
    createMany?: ExamCreateManyTermInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type SessionTermUpdateManyWithoutTermNestedInput = {
    create?: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput> | SessionTermCreateWithoutTermInput[] | SessionTermUncheckedCreateWithoutTermInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutTermInput | SessionTermCreateOrConnectWithoutTermInput[]
    upsert?: SessionTermUpsertWithWhereUniqueWithoutTermInput | SessionTermUpsertWithWhereUniqueWithoutTermInput[]
    createMany?: SessionTermCreateManyTermInputEnvelope
    set?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    disconnect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    delete?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    update?: SessionTermUpdateWithWhereUniqueWithoutTermInput | SessionTermUpdateWithWhereUniqueWithoutTermInput[]
    updateMany?: SessionTermUpdateManyWithWhereWithoutTermInput | SessionTermUpdateManyWithWhereWithoutTermInput[]
    deleteMany?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
  }

  export type ExamUpdateManyWithoutTermNestedInput = {
    create?: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput> | ExamCreateWithoutTermInput[] | ExamUncheckedCreateWithoutTermInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutTermInput | ExamCreateOrConnectWithoutTermInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutTermInput | ExamUpsertWithWhereUniqueWithoutTermInput[]
    createMany?: ExamCreateManyTermInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutTermInput | ExamUpdateWithWhereUniqueWithoutTermInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutTermInput | ExamUpdateManyWithWhereWithoutTermInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type SessionTermUncheckedUpdateManyWithoutTermNestedInput = {
    create?: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput> | SessionTermCreateWithoutTermInput[] | SessionTermUncheckedCreateWithoutTermInput[]
    connectOrCreate?: SessionTermCreateOrConnectWithoutTermInput | SessionTermCreateOrConnectWithoutTermInput[]
    upsert?: SessionTermUpsertWithWhereUniqueWithoutTermInput | SessionTermUpsertWithWhereUniqueWithoutTermInput[]
    createMany?: SessionTermCreateManyTermInputEnvelope
    set?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    disconnect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    delete?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    connect?: SessionTermWhereUniqueInput | SessionTermWhereUniqueInput[]
    update?: SessionTermUpdateWithWhereUniqueWithoutTermInput | SessionTermUpdateWithWhereUniqueWithoutTermInput[]
    updateMany?: SessionTermUpdateManyWithWhereWithoutTermInput | SessionTermUpdateManyWithWhereWithoutTermInput[]
    deleteMany?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
  }

  export type ExamUncheckedUpdateManyWithoutTermNestedInput = {
    create?: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput> | ExamCreateWithoutTermInput[] | ExamUncheckedCreateWithoutTermInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutTermInput | ExamCreateOrConnectWithoutTermInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutTermInput | ExamUpsertWithWhereUniqueWithoutTermInput[]
    createMany?: ExamCreateManyTermInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutTermInput | ExamUpdateWithWhereUniqueWithoutTermInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutTermInput | ExamUpdateManyWithWhereWithoutTermInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type NullableDecimalFieldUpdateOperationsInput = {
    set?: Decimal | DecimalJsLike | number | string | null
    increment?: Decimal | DecimalJsLike | number | string
    decrement?: Decimal | DecimalJsLike | number | string
    multiply?: Decimal | DecimalJsLike | number | string
    divide?: Decimal | DecimalJsLike | number | string
  }

  export type SchoolSubjectCreateNestedOneWithoutClassSubjectTemplateInput = {
    create?: XOR<SchoolSubjectCreateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedCreateWithoutClassSubjectTemplateInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutClassSubjectTemplateInput
    connect?: SchoolSubjectWhereUniqueInput
  }

  export type SchoolSubjectUpdateOneRequiredWithoutClassSubjectTemplateNestedInput = {
    create?: XOR<SchoolSubjectCreateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedCreateWithoutClassSubjectTemplateInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutClassSubjectTemplateInput
    upsert?: SchoolSubjectUpsertWithoutClassSubjectTemplateInput
    connect?: SchoolSubjectWhereUniqueInput
    update?: XOR<XOR<SchoolSubjectUpdateToOneWithWhereWithoutClassSubjectTemplateInput, SchoolSubjectUpdateWithoutClassSubjectTemplateInput>, SchoolSubjectUncheckedUpdateWithoutClassSubjectTemplateInput>
  }

  export type ClassTemplateCreateNestedOneWithoutSessionClassInput = {
    create?: XOR<ClassTemplateCreateWithoutSessionClassInput, ClassTemplateUncheckedCreateWithoutSessionClassInput>
    connectOrCreate?: ClassTemplateCreateOrConnectWithoutSessionClassInput
    connect?: ClassTemplateWhereUniqueInput
  }

  export type SessionTermCreateNestedOneWithoutSessionclassInput = {
    create?: XOR<SessionTermCreateWithoutSessionclassInput, SessionTermUncheckedCreateWithoutSessionclassInput>
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionclassInput
    connect?: SessionTermWhereUniqueInput
  }

  export type ClassTemplateUpdateOneWithoutSessionClassNestedInput = {
    create?: XOR<ClassTemplateCreateWithoutSessionClassInput, ClassTemplateUncheckedCreateWithoutSessionClassInput>
    connectOrCreate?: ClassTemplateCreateOrConnectWithoutSessionClassInput
    upsert?: ClassTemplateUpsertWithoutSessionClassInput
    disconnect?: ClassTemplateWhereInput | boolean
    delete?: ClassTemplateWhereInput | boolean
    connect?: ClassTemplateWhereUniqueInput
    update?: XOR<XOR<ClassTemplateUpdateToOneWithWhereWithoutSessionClassInput, ClassTemplateUpdateWithoutSessionClassInput>, ClassTemplateUncheckedUpdateWithoutSessionClassInput>
  }

  export type SessionTermUpdateOneWithoutSessionclassNestedInput = {
    create?: XOR<SessionTermCreateWithoutSessionclassInput, SessionTermUncheckedCreateWithoutSessionclassInput>
    connectOrCreate?: SessionTermCreateOrConnectWithoutSessionclassInput
    upsert?: SessionTermUpsertWithoutSessionclassInput
    disconnect?: SessionTermWhereInput | boolean
    delete?: SessionTermWhereInput | boolean
    connect?: SessionTermWhereUniqueInput
    update?: XOR<XOR<SessionTermUpdateToOneWithWhereWithoutSessionclassInput, SessionTermUpdateWithoutSessionclassInput>, SessionTermUncheckedUpdateWithoutSessionclassInput>
  }

  export type SchoolSubjectCreateNestedOneWithoutSessionClassSubjectInput = {
    create?: XOR<SchoolSubjectCreateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedCreateWithoutSessionClassSubjectInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutSessionClassSubjectInput
    connect?: SchoolSubjectWhereUniqueInput
  }

  export type SchoolSubjectUpdateOneRequiredWithoutSessionClassSubjectNestedInput = {
    create?: XOR<SchoolSubjectCreateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedCreateWithoutSessionClassSubjectInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutSessionClassSubjectInput
    upsert?: SchoolSubjectUpsertWithoutSessionClassSubjectInput
    connect?: SchoolSubjectWhereUniqueInput
    update?: XOR<XOR<SchoolSubjectUpdateToOneWithWhereWithoutSessionClassSubjectInput, SchoolSubjectUpdateWithoutSessionClassSubjectInput>, SchoolSubjectUncheckedUpdateWithoutSessionClassSubjectInput>
  }

  export type StudentCreateNestedOneWithoutStudentTrackingInput = {
    create?: XOR<StudentCreateWithoutStudentTrackingInput, StudentUncheckedCreateWithoutStudentTrackingInput>
    connectOrCreate?: StudentCreateOrConnectWithoutStudentTrackingInput
    connect?: StudentWhereUniqueInput
  }

  export type StudentUpdateOneRequiredWithoutStudentTrackingNestedInput = {
    create?: XOR<StudentCreateWithoutStudentTrackingInput, StudentUncheckedCreateWithoutStudentTrackingInput>
    connectOrCreate?: StudentCreateOrConnectWithoutStudentTrackingInput
    upsert?: StudentUpsertWithoutStudentTrackingInput
    connect?: StudentWhereUniqueInput
    update?: XOR<XOR<StudentUpdateToOneWithWhereWithoutStudentTrackingInput, StudentUpdateWithoutStudentTrackingInput>, StudentUncheckedUpdateWithoutStudentTrackingInput>
  }

  export type ExamScoreSetupLinkCreateNestedManyWithoutScoresetupInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput> | ExamScoreSetupLinkCreateWithoutScoresetupInput[] | ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput | ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput[]
    createMany?: ExamScoreSetupLinkCreateManyScoresetupInputEnvelope
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
  }

  export type ExamScoreSetupLinkUncheckedCreateNestedManyWithoutScoresetupInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput> | ExamScoreSetupLinkCreateWithoutScoresetupInput[] | ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput | ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput[]
    createMany?: ExamScoreSetupLinkCreateManyScoresetupInputEnvelope
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
  }

  export type ExamScoreSetupLinkUpdateManyWithoutScoresetupNestedInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput> | ExamScoreSetupLinkCreateWithoutScoresetupInput[] | ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput | ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput[]
    upsert?: ExamScoreSetupLinkUpsertWithWhereUniqueWithoutScoresetupInput | ExamScoreSetupLinkUpsertWithWhereUniqueWithoutScoresetupInput[]
    createMany?: ExamScoreSetupLinkCreateManyScoresetupInputEnvelope
    set?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    disconnect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    delete?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    update?: ExamScoreSetupLinkUpdateWithWhereUniqueWithoutScoresetupInput | ExamScoreSetupLinkUpdateWithWhereUniqueWithoutScoresetupInput[]
    updateMany?: ExamScoreSetupLinkUpdateManyWithWhereWithoutScoresetupInput | ExamScoreSetupLinkUpdateManyWithWhereWithoutScoresetupInput[]
    deleteMany?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
  }

  export type ExamScoreSetupLinkUncheckedUpdateManyWithoutScoresetupNestedInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput> | ExamScoreSetupLinkCreateWithoutScoresetupInput[] | ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput | ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput[]
    upsert?: ExamScoreSetupLinkUpsertWithWhereUniqueWithoutScoresetupInput | ExamScoreSetupLinkUpsertWithWhereUniqueWithoutScoresetupInput[]
    createMany?: ExamScoreSetupLinkCreateManyScoresetupInputEnvelope
    set?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    disconnect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    delete?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    update?: ExamScoreSetupLinkUpdateWithWhereUniqueWithoutScoresetupInput | ExamScoreSetupLinkUpdateWithWhereUniqueWithoutScoresetupInput[]
    updateMany?: ExamScoreSetupLinkUpdateManyWithWhereWithoutScoresetupInput | ExamScoreSetupLinkUpdateManyWithWhereWithoutScoresetupInput[]
    deleteMany?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
  }

  export type ExamCreateNestedManyWithoutExamtypeInput = {
    create?: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput> | ExamCreateWithoutExamtypeInput[] | ExamUncheckedCreateWithoutExamtypeInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamtypeInput | ExamCreateOrConnectWithoutExamtypeInput[]
    createMany?: ExamCreateManyExamtypeInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type ExamUncheckedCreateNestedManyWithoutExamtypeInput = {
    create?: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput> | ExamCreateWithoutExamtypeInput[] | ExamUncheckedCreateWithoutExamtypeInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamtypeInput | ExamCreateOrConnectWithoutExamtypeInput[]
    createMany?: ExamCreateManyExamtypeInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type ExamUpdateManyWithoutExamtypeNestedInput = {
    create?: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput> | ExamCreateWithoutExamtypeInput[] | ExamUncheckedCreateWithoutExamtypeInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamtypeInput | ExamCreateOrConnectWithoutExamtypeInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutExamtypeInput | ExamUpsertWithWhereUniqueWithoutExamtypeInput[]
    createMany?: ExamCreateManyExamtypeInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutExamtypeInput | ExamUpdateWithWhereUniqueWithoutExamtypeInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutExamtypeInput | ExamUpdateManyWithWhereWithoutExamtypeInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type ExamUncheckedUpdateManyWithoutExamtypeNestedInput = {
    create?: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput> | ExamCreateWithoutExamtypeInput[] | ExamUncheckedCreateWithoutExamtypeInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamtypeInput | ExamCreateOrConnectWithoutExamtypeInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutExamtypeInput | ExamUpsertWithWhereUniqueWithoutExamtypeInput[]
    createMany?: ExamCreateManyExamtypeInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutExamtypeInput | ExamUpdateWithWhereUniqueWithoutExamtypeInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutExamtypeInput | ExamUpdateManyWithWhereWithoutExamtypeInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type ExamCreateNestedManyWithoutExamcategoryInput = {
    create?: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput> | ExamCreateWithoutExamcategoryInput[] | ExamUncheckedCreateWithoutExamcategoryInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamcategoryInput | ExamCreateOrConnectWithoutExamcategoryInput[]
    createMany?: ExamCreateManyExamcategoryInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type ExamUncheckedCreateNestedManyWithoutExamcategoryInput = {
    create?: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput> | ExamCreateWithoutExamcategoryInput[] | ExamUncheckedCreateWithoutExamcategoryInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamcategoryInput | ExamCreateOrConnectWithoutExamcategoryInput[]
    createMany?: ExamCreateManyExamcategoryInputEnvelope
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
  }

  export type ExamUpdateManyWithoutExamcategoryNestedInput = {
    create?: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput> | ExamCreateWithoutExamcategoryInput[] | ExamUncheckedCreateWithoutExamcategoryInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamcategoryInput | ExamCreateOrConnectWithoutExamcategoryInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutExamcategoryInput | ExamUpsertWithWhereUniqueWithoutExamcategoryInput[]
    createMany?: ExamCreateManyExamcategoryInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutExamcategoryInput | ExamUpdateWithWhereUniqueWithoutExamcategoryInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutExamcategoryInput | ExamUpdateManyWithWhereWithoutExamcategoryInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type ExamUncheckedUpdateManyWithoutExamcategoryNestedInput = {
    create?: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput> | ExamCreateWithoutExamcategoryInput[] | ExamUncheckedCreateWithoutExamcategoryInput[]
    connectOrCreate?: ExamCreateOrConnectWithoutExamcategoryInput | ExamCreateOrConnectWithoutExamcategoryInput[]
    upsert?: ExamUpsertWithWhereUniqueWithoutExamcategoryInput | ExamUpsertWithWhereUniqueWithoutExamcategoryInput[]
    createMany?: ExamCreateManyExamcategoryInputEnvelope
    set?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    disconnect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    delete?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    connect?: ExamWhereUniqueInput | ExamWhereUniqueInput[]
    update?: ExamUpdateWithWhereUniqueWithoutExamcategoryInput | ExamUpdateWithWhereUniqueWithoutExamcategoryInput[]
    updateMany?: ExamUpdateManyWithWhereWithoutExamcategoryInput | ExamUpdateManyWithWhereWithoutExamcategoryInput[]
    deleteMany?: ExamScalarWhereInput | ExamScalarWhereInput[]
  }

  export type ExamScoreSetupLinkCreateNestedManyWithoutExamInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput> | ExamScoreSetupLinkCreateWithoutExamInput[] | ExamScoreSetupLinkUncheckedCreateWithoutExamInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutExamInput | ExamScoreSetupLinkCreateOrConnectWithoutExamInput[]
    createMany?: ExamScoreSetupLinkCreateManyExamInputEnvelope
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
  }

  export type TermCreateNestedOneWithoutExamsInput = {
    create?: XOR<TermCreateWithoutExamsInput, TermUncheckedCreateWithoutExamsInput>
    connectOrCreate?: TermCreateOrConnectWithoutExamsInput
    connect?: TermWhereUniqueInput
  }

  export type ClassTemplateCreateNestedOneWithoutExamInput = {
    create?: XOR<ClassTemplateCreateWithoutExamInput, ClassTemplateUncheckedCreateWithoutExamInput>
    connectOrCreate?: ClassTemplateCreateOrConnectWithoutExamInput
    connect?: ClassTemplateWhereUniqueInput
  }

  export type SchoolSubjectCreateNestedOneWithoutExamInput = {
    create?: XOR<SchoolSubjectCreateWithoutExamInput, SchoolSubjectUncheckedCreateWithoutExamInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutExamInput
    connect?: SchoolSubjectWhereUniqueInput
  }

  export type ExamTypeCreateNestedOneWithoutExamInput = {
    create?: XOR<ExamTypeCreateWithoutExamInput, ExamTypeUncheckedCreateWithoutExamInput>
    connectOrCreate?: ExamTypeCreateOrConnectWithoutExamInput
    connect?: ExamTypeWhereUniqueInput
  }

  export type ExamCategoryCreateNestedOneWithoutExamInput = {
    create?: XOR<ExamCategoryCreateWithoutExamInput, ExamCategoryUncheckedCreateWithoutExamInput>
    connectOrCreate?: ExamCategoryCreateOrConnectWithoutExamInput
    connect?: ExamCategoryWhereUniqueInput
  }

  export type ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput> | ExamScoreSetupLinkCreateWithoutExamInput[] | ExamScoreSetupLinkUncheckedCreateWithoutExamInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutExamInput | ExamScoreSetupLinkCreateOrConnectWithoutExamInput[]
    createMany?: ExamScoreSetupLinkCreateManyExamInputEnvelope
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
  }

  export type ExamScoreSetupLinkUpdateManyWithoutExamNestedInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput> | ExamScoreSetupLinkCreateWithoutExamInput[] | ExamScoreSetupLinkUncheckedCreateWithoutExamInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutExamInput | ExamScoreSetupLinkCreateOrConnectWithoutExamInput[]
    upsert?: ExamScoreSetupLinkUpsertWithWhereUniqueWithoutExamInput | ExamScoreSetupLinkUpsertWithWhereUniqueWithoutExamInput[]
    createMany?: ExamScoreSetupLinkCreateManyExamInputEnvelope
    set?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    disconnect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    delete?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    update?: ExamScoreSetupLinkUpdateWithWhereUniqueWithoutExamInput | ExamScoreSetupLinkUpdateWithWhereUniqueWithoutExamInput[]
    updateMany?: ExamScoreSetupLinkUpdateManyWithWhereWithoutExamInput | ExamScoreSetupLinkUpdateManyWithWhereWithoutExamInput[]
    deleteMany?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
  }

  export type TermUpdateOneWithoutExamsNestedInput = {
    create?: XOR<TermCreateWithoutExamsInput, TermUncheckedCreateWithoutExamsInput>
    connectOrCreate?: TermCreateOrConnectWithoutExamsInput
    upsert?: TermUpsertWithoutExamsInput
    disconnect?: TermWhereInput | boolean
    delete?: TermWhereInput | boolean
    connect?: TermWhereUniqueInput
    update?: XOR<XOR<TermUpdateToOneWithWhereWithoutExamsInput, TermUpdateWithoutExamsInput>, TermUncheckedUpdateWithoutExamsInput>
  }

  export type ClassTemplateUpdateOneWithoutExamNestedInput = {
    create?: XOR<ClassTemplateCreateWithoutExamInput, ClassTemplateUncheckedCreateWithoutExamInput>
    connectOrCreate?: ClassTemplateCreateOrConnectWithoutExamInput
    upsert?: ClassTemplateUpsertWithoutExamInput
    disconnect?: ClassTemplateWhereInput | boolean
    delete?: ClassTemplateWhereInput | boolean
    connect?: ClassTemplateWhereUniqueInput
    update?: XOR<XOR<ClassTemplateUpdateToOneWithWhereWithoutExamInput, ClassTemplateUpdateWithoutExamInput>, ClassTemplateUncheckedUpdateWithoutExamInput>
  }

  export type SchoolSubjectUpdateOneWithoutExamNestedInput = {
    create?: XOR<SchoolSubjectCreateWithoutExamInput, SchoolSubjectUncheckedCreateWithoutExamInput>
    connectOrCreate?: SchoolSubjectCreateOrConnectWithoutExamInput
    upsert?: SchoolSubjectUpsertWithoutExamInput
    disconnect?: SchoolSubjectWhereInput | boolean
    delete?: SchoolSubjectWhereInput | boolean
    connect?: SchoolSubjectWhereUniqueInput
    update?: XOR<XOR<SchoolSubjectUpdateToOneWithWhereWithoutExamInput, SchoolSubjectUpdateWithoutExamInput>, SchoolSubjectUncheckedUpdateWithoutExamInput>
  }

  export type ExamTypeUpdateOneWithoutExamNestedInput = {
    create?: XOR<ExamTypeCreateWithoutExamInput, ExamTypeUncheckedCreateWithoutExamInput>
    connectOrCreate?: ExamTypeCreateOrConnectWithoutExamInput
    upsert?: ExamTypeUpsertWithoutExamInput
    disconnect?: ExamTypeWhereInput | boolean
    delete?: ExamTypeWhereInput | boolean
    connect?: ExamTypeWhereUniqueInput
    update?: XOR<XOR<ExamTypeUpdateToOneWithWhereWithoutExamInput, ExamTypeUpdateWithoutExamInput>, ExamTypeUncheckedUpdateWithoutExamInput>
  }

  export type ExamCategoryUpdateOneWithoutExamNestedInput = {
    create?: XOR<ExamCategoryCreateWithoutExamInput, ExamCategoryUncheckedCreateWithoutExamInput>
    connectOrCreate?: ExamCategoryCreateOrConnectWithoutExamInput
    upsert?: ExamCategoryUpsertWithoutExamInput
    disconnect?: ExamCategoryWhereInput | boolean
    delete?: ExamCategoryWhereInput | boolean
    connect?: ExamCategoryWhereUniqueInput
    update?: XOR<XOR<ExamCategoryUpdateToOneWithWhereWithoutExamInput, ExamCategoryUpdateWithoutExamInput>, ExamCategoryUncheckedUpdateWithoutExamInput>
  }

  export type ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput = {
    create?: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput> | ExamScoreSetupLinkCreateWithoutExamInput[] | ExamScoreSetupLinkUncheckedCreateWithoutExamInput[]
    connectOrCreate?: ExamScoreSetupLinkCreateOrConnectWithoutExamInput | ExamScoreSetupLinkCreateOrConnectWithoutExamInput[]
    upsert?: ExamScoreSetupLinkUpsertWithWhereUniqueWithoutExamInput | ExamScoreSetupLinkUpsertWithWhereUniqueWithoutExamInput[]
    createMany?: ExamScoreSetupLinkCreateManyExamInputEnvelope
    set?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    disconnect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    delete?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    connect?: ExamScoreSetupLinkWhereUniqueInput | ExamScoreSetupLinkWhereUniqueInput[]
    update?: ExamScoreSetupLinkUpdateWithWhereUniqueWithoutExamInput | ExamScoreSetupLinkUpdateWithWhereUniqueWithoutExamInput[]
    updateMany?: ExamScoreSetupLinkUpdateManyWithWhereWithoutExamInput | ExamScoreSetupLinkUpdateManyWithWhereWithoutExamInput[]
    deleteMany?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
  }

  export type FloatFieldUpdateOperationsInput = {
    set?: number
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type ExamCreateNestedOneWithoutExamscoresetuplinkInput = {
    create?: XOR<ExamCreateWithoutExamscoresetuplinkInput, ExamUncheckedCreateWithoutExamscoresetuplinkInput>
    connectOrCreate?: ExamCreateOrConnectWithoutExamscoresetuplinkInput
    connect?: ExamWhereUniqueInput
  }

  export type SessionClassScoreSetupCreateNestedOneWithoutExamscoresetuplinkInput = {
    create?: XOR<SessionClassScoreSetupCreateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedCreateWithoutExamscoresetuplinkInput>
    connectOrCreate?: SessionClassScoreSetupCreateOrConnectWithoutExamscoresetuplinkInput
    connect?: SessionClassScoreSetupWhereUniqueInput
  }

  export type ExamUpdateOneRequiredWithoutExamscoresetuplinkNestedInput = {
    create?: XOR<ExamCreateWithoutExamscoresetuplinkInput, ExamUncheckedCreateWithoutExamscoresetuplinkInput>
    connectOrCreate?: ExamCreateOrConnectWithoutExamscoresetuplinkInput
    upsert?: ExamUpsertWithoutExamscoresetuplinkInput
    connect?: ExamWhereUniqueInput
    update?: XOR<XOR<ExamUpdateToOneWithWhereWithoutExamscoresetuplinkInput, ExamUpdateWithoutExamscoresetuplinkInput>, ExamUncheckedUpdateWithoutExamscoresetuplinkInput>
  }

  export type SessionClassScoreSetupUpdateOneRequiredWithoutExamscoresetuplinkNestedInput = {
    create?: XOR<SessionClassScoreSetupCreateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedCreateWithoutExamscoresetuplinkInput>
    connectOrCreate?: SessionClassScoreSetupCreateOrConnectWithoutExamscoresetuplinkInput
    upsert?: SessionClassScoreSetupUpsertWithoutExamscoresetuplinkInput
    connect?: SessionClassScoreSetupWhereUniqueInput
    update?: XOR<XOR<SessionClassScoreSetupUpdateToOneWithWhereWithoutExamscoresetuplinkInput, SessionClassScoreSetupUpdateWithoutExamscoresetuplinkInput>, SessionClassScoreSetupUncheckedUpdateWithoutExamscoresetuplinkInput>
  }

  export type NullableFloatFieldUpdateOperationsInput = {
    set?: number | null
    increment?: number
    decrement?: number
    multiply?: number
    divide?: number
  }

  export type CountryCreateNestedManyWithoutRegionRelationInput = {
    create?: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput> | CountryCreateWithoutRegionRelationInput[] | CountryUncheckedCreateWithoutRegionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutRegionRelationInput | CountryCreateOrConnectWithoutRegionRelationInput[]
    createMany?: CountryCreateManyRegionRelationInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type SubregionCreateNestedManyWithoutRegionInput = {
    create?: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput> | SubregionCreateWithoutRegionInput[] | SubregionUncheckedCreateWithoutRegionInput[]
    connectOrCreate?: SubregionCreateOrConnectWithoutRegionInput | SubregionCreateOrConnectWithoutRegionInput[]
    createMany?: SubregionCreateManyRegionInputEnvelope
    connect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
  }

  export type CountryUncheckedCreateNestedManyWithoutRegionRelationInput = {
    create?: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput> | CountryCreateWithoutRegionRelationInput[] | CountryUncheckedCreateWithoutRegionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutRegionRelationInput | CountryCreateOrConnectWithoutRegionRelationInput[]
    createMany?: CountryCreateManyRegionRelationInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type SubregionUncheckedCreateNestedManyWithoutRegionInput = {
    create?: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput> | SubregionCreateWithoutRegionInput[] | SubregionUncheckedCreateWithoutRegionInput[]
    connectOrCreate?: SubregionCreateOrConnectWithoutRegionInput | SubregionCreateOrConnectWithoutRegionInput[]
    createMany?: SubregionCreateManyRegionInputEnvelope
    connect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
  }

  export type CountryUpdateManyWithoutRegionRelationNestedInput = {
    create?: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput> | CountryCreateWithoutRegionRelationInput[] | CountryUncheckedCreateWithoutRegionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutRegionRelationInput | CountryCreateOrConnectWithoutRegionRelationInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutRegionRelationInput | CountryUpsertWithWhereUniqueWithoutRegionRelationInput[]
    createMany?: CountryCreateManyRegionRelationInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutRegionRelationInput | CountryUpdateWithWhereUniqueWithoutRegionRelationInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutRegionRelationInput | CountryUpdateManyWithWhereWithoutRegionRelationInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type SubregionUpdateManyWithoutRegionNestedInput = {
    create?: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput> | SubregionCreateWithoutRegionInput[] | SubregionUncheckedCreateWithoutRegionInput[]
    connectOrCreate?: SubregionCreateOrConnectWithoutRegionInput | SubregionCreateOrConnectWithoutRegionInput[]
    upsert?: SubregionUpsertWithWhereUniqueWithoutRegionInput | SubregionUpsertWithWhereUniqueWithoutRegionInput[]
    createMany?: SubregionCreateManyRegionInputEnvelope
    set?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    disconnect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    delete?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    connect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    update?: SubregionUpdateWithWhereUniqueWithoutRegionInput | SubregionUpdateWithWhereUniqueWithoutRegionInput[]
    updateMany?: SubregionUpdateManyWithWhereWithoutRegionInput | SubregionUpdateManyWithWhereWithoutRegionInput[]
    deleteMany?: SubregionScalarWhereInput | SubregionScalarWhereInput[]
  }

  export type CountryUncheckedUpdateManyWithoutRegionRelationNestedInput = {
    create?: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput> | CountryCreateWithoutRegionRelationInput[] | CountryUncheckedCreateWithoutRegionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutRegionRelationInput | CountryCreateOrConnectWithoutRegionRelationInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutRegionRelationInput | CountryUpsertWithWhereUniqueWithoutRegionRelationInput[]
    createMany?: CountryCreateManyRegionRelationInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutRegionRelationInput | CountryUpdateWithWhereUniqueWithoutRegionRelationInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutRegionRelationInput | CountryUpdateManyWithWhereWithoutRegionRelationInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type SubregionUncheckedUpdateManyWithoutRegionNestedInput = {
    create?: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput> | SubregionCreateWithoutRegionInput[] | SubregionUncheckedCreateWithoutRegionInput[]
    connectOrCreate?: SubregionCreateOrConnectWithoutRegionInput | SubregionCreateOrConnectWithoutRegionInput[]
    upsert?: SubregionUpsertWithWhereUniqueWithoutRegionInput | SubregionUpsertWithWhereUniqueWithoutRegionInput[]
    createMany?: SubregionCreateManyRegionInputEnvelope
    set?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    disconnect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    delete?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    connect?: SubregionWhereUniqueInput | SubregionWhereUniqueInput[]
    update?: SubregionUpdateWithWhereUniqueWithoutRegionInput | SubregionUpdateWithWhereUniqueWithoutRegionInput[]
    updateMany?: SubregionUpdateManyWithWhereWithoutRegionInput | SubregionUpdateManyWithWhereWithoutRegionInput[]
    deleteMany?: SubregionScalarWhereInput | SubregionScalarWhereInput[]
  }

  export type RegionCreateNestedOneWithoutSubregionsInput = {
    create?: XOR<RegionCreateWithoutSubregionsInput, RegionUncheckedCreateWithoutSubregionsInput>
    connectOrCreate?: RegionCreateOrConnectWithoutSubregionsInput
    connect?: RegionWhereUniqueInput
  }

  export type CountryCreateNestedManyWithoutSubregionRelationInput = {
    create?: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput> | CountryCreateWithoutSubregionRelationInput[] | CountryUncheckedCreateWithoutSubregionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutSubregionRelationInput | CountryCreateOrConnectWithoutSubregionRelationInput[]
    createMany?: CountryCreateManySubregionRelationInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type CountryUncheckedCreateNestedManyWithoutSubregionRelationInput = {
    create?: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput> | CountryCreateWithoutSubregionRelationInput[] | CountryUncheckedCreateWithoutSubregionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutSubregionRelationInput | CountryCreateOrConnectWithoutSubregionRelationInput[]
    createMany?: CountryCreateManySubregionRelationInputEnvelope
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
  }

  export type RegionUpdateOneRequiredWithoutSubregionsNestedInput = {
    create?: XOR<RegionCreateWithoutSubregionsInput, RegionUncheckedCreateWithoutSubregionsInput>
    connectOrCreate?: RegionCreateOrConnectWithoutSubregionsInput
    upsert?: RegionUpsertWithoutSubregionsInput
    connect?: RegionWhereUniqueInput
    update?: XOR<XOR<RegionUpdateToOneWithWhereWithoutSubregionsInput, RegionUpdateWithoutSubregionsInput>, RegionUncheckedUpdateWithoutSubregionsInput>
  }

  export type CountryUpdateManyWithoutSubregionRelationNestedInput = {
    create?: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput> | CountryCreateWithoutSubregionRelationInput[] | CountryUncheckedCreateWithoutSubregionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutSubregionRelationInput | CountryCreateOrConnectWithoutSubregionRelationInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutSubregionRelationInput | CountryUpsertWithWhereUniqueWithoutSubregionRelationInput[]
    createMany?: CountryCreateManySubregionRelationInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutSubregionRelationInput | CountryUpdateWithWhereUniqueWithoutSubregionRelationInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutSubregionRelationInput | CountryUpdateManyWithWhereWithoutSubregionRelationInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type CountryUncheckedUpdateManyWithoutSubregionRelationNestedInput = {
    create?: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput> | CountryCreateWithoutSubregionRelationInput[] | CountryUncheckedCreateWithoutSubregionRelationInput[]
    connectOrCreate?: CountryCreateOrConnectWithoutSubregionRelationInput | CountryCreateOrConnectWithoutSubregionRelationInput[]
    upsert?: CountryUpsertWithWhereUniqueWithoutSubregionRelationInput | CountryUpsertWithWhereUniqueWithoutSubregionRelationInput[]
    createMany?: CountryCreateManySubregionRelationInputEnvelope
    set?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    disconnect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    delete?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    connect?: CountryWhereUniqueInput | CountryWhereUniqueInput[]
    update?: CountryUpdateWithWhereUniqueWithoutSubregionRelationInput | CountryUpdateWithWhereUniqueWithoutSubregionRelationInput[]
    updateMany?: CountryUpdateManyWithWhereWithoutSubregionRelationInput | CountryUpdateManyWithWhereWithoutSubregionRelationInput[]
    deleteMany?: CountryScalarWhereInput | CountryScalarWhereInput[]
  }

  export type RegionCreateNestedOneWithoutCountriesInput = {
    create?: XOR<RegionCreateWithoutCountriesInput, RegionUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: RegionCreateOrConnectWithoutCountriesInput
    connect?: RegionWhereUniqueInput
  }

  export type SubregionCreateNestedOneWithoutCountriesInput = {
    create?: XOR<SubregionCreateWithoutCountriesInput, SubregionUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: SubregionCreateOrConnectWithoutCountriesInput
    connect?: SubregionWhereUniqueInput
  }

  export type StateCreateNestedManyWithoutCountryInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CityCreateNestedManyWithoutCountryInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type StateUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
  }

  export type CityUncheckedCreateNestedManyWithoutCountryInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type RegionUpdateOneWithoutCountriesNestedInput = {
    create?: XOR<RegionCreateWithoutCountriesInput, RegionUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: RegionCreateOrConnectWithoutCountriesInput
    upsert?: RegionUpsertWithoutCountriesInput
    disconnect?: RegionWhereInput | boolean
    delete?: RegionWhereInput | boolean
    connect?: RegionWhereUniqueInput
    update?: XOR<XOR<RegionUpdateToOneWithWhereWithoutCountriesInput, RegionUpdateWithoutCountriesInput>, RegionUncheckedUpdateWithoutCountriesInput>
  }

  export type SubregionUpdateOneWithoutCountriesNestedInput = {
    create?: XOR<SubregionCreateWithoutCountriesInput, SubregionUncheckedCreateWithoutCountriesInput>
    connectOrCreate?: SubregionCreateOrConnectWithoutCountriesInput
    upsert?: SubregionUpsertWithoutCountriesInput
    disconnect?: SubregionWhereInput | boolean
    delete?: SubregionWhereInput | boolean
    connect?: SubregionWhereUniqueInput
    update?: XOR<XOR<SubregionUpdateToOneWithWhereWithoutCountriesInput, SubregionUpdateWithoutCountriesInput>, SubregionUncheckedUpdateWithoutCountriesInput>
  }

  export type StateUpdateManyWithoutCountryNestedInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCountryInput | StateUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCountryInput | StateUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCountryInput | StateUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CityUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutCountryInput | CityUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutCountryInput | CityUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CityUpdateManyWithWhereWithoutCountryInput | CityUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type StateUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput> | StateCreateWithoutCountryInput[] | StateUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: StateCreateOrConnectWithoutCountryInput | StateCreateOrConnectWithoutCountryInput[]
    upsert?: StateUpsertWithWhereUniqueWithoutCountryInput | StateUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: StateCreateManyCountryInputEnvelope
    set?: StateWhereUniqueInput | StateWhereUniqueInput[]
    disconnect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    delete?: StateWhereUniqueInput | StateWhereUniqueInput[]
    connect?: StateWhereUniqueInput | StateWhereUniqueInput[]
    update?: StateUpdateWithWhereUniqueWithoutCountryInput | StateUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: StateUpdateManyWithWhereWithoutCountryInput | StateUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: StateScalarWhereInput | StateScalarWhereInput[]
  }

  export type CityUncheckedUpdateManyWithoutCountryNestedInput = {
    create?: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput> | CityCreateWithoutCountryInput[] | CityUncheckedCreateWithoutCountryInput[]
    connectOrCreate?: CityCreateOrConnectWithoutCountryInput | CityCreateOrConnectWithoutCountryInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutCountryInput | CityUpsertWithWhereUniqueWithoutCountryInput[]
    createMany?: CityCreateManyCountryInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutCountryInput | CityUpdateWithWhereUniqueWithoutCountryInput[]
    updateMany?: CityUpdateManyWithWhereWithoutCountryInput | CityUpdateManyWithWhereWithoutCountryInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type CountryCreateNestedOneWithoutStatesInput = {
    create?: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutStatesInput
    connect?: CountryWhereUniqueInput
  }

  export type CityCreateNestedManyWithoutStateInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type CityUncheckedCreateNestedManyWithoutStateInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
  }

  export type CountryUpdateOneRequiredWithoutStatesNestedInput = {
    create?: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutStatesInput
    upsert?: CountryUpsertWithoutStatesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutStatesInput, CountryUpdateWithoutStatesInput>, CountryUncheckedUpdateWithoutStatesInput>
  }

  export type CityUpdateManyWithoutStateNestedInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutStateInput | CityUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutStateInput | CityUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: CityUpdateManyWithWhereWithoutStateInput | CityUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type CityUncheckedUpdateManyWithoutStateNestedInput = {
    create?: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput> | CityCreateWithoutStateInput[] | CityUncheckedCreateWithoutStateInput[]
    connectOrCreate?: CityCreateOrConnectWithoutStateInput | CityCreateOrConnectWithoutStateInput[]
    upsert?: CityUpsertWithWhereUniqueWithoutStateInput | CityUpsertWithWhereUniqueWithoutStateInput[]
    createMany?: CityCreateManyStateInputEnvelope
    set?: CityWhereUniqueInput | CityWhereUniqueInput[]
    disconnect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    delete?: CityWhereUniqueInput | CityWhereUniqueInput[]
    connect?: CityWhereUniqueInput | CityWhereUniqueInput[]
    update?: CityUpdateWithWhereUniqueWithoutStateInput | CityUpdateWithWhereUniqueWithoutStateInput[]
    updateMany?: CityUpdateManyWithWhereWithoutStateInput | CityUpdateManyWithWhereWithoutStateInput[]
    deleteMany?: CityScalarWhereInput | CityScalarWhereInput[]
  }

  export type StateCreateNestedOneWithoutCitiesInput = {
    create?: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: StateCreateOrConnectWithoutCitiesInput
    connect?: StateWhereUniqueInput
  }

  export type CountryCreateNestedOneWithoutCitiesInput = {
    create?: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutCitiesInput
    connect?: CountryWhereUniqueInput
  }

  export type StateUpdateOneRequiredWithoutCitiesNestedInput = {
    create?: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: StateCreateOrConnectWithoutCitiesInput
    upsert?: StateUpsertWithoutCitiesInput
    connect?: StateWhereUniqueInput
    update?: XOR<XOR<StateUpdateToOneWithWhereWithoutCitiesInput, StateUpdateWithoutCitiesInput>, StateUncheckedUpdateWithoutCitiesInput>
  }

  export type CountryUpdateOneRequiredWithoutCitiesNestedInput = {
    create?: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    connectOrCreate?: CountryCreateOrConnectWithoutCitiesInput
    upsert?: CountryUpsertWithoutCitiesInput
    connect?: CountryWhereUniqueInput
    update?: XOR<XOR<CountryUpdateToOneWithWhereWithoutCitiesInput, CountryUpdateWithoutCitiesInput>, CountryUncheckedUpdateWithoutCitiesInput>
  }

  export type NestedStringFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringFilter<$PrismaModel> | string
  }

  export type NestedIntNullableFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableFilter<$PrismaModel> | number | null
  }

  export type NestedStringNullableFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringNullableFilter<$PrismaModel> | string | null
  }

  export type NestedIntFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntFilter<$PrismaModel> | number
  }

  export type NestedStringWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel>
    in?: string[]
    notIn?: string[]
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringWithAggregatesFilter<$PrismaModel> | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedStringFilter<$PrismaModel>
    _max?: NestedStringFilter<$PrismaModel>
  }

  export type NestedIntNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedIntNullableFilter<$PrismaModel>
    _max?: NestedIntNullableFilter<$PrismaModel>
  }

  export type NestedFloatNullableFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableFilter<$PrismaModel> | number | null
  }

  export type NestedStringNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: string | StringFieldRefInput<$PrismaModel> | null
    in?: string[] | null
    notIn?: string[] | null
    lt?: string | StringFieldRefInput<$PrismaModel>
    lte?: string | StringFieldRefInput<$PrismaModel>
    gt?: string | StringFieldRefInput<$PrismaModel>
    gte?: string | StringFieldRefInput<$PrismaModel>
    contains?: string | StringFieldRefInput<$PrismaModel>
    startsWith?: string | StringFieldRefInput<$PrismaModel>
    endsWith?: string | StringFieldRefInput<$PrismaModel>
    search?: string
    not?: NestedStringNullableWithAggregatesFilter<$PrismaModel> | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedStringNullableFilter<$PrismaModel>
    _max?: NestedStringNullableFilter<$PrismaModel>
  }

  export type NestedIntWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | IntFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | IntFieldRefInput<$PrismaModel>
    lte?: number | IntFieldRefInput<$PrismaModel>
    gt?: number | IntFieldRefInput<$PrismaModel>
    gte?: number | IntFieldRefInput<$PrismaModel>
    not?: NestedIntWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedIntFilter<$PrismaModel>
    _min?: NestedIntFilter<$PrismaModel>
    _max?: NestedIntFilter<$PrismaModel>
  }

  export type NestedFloatFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatFilter<$PrismaModel> | number
  }

  export type NestedDateTimeFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[]
    notIn?: Date[] | string[]
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeFilter<$PrismaModel> | Date | string
  }

  export type NestedDateTimeNullableFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | null
    notIn?: Date[] | string[] | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableFilter<$PrismaModel> | Date | string | null
  }

  export type NestedDateTimeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    in?: Date[] | string[]
    notIn?: Date[] | string[]
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeWithAggregatesFilter<$PrismaModel> | Date | string
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedDateTimeFilter<$PrismaModel>
    _max?: NestedDateTimeFilter<$PrismaModel>
  }

  export type NestedDateTimeNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Date | string | DateTimeFieldRefInput<$PrismaModel> | null
    in?: Date[] | string[] | null
    notIn?: Date[] | string[] | null
    lt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    lte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gt?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    gte?: Date | string | DateTimeFieldRefInput<$PrismaModel>
    not?: NestedDateTimeNullableWithAggregatesFilter<$PrismaModel> | Date | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _min?: NestedDateTimeNullableFilter<$PrismaModel>
    _max?: NestedDateTimeNullableFilter<$PrismaModel>
  }
  export type NestedJsonNullableFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<NestedJsonNullableFilterBase<$PrismaModel>>, Exclude<keyof Required<NestedJsonNullableFilterBase<$PrismaModel>>, 'path'>>,
        Required<NestedJsonNullableFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<NestedJsonNullableFilterBase<$PrismaModel>>, 'path'>>

  export type NestedJsonNullableFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type NestedEnumbook_typeFilter<$PrismaModel = never> = {
    equals?: $Enums.book_type | Enumbook_typeFieldRefInput<$PrismaModel>
    in?: $Enums.book_type[]
    notIn?: $Enums.book_type[]
    not?: NestedEnumbook_typeFilter<$PrismaModel> | $Enums.book_type
  }

  export type NestedEnumbook_typeWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.book_type | Enumbook_typeFieldRefInput<$PrismaModel>
    in?: $Enums.book_type[]
    notIn?: $Enums.book_type[]
    not?: NestedEnumbook_typeWithAggregatesFilter<$PrismaModel> | $Enums.book_type
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumbook_typeFilter<$PrismaModel>
    _max?: NestedEnumbook_typeFilter<$PrismaModel>
  }

  export type NestedDecimalFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    in?: Decimal[] | DecimalJsLike[] | number[] | string[]
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[]
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string
  }

  export type NestedDecimalWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    in?: Decimal[] | DecimalJsLike[] | number[] | string[]
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[]
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedDecimalFilter<$PrismaModel>
    _sum?: NestedDecimalFilter<$PrismaModel>
    _min?: NestedDecimalFilter<$PrismaModel>
    _max?: NestedDecimalFilter<$PrismaModel>
  }

  export type NestedEnumusers_staff_deptFilter<$PrismaModel = never> = {
    equals?: $Enums.users_staff_dept | Enumusers_staff_deptFieldRefInput<$PrismaModel>
    in?: $Enums.users_staff_dept[]
    notIn?: $Enums.users_staff_dept[]
    not?: NestedEnumusers_staff_deptFilter<$PrismaModel> | $Enums.users_staff_dept
  }

  export type NestedEnumusers_staff_deptWithAggregatesFilter<$PrismaModel = never> = {
    equals?: $Enums.users_staff_dept | Enumusers_staff_deptFieldRefInput<$PrismaModel>
    in?: $Enums.users_staff_dept[]
    notIn?: $Enums.users_staff_dept[]
    not?: NestedEnumusers_staff_deptWithAggregatesFilter<$PrismaModel> | $Enums.users_staff_dept
    _count?: NestedIntFilter<$PrismaModel>
    _min?: NestedEnumusers_staff_deptFilter<$PrismaModel>
    _max?: NestedEnumusers_staff_deptFilter<$PrismaModel>
  }

  export type NestedDecimalNullableFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null
    in?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalNullableFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null
  }

  export type NestedDecimalNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel> | null
    in?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    notIn?: Decimal[] | DecimalJsLike[] | number[] | string[] | null
    lt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    lte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gt?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    gte?: Decimal | DecimalJsLike | number | string | DecimalFieldRefInput<$PrismaModel>
    not?: NestedDecimalNullableWithAggregatesFilter<$PrismaModel> | Decimal | DecimalJsLike | number | string | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedDecimalNullableFilter<$PrismaModel>
    _sum?: NestedDecimalNullableFilter<$PrismaModel>
    _min?: NestedDecimalNullableFilter<$PrismaModel>
    _max?: NestedDecimalNullableFilter<$PrismaModel>
  }

  export type NestedFloatWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel>
    in?: number[]
    notIn?: number[]
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatWithAggregatesFilter<$PrismaModel> | number
    _count?: NestedIntFilter<$PrismaModel>
    _avg?: NestedFloatFilter<$PrismaModel>
    _sum?: NestedFloatFilter<$PrismaModel>
    _min?: NestedFloatFilter<$PrismaModel>
    _max?: NestedFloatFilter<$PrismaModel>
  }

  export type NestedFloatNullableWithAggregatesFilter<$PrismaModel = never> = {
    equals?: number | FloatFieldRefInput<$PrismaModel> | null
    in?: number[] | null
    notIn?: number[] | null
    lt?: number | FloatFieldRefInput<$PrismaModel>
    lte?: number | FloatFieldRefInput<$PrismaModel>
    gt?: number | FloatFieldRefInput<$PrismaModel>
    gte?: number | FloatFieldRefInput<$PrismaModel>
    not?: NestedFloatNullableWithAggregatesFilter<$PrismaModel> | number | null
    _count?: NestedIntNullableFilter<$PrismaModel>
    _avg?: NestedFloatNullableFilter<$PrismaModel>
    _sum?: NestedFloatNullableFilter<$PrismaModel>
    _min?: NestedFloatNullableFilter<$PrismaModel>
    _max?: NestedFloatNullableFilter<$PrismaModel>
  }
  export type NestedJsonFilter<$PrismaModel = never> =
    | PatchUndefined<
        Either<Required<NestedJsonFilterBase<$PrismaModel>>, Exclude<keyof Required<NestedJsonFilterBase<$PrismaModel>>, 'path'>>,
        Required<NestedJsonFilterBase<$PrismaModel>>
      >
    | OptionalFlat<Omit<Required<NestedJsonFilterBase<$PrismaModel>>, 'path'>>

  export type NestedJsonFilterBase<$PrismaModel = never> = {
    equals?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
    path?: string
    mode?: QueryMode | EnumQueryModeFieldRefInput<$PrismaModel>
    string_contains?: string | StringFieldRefInput<$PrismaModel>
    string_starts_with?: string | StringFieldRefInput<$PrismaModel>
    string_ends_with?: string | StringFieldRefInput<$PrismaModel>
    array_starts_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_ends_with?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    array_contains?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | null
    lt?: InputJsonValue
    lte?: InputJsonValue
    gt?: InputJsonValue
    gte?: InputJsonValue
    not?: InputJsonValue | JsonFieldRefInput<$PrismaModel> | JsonNullValueFilter
  }

  export type UserCreateWithoutSchoolInput = {
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionCreateNestedManyWithoutUserInput
    branch?: BranchCreateNestedOneWithoutUsersInput
  }

  export type UserUncheckedCreateWithoutSchoolInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutSchoolInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput>
  }

  export type UserCreateManySchoolInputEnvelope = {
    data: UserCreateManySchoolInput | UserCreateManySchoolInput[]
    skipDuplicates?: boolean
  }

  export type BranchCreateWithoutSchoolInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutSchoolInput = {
    id?: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutSchoolInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput>
  }

  export type BranchCreateManySchoolInputEnvelope = {
    data: BranchCreateManySchoolInput | BranchCreateManySchoolInput[]
    skipDuplicates?: boolean
  }

  export type StudentCreateWithoutSchoolInput = {
    uuid?: string | null
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutStudentsInput
    StudentTracking?: StudentTrackingCreateNestedManyWithoutStudentInput
  }

  export type StudentUncheckedCreateWithoutSchoolInput = {
    id?: number
    uuid?: string | null
    branch_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    StudentTracking?: StudentTrackingUncheckedCreateNestedManyWithoutStudentInput
  }

  export type StudentCreateOrConnectWithoutSchoolInput = {
    where: StudentWhereUniqueInput
    create: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput>
  }

  export type StudentCreateManySchoolInputEnvelope = {
    data: StudentCreateManySchoolInput | StudentCreateManySchoolInput[]
    skipDuplicates?: boolean
  }

  export type GuardianCreateWithoutSchoolInput = {
    uuid?: string | null
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutGuardiansInput
  }

  export type GuardianUncheckedCreateWithoutSchoolInput = {
    id?: number
    uuid?: string | null
    branch_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianCreateOrConnectWithoutSchoolInput = {
    where: GuardianWhereUniqueInput
    create: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput>
  }

  export type GuardianCreateManySchoolInputEnvelope = {
    data: GuardianCreateManySchoolInput | GuardianCreateManySchoolInput[]
    skipDuplicates?: boolean
  }

  export type UserUpsertWithWhereUniqueWithoutSchoolInput = {
    where: UserWhereUniqueInput
    update: XOR<UserUpdateWithoutSchoolInput, UserUncheckedUpdateWithoutSchoolInput>
    create: XOR<UserCreateWithoutSchoolInput, UserUncheckedCreateWithoutSchoolInput>
  }

  export type UserUpdateWithWhereUniqueWithoutSchoolInput = {
    where: UserWhereUniqueInput
    data: XOR<UserUpdateWithoutSchoolInput, UserUncheckedUpdateWithoutSchoolInput>
  }

  export type UserUpdateManyWithWhereWithoutSchoolInput = {
    where: UserScalarWhereInput
    data: XOR<UserUpdateManyMutationInput, UserUncheckedUpdateManyWithoutSchoolInput>
  }

  export type UserScalarWhereInput = {
    AND?: UserScalarWhereInput | UserScalarWhereInput[]
    OR?: UserScalarWhereInput[]
    NOT?: UserScalarWhereInput | UserScalarWhereInput[]
    id?: IntFilter<"User"> | number
    uuid?: StringFilter<"User"> | string
    user_country_id?: IntNullableFilter<"User"> | number | null
    user_state_id?: IntNullableFilter<"User"> | number | null
    user_city_id?: IntNullableFilter<"User"> | number | null
    school_id?: IntNullableFilter<"User"> | number | null
    branch_id?: IntNullableFilter<"User"> | number | null
    local_id?: IntNullableFilter<"User"> | number | null
    staff_dept?: Enumusers_staff_deptFilter<"User"> | $Enums.users_staff_dept
    user_name?: StringFilter<"User"> | string
    user_phone?: StringFilter<"User"> | string
    user_sex?: IntFilter<"User"> | number
    email?: StringFilter<"User"> | string
    email_verified_at?: DateTimeNullableFilter<"User"> | Date | string | null
    user_address?: StringFilter<"User"> | string
    qualification_id?: IntNullableFilter<"User"> | number | null
    user_proffession?: StringNullableFilter<"User"> | string | null
    profile_photo_path?: StringNullableFilter<"User"> | string | null
    date_of_birth?: DateTimeNullableFilter<"User"> | Date | string | null
    breif_bio?: StringNullableFilter<"User"> | string | null
    facebook_handle?: StringNullableFilter<"User"> | string | null
    twitter_handle?: StringNullableFilter<"User"> | string | null
    instagram_handle?: StringNullableFilter<"User"> | string | null
    username?: StringNullableFilter<"User"> | string | null
    password?: StringFilter<"User"> | string
    remember_token?: StringNullableFilter<"User"> | string | null
    user_active?: IntFilter<"User"> | number
    user_must_change_password?: IntFilter<"User"> | number
    role?: StringNullableFilter<"User"> | string | null
    user_type?: StringNullableFilter<"User"> | string | null
    use_role?: IntFilter<"User"> | number
    user_blocked_reason?: StringNullableFilter<"User"> | string | null
    created_by?: IntNullableFilter<"User"> | number | null
    created_at?: DateTimeFilter<"User"> | Date | string
    updated_at?: DateTimeNullableFilter<"User"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"User"> | Date | string | null
  }

  export type BranchUpsertWithWhereUniqueWithoutSchoolInput = {
    where: BranchWhereUniqueInput
    update: XOR<BranchUpdateWithoutSchoolInput, BranchUncheckedUpdateWithoutSchoolInput>
    create: XOR<BranchCreateWithoutSchoolInput, BranchUncheckedCreateWithoutSchoolInput>
  }

  export type BranchUpdateWithWhereUniqueWithoutSchoolInput = {
    where: BranchWhereUniqueInput
    data: XOR<BranchUpdateWithoutSchoolInput, BranchUncheckedUpdateWithoutSchoolInput>
  }

  export type BranchUpdateManyWithWhereWithoutSchoolInput = {
    where: BranchScalarWhereInput
    data: XOR<BranchUpdateManyMutationInput, BranchUncheckedUpdateManyWithoutSchoolInput>
  }

  export type BranchScalarWhereInput = {
    AND?: BranchScalarWhereInput | BranchScalarWhereInput[]
    OR?: BranchScalarWhereInput[]
    NOT?: BranchScalarWhereInput | BranchScalarWhereInput[]
    id?: IntFilter<"Branch"> | number
    school_id?: IntFilter<"Branch"> | number
    branch_country_id?: IntNullableFilter<"Branch"> | number | null
    branch_state_id?: IntNullableFilter<"Branch"> | number | null
    branch_name?: StringFilter<"Branch"> | string
    branch_phone?: StringFilter<"Branch"> | string
    branch_email?: StringNullableFilter<"Branch"> | string | null
    branch_address?: StringFilter<"Branch"> | string
    branch_state?: IntNullableFilter<"Branch"> | number | null
    branch_active?: IntFilter<"Branch"> | number
    branch_main?: IntFilter<"Branch"> | number
    prevent_users_to_login?: IntFilter<"Branch"> | number
    branch_blocked_reason?: StringNullableFilter<"Branch"> | string | null
    created_by?: IntNullableFilter<"Branch"> | number | null
    created_at?: DateTimeFilter<"Branch"> | Date | string
    updated_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Branch"> | Date | string | null
  }

  export type StudentUpsertWithWhereUniqueWithoutSchoolInput = {
    where: StudentWhereUniqueInput
    update: XOR<StudentUpdateWithoutSchoolInput, StudentUncheckedUpdateWithoutSchoolInput>
    create: XOR<StudentCreateWithoutSchoolInput, StudentUncheckedCreateWithoutSchoolInput>
  }

  export type StudentUpdateWithWhereUniqueWithoutSchoolInput = {
    where: StudentWhereUniqueInput
    data: XOR<StudentUpdateWithoutSchoolInput, StudentUncheckedUpdateWithoutSchoolInput>
  }

  export type StudentUpdateManyWithWhereWithoutSchoolInput = {
    where: StudentScalarWhereInput
    data: XOR<StudentUpdateManyMutationInput, StudentUncheckedUpdateManyWithoutSchoolInput>
  }

  export type StudentScalarWhereInput = {
    AND?: StudentScalarWhereInput | StudentScalarWhereInput[]
    OR?: StudentScalarWhereInput[]
    NOT?: StudentScalarWhereInput | StudentScalarWhereInput[]
    id?: IntFilter<"Student"> | number
    uuid?: StringNullableFilter<"Student"> | string | null
    school_id?: IntFilter<"Student"> | number
    branch_id?: IntFilter<"Student"> | number
    local_id?: IntNullableFilter<"Student"> | number | null
    student_country_id?: IntNullableFilter<"Student"> | number | null
    student_state_id?: IntNullableFilter<"Student"> | number | null
    guardian_id?: IntNullableFilter<"Student"> | number | null
    religion_id?: IntNullableFilter<"Student"> | number | null
    first_name?: StringFilter<"Student"> | string
    middle_name?: StringNullableFilter<"Student"> | string | null
    last_name?: StringFilter<"Student"> | string
    email?: StringNullableFilter<"Student"> | string | null
    student_phone?: StringNullableFilter<"Student"> | string | null
    student_address?: StringNullableFilter<"Student"> | string | null
    student_sex?: IntFilter<"Student"> | number
    student_bio?: StringNullableFilter<"Student"> | string | null
    profile_photo_path?: StringNullableFilter<"Student"> | string | null
    username?: StringNullableFilter<"Student"> | string | null
    password?: StringNullableFilter<"Student"> | string | null
    student_active?: IntFilter<"Student"> | number
    student_blocked_reason?: StringNullableFilter<"Student"> | string | null
    role?: StringNullableFilter<"Student"> | string | null
    user_type?: StringNullableFilter<"Student"> | string | null
    use_role?: IntFilter<"Student"> | number
    created_by?: IntNullableFilter<"Student"> | number | null
    created_at?: DateTimeFilter<"Student"> | Date | string
    updated_at?: DateTimeNullableFilter<"Student"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Student"> | Date | string | null
  }

  export type GuardianUpsertWithWhereUniqueWithoutSchoolInput = {
    where: GuardianWhereUniqueInput
    update: XOR<GuardianUpdateWithoutSchoolInput, GuardianUncheckedUpdateWithoutSchoolInput>
    create: XOR<GuardianCreateWithoutSchoolInput, GuardianUncheckedCreateWithoutSchoolInput>
  }

  export type GuardianUpdateWithWhereUniqueWithoutSchoolInput = {
    where: GuardianWhereUniqueInput
    data: XOR<GuardianUpdateWithoutSchoolInput, GuardianUncheckedUpdateWithoutSchoolInput>
  }

  export type GuardianUpdateManyWithWhereWithoutSchoolInput = {
    where: GuardianScalarWhereInput
    data: XOR<GuardianUpdateManyMutationInput, GuardianUncheckedUpdateManyWithoutSchoolInput>
  }

  export type GuardianScalarWhereInput = {
    AND?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
    OR?: GuardianScalarWhereInput[]
    NOT?: GuardianScalarWhereInput | GuardianScalarWhereInput[]
    id?: IntFilter<"Guardian"> | number
    uuid?: StringNullableFilter<"Guardian"> | string | null
    school_id?: IntFilter<"Guardian"> | number
    branch_id?: IntFilter<"Guardian"> | number
    surname?: StringFilter<"Guardian"> | string
    first_name?: StringNullableFilter<"Guardian"> | string | null
    guardian_sex?: IntFilter<"Guardian"> | number
    is_married?: IntFilter<"Guardian"> | number
    marriage_disolved?: IntFilter<"Guardian"> | number
    is_parent?: IntFilter<"Guardian"> | number
    relation_how_related?: StringNullableFilter<"Guardian"> | string | null
    guardian_proffession?: StringNullableFilter<"Guardian"> | string | null
    phonenumber?: StringNullableFilter<"Guardian"> | string | null
    email?: StringFilter<"Guardian"> | string
    role?: StringNullableFilter<"Guardian"> | string | null
    user_type?: StringNullableFilter<"Guardian"> | string | null
    password?: StringNullableFilter<"Guardian"> | string | null
    use_role?: IntFilter<"Guardian"> | number
    guardian_active?: IntFilter<"Guardian"> | number
    guardian_blocked_reason?: StringNullableFilter<"Guardian"> | string | null
    created_by?: IntNullableFilter<"Guardian"> | number | null
    created_at?: DateTimeFilter<"Guardian"> | Date | string
    updated_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Guardian"> | Date | string | null
  }

  export type SchoolCreateWithoutBranchesInput = {
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserCreateNestedManyWithoutSchoolInput
    students?: StudentCreateNestedManyWithoutSchoolInput
    guardians?: GuardianCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUncheckedCreateWithoutBranchesInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserUncheckedCreateNestedManyWithoutSchoolInput
    students?: StudentUncheckedCreateNestedManyWithoutSchoolInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutSchoolInput
  }

  export type SchoolCreateOrConnectWithoutBranchesInput = {
    where: SchoolWhereUniqueInput
    create: XOR<SchoolCreateWithoutBranchesInput, SchoolUncheckedCreateWithoutBranchesInput>
  }

  export type BranchLevelCreateWithoutBranchInput = {
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchLevelUncheckedCreateWithoutBranchInput = {
    id?: number
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchLevelCreateOrConnectWithoutBranchInput = {
    where: BranchLevelWhereUniqueInput
    create: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput>
  }

  export type BranchLevelCreateManyBranchInputEnvelope = {
    data: BranchLevelCreateManyBranchInput | BranchLevelCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type StudentCreateWithoutBranchInput = {
    uuid?: string | null
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school?: SchoolCreateNestedOneWithoutStudentsInput
    StudentTracking?: StudentTrackingCreateNestedManyWithoutStudentInput
  }

  export type StudentUncheckedCreateWithoutBranchInput = {
    id?: number
    uuid?: string | null
    school_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    StudentTracking?: StudentTrackingUncheckedCreateNestedManyWithoutStudentInput
  }

  export type StudentCreateOrConnectWithoutBranchInput = {
    where: StudentWhereUniqueInput
    create: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput>
  }

  export type StudentCreateManyBranchInputEnvelope = {
    data: StudentCreateManyBranchInput | StudentCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type UserCreateWithoutBranchInput = {
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionCreateNestedManyWithoutUserInput
    school?: SchoolCreateNestedOneWithoutUsersInput
  }

  export type UserUncheckedCreateWithoutBranchInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutUserInput
    PermissionUser?: UserPermissionUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutBranchInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput>
  }

  export type UserCreateManyBranchInputEnvelope = {
    data: UserCreateManyBranchInput | UserCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type MultimediaCreateWithoutBranchInput = {
    school_id: number
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaUncheckedCreateWithoutBranchInput = {
    id?: number
    school_id: number
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaCreateOrConnectWithoutBranchInput = {
    where: MultimediaWhereUniqueInput
    create: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput>
  }

  export type MultimediaCreateManyBranchInputEnvelope = {
    data: MultimediaCreateManyBranchInput | MultimediaCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type LibraryBookCreateWithoutBranchInput = {
    school_id?: number | null
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryBookUncheckedCreateWithoutBranchInput = {
    id?: number
    school_id?: number | null
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryBookCreateOrConnectWithoutBranchInput = {
    where: LibraryBookWhereUniqueInput
    create: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput>
  }

  export type LibraryBookCreateManyBranchInputEnvelope = {
    data: LibraryBookCreateManyBranchInput | LibraryBookCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type GuardianCreateWithoutBranchInput = {
    uuid?: string | null
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school?: SchoolCreateNestedOneWithoutGuardiansInput
  }

  export type GuardianUncheckedCreateWithoutBranchInput = {
    id?: number
    uuid?: string | null
    school_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianCreateOrConnectWithoutBranchInput = {
    where: GuardianWhereUniqueInput
    create: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput>
  }

  export type GuardianCreateManyBranchInputEnvelope = {
    data: GuardianCreateManyBranchInput | GuardianCreateManyBranchInput[]
    skipDuplicates?: boolean
  }

  export type SchoolUpsertWithoutBranchesInput = {
    update: XOR<SchoolUpdateWithoutBranchesInput, SchoolUncheckedUpdateWithoutBranchesInput>
    create: XOR<SchoolCreateWithoutBranchesInput, SchoolUncheckedCreateWithoutBranchesInput>
    where?: SchoolWhereInput
  }

  export type SchoolUpdateToOneWithWhereWithoutBranchesInput = {
    where?: SchoolWhereInput
    data: XOR<SchoolUpdateWithoutBranchesInput, SchoolUncheckedUpdateWithoutBranchesInput>
  }

  export type SchoolUpdateWithoutBranchesInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUpdateManyWithoutSchoolNestedInput
    students?: StudentUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolUncheckedUpdateWithoutBranchesInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUncheckedUpdateManyWithoutSchoolNestedInput
    students?: StudentUncheckedUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutSchoolNestedInput
  }

  export type BranchLevelUpsertWithWhereUniqueWithoutBranchInput = {
    where: BranchLevelWhereUniqueInput
    update: XOR<BranchLevelUpdateWithoutBranchInput, BranchLevelUncheckedUpdateWithoutBranchInput>
    create: XOR<BranchLevelCreateWithoutBranchInput, BranchLevelUncheckedCreateWithoutBranchInput>
  }

  export type BranchLevelUpdateWithWhereUniqueWithoutBranchInput = {
    where: BranchLevelWhereUniqueInput
    data: XOR<BranchLevelUpdateWithoutBranchInput, BranchLevelUncheckedUpdateWithoutBranchInput>
  }

  export type BranchLevelUpdateManyWithWhereWithoutBranchInput = {
    where: BranchLevelScalarWhereInput
    data: XOR<BranchLevelUpdateManyMutationInput, BranchLevelUncheckedUpdateManyWithoutBranchInput>
  }

  export type BranchLevelScalarWhereInput = {
    AND?: BranchLevelScalarWhereInput | BranchLevelScalarWhereInput[]
    OR?: BranchLevelScalarWhereInput[]
    NOT?: BranchLevelScalarWhereInput | BranchLevelScalarWhereInput[]
    id?: IntFilter<"BranchLevel"> | number
    branch_id?: IntFilter<"BranchLevel"> | number
    level_name?: StringFilter<"BranchLevel"> | string
    level_leader?: IntNullableFilter<"BranchLevel"> | number | null
    level_active?: IntFilter<"BranchLevel"> | number
    created_by?: IntNullableFilter<"BranchLevel"> | number | null
    created_at?: DateTimeFilter<"BranchLevel"> | Date | string
    updated_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"BranchLevel"> | Date | string | null
  }

  export type StudentUpsertWithWhereUniqueWithoutBranchInput = {
    where: StudentWhereUniqueInput
    update: XOR<StudentUpdateWithoutBranchInput, StudentUncheckedUpdateWithoutBranchInput>
    create: XOR<StudentCreateWithoutBranchInput, StudentUncheckedCreateWithoutBranchInput>
  }

  export type StudentUpdateWithWhereUniqueWithoutBranchInput = {
    where: StudentWhereUniqueInput
    data: XOR<StudentUpdateWithoutBranchInput, StudentUncheckedUpdateWithoutBranchInput>
  }

  export type StudentUpdateManyWithWhereWithoutBranchInput = {
    where: StudentScalarWhereInput
    data: XOR<StudentUpdateManyMutationInput, StudentUncheckedUpdateManyWithoutBranchInput>
  }

  export type UserUpsertWithWhereUniqueWithoutBranchInput = {
    where: UserWhereUniqueInput
    update: XOR<UserUpdateWithoutBranchInput, UserUncheckedUpdateWithoutBranchInput>
    create: XOR<UserCreateWithoutBranchInput, UserUncheckedCreateWithoutBranchInput>
  }

  export type UserUpdateWithWhereUniqueWithoutBranchInput = {
    where: UserWhereUniqueInput
    data: XOR<UserUpdateWithoutBranchInput, UserUncheckedUpdateWithoutBranchInput>
  }

  export type UserUpdateManyWithWhereWithoutBranchInput = {
    where: UserScalarWhereInput
    data: XOR<UserUpdateManyMutationInput, UserUncheckedUpdateManyWithoutBranchInput>
  }

  export type MultimediaUpsertWithWhereUniqueWithoutBranchInput = {
    where: MultimediaWhereUniqueInput
    update: XOR<MultimediaUpdateWithoutBranchInput, MultimediaUncheckedUpdateWithoutBranchInput>
    create: XOR<MultimediaCreateWithoutBranchInput, MultimediaUncheckedCreateWithoutBranchInput>
  }

  export type MultimediaUpdateWithWhereUniqueWithoutBranchInput = {
    where: MultimediaWhereUniqueInput
    data: XOR<MultimediaUpdateWithoutBranchInput, MultimediaUncheckedUpdateWithoutBranchInput>
  }

  export type MultimediaUpdateManyWithWhereWithoutBranchInput = {
    where: MultimediaScalarWhereInput
    data: XOR<MultimediaUpdateManyMutationInput, MultimediaUncheckedUpdateManyWithoutBranchInput>
  }

  export type MultimediaScalarWhereInput = {
    AND?: MultimediaScalarWhereInput | MultimediaScalarWhereInput[]
    OR?: MultimediaScalarWhereInput[]
    NOT?: MultimediaScalarWhereInput | MultimediaScalarWhereInput[]
    id?: IntFilter<"Multimedia"> | number
    school_id?: IntFilter<"Multimedia"> | number
    branch_id?: IntNullableFilter<"Multimedia"> | number | null
    multimedia_is_image?: IntFilter<"Multimedia"> | number
    multimedia_name?: StringFilter<"Multimedia"> | string
    multimedia_desc?: StringNullableFilter<"Multimedia"> | string | null
    multimedia_path?: StringFilter<"Multimedia"> | string
    multimedia_active?: IntFilter<"Multimedia"> | number
    created_by?: IntNullableFilter<"Multimedia"> | number | null
    created_at?: DateTimeFilter<"Multimedia"> | Date | string
    updated_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Multimedia"> | Date | string | null
  }

  export type LibraryBookUpsertWithWhereUniqueWithoutBranchInput = {
    where: LibraryBookWhereUniqueInput
    update: XOR<LibraryBookUpdateWithoutBranchInput, LibraryBookUncheckedUpdateWithoutBranchInput>
    create: XOR<LibraryBookCreateWithoutBranchInput, LibraryBookUncheckedCreateWithoutBranchInput>
  }

  export type LibraryBookUpdateWithWhereUniqueWithoutBranchInput = {
    where: LibraryBookWhereUniqueInput
    data: XOR<LibraryBookUpdateWithoutBranchInput, LibraryBookUncheckedUpdateWithoutBranchInput>
  }

  export type LibraryBookUpdateManyWithWhereWithoutBranchInput = {
    where: LibraryBookScalarWhereInput
    data: XOR<LibraryBookUpdateManyMutationInput, LibraryBookUncheckedUpdateManyWithoutBranchInput>
  }

  export type LibraryBookScalarWhereInput = {
    AND?: LibraryBookScalarWhereInput | LibraryBookScalarWhereInput[]
    OR?: LibraryBookScalarWhereInput[]
    NOT?: LibraryBookScalarWhereInput | LibraryBookScalarWhereInput[]
    id?: IntFilter<"LibraryBook"> | number
    school_id?: IntNullableFilter<"LibraryBook"> | number | null
    branch_id?: IntFilter<"LibraryBook"> | number
    book_name?: StringFilter<"LibraryBook"> | string
    book_desc?: StringFilter<"LibraryBook"> | string
    book_author_name?: StringFilter<"LibraryBook"> | string
    book_cover?: StringNullableFilter<"LibraryBook"> | string | null
    book_path?: StringNullableFilter<"LibraryBook"> | string | null
    book_type?: Enumbook_typeFilter<"LibraryBook"> | $Enums.book_type
    created_by?: IntNullableFilter<"LibraryBook"> | number | null
    created_at?: DateTimeFilter<"LibraryBook"> | Date | string
    updated_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"LibraryBook"> | Date | string | null
  }

  export type GuardianUpsertWithWhereUniqueWithoutBranchInput = {
    where: GuardianWhereUniqueInput
    update: XOR<GuardianUpdateWithoutBranchInput, GuardianUncheckedUpdateWithoutBranchInput>
    create: XOR<GuardianCreateWithoutBranchInput, GuardianUncheckedCreateWithoutBranchInput>
  }

  export type GuardianUpdateWithWhereUniqueWithoutBranchInput = {
    where: GuardianWhereUniqueInput
    data: XOR<GuardianUpdateWithoutBranchInput, GuardianUncheckedUpdateWithoutBranchInput>
  }

  export type GuardianUpdateManyWithWhereWithoutBranchInput = {
    where: GuardianScalarWhereInput
    data: XOR<GuardianUpdateManyMutationInput, GuardianUncheckedUpdateManyWithoutBranchInput>
  }

  export type BranchCreateWithoutBranchLevelsInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutBranchLevelsInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutBranchLevelsInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutBranchLevelsInput, BranchUncheckedCreateWithoutBranchLevelsInput>
  }

  export type BranchUpsertWithoutBranchLevelsInput = {
    update: XOR<BranchUpdateWithoutBranchLevelsInput, BranchUncheckedUpdateWithoutBranchLevelsInput>
    create: XOR<BranchCreateWithoutBranchLevelsInput, BranchUncheckedCreateWithoutBranchLevelsInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutBranchLevelsInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutBranchLevelsInput, BranchUncheckedUpdateWithoutBranchLevelsInput>
  }

  export type BranchUpdateWithoutBranchLevelsInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutBranchLevelsInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type SessionClassCreateWithoutClassdetailsInput = {
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    sessionterm?: SessionTermCreateNestedOneWithoutSessionclassInput
  }

  export type SessionClassUncheckedCreateWithoutClassdetailsInput = {
    id?: number
    session_term_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassCreateOrConnectWithoutClassdetailsInput = {
    where: SessionClassWhereUniqueInput
    create: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput>
  }

  export type SessionClassCreateManyClassdetailsInputEnvelope = {
    data: SessionClassCreateManyClassdetailsInput | SessionClassCreateManyClassdetailsInput[]
    skipDuplicates?: boolean
  }

  export type ExamCreateWithoutClassInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    term?: TermCreateNestedOneWithoutExamsInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutClassInput = {
    id?: number
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamCreateOrConnectWithoutClassInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput>
  }

  export type ExamCreateManyClassInputEnvelope = {
    data: ExamCreateManyClassInput | ExamCreateManyClassInput[]
    skipDuplicates?: boolean
  }

  export type SessionClassUpsertWithWhereUniqueWithoutClassdetailsInput = {
    where: SessionClassWhereUniqueInput
    update: XOR<SessionClassUpdateWithoutClassdetailsInput, SessionClassUncheckedUpdateWithoutClassdetailsInput>
    create: XOR<SessionClassCreateWithoutClassdetailsInput, SessionClassUncheckedCreateWithoutClassdetailsInput>
  }

  export type SessionClassUpdateWithWhereUniqueWithoutClassdetailsInput = {
    where: SessionClassWhereUniqueInput
    data: XOR<SessionClassUpdateWithoutClassdetailsInput, SessionClassUncheckedUpdateWithoutClassdetailsInput>
  }

  export type SessionClassUpdateManyWithWhereWithoutClassdetailsInput = {
    where: SessionClassScalarWhereInput
    data: XOR<SessionClassUpdateManyMutationInput, SessionClassUncheckedUpdateManyWithoutClassdetailsInput>
  }

  export type SessionClassScalarWhereInput = {
    AND?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
    OR?: SessionClassScalarWhereInput[]
    NOT?: SessionClassScalarWhereInput | SessionClassScalarWhereInput[]
    id?: IntFilter<"SessionClass"> | number
    session_term_id?: IntFilter<"SessionClass"> | number
    class_id?: IntFilter<"SessionClass"> | number
    session_class_name?: StringFilter<"SessionClass"> | string
    no_of_group?: IntFilter<"SessionClass"> | number
    has_multiple_teacher?: IntFilter<"SessionClass"> | number
    has_specialization?: IntFilter<"SessionClass"> | number
    has_optionals_subject?: IntFilter<"SessionClass"> | number
    main_treachear?: IntNullableFilter<"SessionClass"> | number | null
    created_by?: IntNullableFilter<"SessionClass"> | number | null
    created_at?: DateTimeFilter<"SessionClass"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClass"> | Date | string | null
  }

  export type ExamUpsertWithWhereUniqueWithoutClassInput = {
    where: ExamWhereUniqueInput
    update: XOR<ExamUpdateWithoutClassInput, ExamUncheckedUpdateWithoutClassInput>
    create: XOR<ExamCreateWithoutClassInput, ExamUncheckedCreateWithoutClassInput>
  }

  export type ExamUpdateWithWhereUniqueWithoutClassInput = {
    where: ExamWhereUniqueInput
    data: XOR<ExamUpdateWithoutClassInput, ExamUncheckedUpdateWithoutClassInput>
  }

  export type ExamUpdateManyWithWhereWithoutClassInput = {
    where: ExamScalarWhereInput
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyWithoutClassInput>
  }

  export type ExamScalarWhereInput = {
    AND?: ExamScalarWhereInput | ExamScalarWhereInput[]
    OR?: ExamScalarWhereInput[]
    NOT?: ExamScalarWhereInput | ExamScalarWhereInput[]
    id?: IntFilter<"Exam"> | number
    class_id?: IntNullableFilter<"Exam"> | number | null
    term_id?: IntNullableFilter<"Exam"> | number | null
    subject_id?: IntFilter<"Exam"> | number
    desc?: StringNullableFilter<"Exam"> | string | null
    exam_date?: DateTimeNullableFilter<"Exam"> | Date | string | null
    exam_type?: IntFilter<"Exam"> | number
    exam_category?: IntFilter<"Exam"> | number
    exam_visibility?: IntNullableFilter<"Exam"> | number | null
    max_time_allowed?: IntFilter<"Exam"> | number
    no_of_life?: IntNullableFilter<"Exam"> | number | null
    exam_objective_max_score?: IntNullableFilter<"Exam"> | number | null
    exam_theory_max_score?: IntNullableFilter<"Exam"> | number | null
    objective_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    theory_max_no_of_question?: IntNullableFilter<"Exam"> | number | null
    exam_enabled?: IntFilter<"Exam"> | number
    allow_assessment_only_at_specified_time?: IntNullableFilter<"Exam"> | number | null
    allow_submit_after_time_elapsed?: IntFilter<"Exam"> | number
    is_practise_exam?: IntFilter<"Exam"> | number
    exam_gift_id?: IntNullableFilter<"Exam"> | number | null
    created_by?: IntNullableFilter<"Exam"> | number | null
    created_at?: DateTimeFilter<"Exam"> | Date | string
    updated_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"Exam"> | Date | string | null
  }

  export type SessionClassSubjectCreateWithoutSubjectInput = {
    session_class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassSubjectUncheckedCreateWithoutSubjectInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassSubjectCreateOrConnectWithoutSubjectInput = {
    where: SessionClassSubjectWhereUniqueInput
    create: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput>
  }

  export type SessionClassSubjectCreateManySubjectInputEnvelope = {
    data: SessionClassSubjectCreateManySubjectInput | SessionClassSubjectCreateManySubjectInput[]
    skipDuplicates?: boolean
  }

  export type ClassSubjectTemplateCreateWithoutSubjectInput = {
    class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSubjectTemplateUncheckedCreateWithoutSubjectInput = {
    id?: number
    class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSubjectTemplateCreateOrConnectWithoutSubjectInput = {
    where: ClassSubjectTemplateWhereUniqueInput
    create: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput>
  }

  export type ClassSubjectTemplateCreateManySubjectInputEnvelope = {
    data: ClassSubjectTemplateCreateManySubjectInput | ClassSubjectTemplateCreateManySubjectInput[]
    skipDuplicates?: boolean
  }

  export type ExamCreateWithoutSubjectInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    term?: TermCreateNestedOneWithoutExamsInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutSubjectInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamCreateOrConnectWithoutSubjectInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput>
  }

  export type ExamCreateManySubjectInputEnvelope = {
    data: ExamCreateManySubjectInput | ExamCreateManySubjectInput[]
    skipDuplicates?: boolean
  }

  export type SessionClassSubjectUpsertWithWhereUniqueWithoutSubjectInput = {
    where: SessionClassSubjectWhereUniqueInput
    update: XOR<SessionClassSubjectUpdateWithoutSubjectInput, SessionClassSubjectUncheckedUpdateWithoutSubjectInput>
    create: XOR<SessionClassSubjectCreateWithoutSubjectInput, SessionClassSubjectUncheckedCreateWithoutSubjectInput>
  }

  export type SessionClassSubjectUpdateWithWhereUniqueWithoutSubjectInput = {
    where: SessionClassSubjectWhereUniqueInput
    data: XOR<SessionClassSubjectUpdateWithoutSubjectInput, SessionClassSubjectUncheckedUpdateWithoutSubjectInput>
  }

  export type SessionClassSubjectUpdateManyWithWhereWithoutSubjectInput = {
    where: SessionClassSubjectScalarWhereInput
    data: XOR<SessionClassSubjectUpdateManyMutationInput, SessionClassSubjectUncheckedUpdateManyWithoutSubjectInput>
  }

  export type SessionClassSubjectScalarWhereInput = {
    AND?: SessionClassSubjectScalarWhereInput | SessionClassSubjectScalarWhereInput[]
    OR?: SessionClassSubjectScalarWhereInput[]
    NOT?: SessionClassSubjectScalarWhereInput | SessionClassSubjectScalarWhereInput[]
    id?: IntFilter<"SessionClassSubject"> | number
    session_class_id?: IntFilter<"SessionClassSubject"> | number
    specialization_id?: IntFilter<"SessionClassSubject"> | number
    subject_id?: IntFilter<"SessionClassSubject"> | number
    is_compulsory?: IntFilter<"SessionClassSubject"> | number
    include_in_result?: IntFilter<"SessionClassSubject"> | number
    include_in_calculation?: IntFilter<"SessionClassSubject"> | number
    created_by?: IntNullableFilter<"SessionClassSubject"> | number | null
    created_at?: DateTimeFilter<"SessionClassSubject"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionClassSubject"> | Date | string | null
  }

  export type ClassSubjectTemplateUpsertWithWhereUniqueWithoutSubjectInput = {
    where: ClassSubjectTemplateWhereUniqueInput
    update: XOR<ClassSubjectTemplateUpdateWithoutSubjectInput, ClassSubjectTemplateUncheckedUpdateWithoutSubjectInput>
    create: XOR<ClassSubjectTemplateCreateWithoutSubjectInput, ClassSubjectTemplateUncheckedCreateWithoutSubjectInput>
  }

  export type ClassSubjectTemplateUpdateWithWhereUniqueWithoutSubjectInput = {
    where: ClassSubjectTemplateWhereUniqueInput
    data: XOR<ClassSubjectTemplateUpdateWithoutSubjectInput, ClassSubjectTemplateUncheckedUpdateWithoutSubjectInput>
  }

  export type ClassSubjectTemplateUpdateManyWithWhereWithoutSubjectInput = {
    where: ClassSubjectTemplateScalarWhereInput
    data: XOR<ClassSubjectTemplateUpdateManyMutationInput, ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectInput>
  }

  export type ClassSubjectTemplateScalarWhereInput = {
    AND?: ClassSubjectTemplateScalarWhereInput | ClassSubjectTemplateScalarWhereInput[]
    OR?: ClassSubjectTemplateScalarWhereInput[]
    NOT?: ClassSubjectTemplateScalarWhereInput | ClassSubjectTemplateScalarWhereInput[]
    id?: IntFilter<"ClassSubjectTemplate"> | number
    class_id?: IntFilter<"ClassSubjectTemplate"> | number
    specialization_id?: IntFilter<"ClassSubjectTemplate"> | number
    subject_id?: IntFilter<"ClassSubjectTemplate"> | number
    is_compulsory?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_result?: IntFilter<"ClassSubjectTemplate"> | number
    include_in_calculation?: IntFilter<"ClassSubjectTemplate"> | number
    created_by?: IntNullableFilter<"ClassSubjectTemplate"> | number | null
    created_at?: DateTimeFilter<"ClassSubjectTemplate"> | Date | string
    updated_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ClassSubjectTemplate"> | Date | string | null
  }

  export type ExamUpsertWithWhereUniqueWithoutSubjectInput = {
    where: ExamWhereUniqueInput
    update: XOR<ExamUpdateWithoutSubjectInput, ExamUncheckedUpdateWithoutSubjectInput>
    create: XOR<ExamCreateWithoutSubjectInput, ExamUncheckedCreateWithoutSubjectInput>
  }

  export type ExamUpdateWithWhereUniqueWithoutSubjectInput = {
    where: ExamWhereUniqueInput
    data: XOR<ExamUpdateWithoutSubjectInput, ExamUncheckedUpdateWithoutSubjectInput>
  }

  export type ExamUpdateManyWithWhereWithoutSubjectInput = {
    where: ExamScalarWhereInput
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyWithoutSubjectInput>
  }

  export type SessionTermCreateWithoutSessionInput = {
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    term?: TermCreateNestedOneWithoutSessionTermInput
    sessionclass?: SessionClassCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermUncheckedCreateWithoutSessionInput = {
    id?: number
    term_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    sessionclass?: SessionClassUncheckedCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermCreateOrConnectWithoutSessionInput = {
    where: SessionTermWhereUniqueInput
    create: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput>
  }

  export type SessionTermCreateManySessionInputEnvelope = {
    data: SessionTermCreateManySessionInput | SessionTermCreateManySessionInput[]
    skipDuplicates?: boolean
  }

  export type SessionTermUpsertWithWhereUniqueWithoutSessionInput = {
    where: SessionTermWhereUniqueInput
    update: XOR<SessionTermUpdateWithoutSessionInput, SessionTermUncheckedUpdateWithoutSessionInput>
    create: XOR<SessionTermCreateWithoutSessionInput, SessionTermUncheckedCreateWithoutSessionInput>
  }

  export type SessionTermUpdateWithWhereUniqueWithoutSessionInput = {
    where: SessionTermWhereUniqueInput
    data: XOR<SessionTermUpdateWithoutSessionInput, SessionTermUncheckedUpdateWithoutSessionInput>
  }

  export type SessionTermUpdateManyWithWhereWithoutSessionInput = {
    where: SessionTermScalarWhereInput
    data: XOR<SessionTermUpdateManyMutationInput, SessionTermUncheckedUpdateManyWithoutSessionInput>
  }

  export type SessionTermScalarWhereInput = {
    AND?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
    OR?: SessionTermScalarWhereInput[]
    NOT?: SessionTermScalarWhereInput | SessionTermScalarWhereInput[]
    id?: IntFilter<"SessionTerm"> | number
    session_id?: IntFilter<"SessionTerm"> | number
    term_id?: IntFilter<"SessionTerm"> | number
    session_term_name?: StringFilter<"SessionTerm"> | string
    session_term_visible?: IntFilter<"SessionTerm"> | number
    session_term_locked?: IntFilter<"SessionTerm"> | number
    session_term_current?: IntFilter<"SessionTerm"> | number
    session_term_clone_details?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_details_from_id?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_clone_classinstances?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_subjects?: IntNullableFilter<"SessionTerm"> | number | null
    session_terms_clone_scoresetup?: IntNullableFilter<"SessionTerm"> | number | null
    session_term_start?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_end?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    session_term_next_begin?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    created_by?: IntNullableFilter<"SessionTerm"> | number | null
    created_at?: DateTimeFilter<"SessionTerm"> | Date | string
    updated_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"SessionTerm"> | Date | string | null
  }

  export type BranchCreateWithoutMultimediaInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutMultimediaInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutMultimediaInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutMultimediaInput, BranchUncheckedCreateWithoutMultimediaInput>
  }

  export type BranchUpsertWithoutMultimediaInput = {
    update: XOR<BranchUpdateWithoutMultimediaInput, BranchUncheckedUpdateWithoutMultimediaInput>
    create: XOR<BranchCreateWithoutMultimediaInput, BranchUncheckedCreateWithoutMultimediaInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutMultimediaInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutMultimediaInput, BranchUncheckedUpdateWithoutMultimediaInput>
  }

  export type BranchUpdateWithoutMultimediaInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutMultimediaInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type BranchCreateWithoutLibrarybooksInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutLibrarybooksInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutLibrarybooksInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutLibrarybooksInput, BranchUncheckedCreateWithoutLibrarybooksInput>
  }

  export type BranchUpsertWithoutLibrarybooksInput = {
    update: XOR<BranchUpdateWithoutLibrarybooksInput, BranchUncheckedUpdateWithoutLibrarybooksInput>
    create: XOR<BranchCreateWithoutLibrarybooksInput, BranchUncheckedCreateWithoutLibrarybooksInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutLibrarybooksInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutLibrarybooksInput, BranchUncheckedUpdateWithoutLibrarybooksInput>
  }

  export type BranchUpdateWithoutLibrarybooksInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutLibrarybooksInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type BranchSessionCreateWithoutSessionTermInput = {
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchSessionUncheckedCreateWithoutSessionTermInput = {
    id?: number
    branch_id: number
    session_name: string
    no_of_terms: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchSessionCreateOrConnectWithoutSessionTermInput = {
    where: BranchSessionWhereUniqueInput
    create: XOR<BranchSessionCreateWithoutSessionTermInput, BranchSessionUncheckedCreateWithoutSessionTermInput>
  }

  export type TermCreateWithoutSessionTermInput = {
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exams?: ExamCreateNestedManyWithoutTermInput
  }

  export type TermUncheckedCreateWithoutSessionTermInput = {
    id?: number
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exams?: ExamUncheckedCreateNestedManyWithoutTermInput
  }

  export type TermCreateOrConnectWithoutSessionTermInput = {
    where: TermWhereUniqueInput
    create: XOR<TermCreateWithoutSessionTermInput, TermUncheckedCreateWithoutSessionTermInput>
  }

  export type SessionClassCreateWithoutSessiontermInput = {
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    classdetails?: ClassTemplateCreateNestedOneWithoutSessionClassInput
  }

  export type SessionClassUncheckedCreateWithoutSessiontermInput = {
    id?: number
    class_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassCreateOrConnectWithoutSessiontermInput = {
    where: SessionClassWhereUniqueInput
    create: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput>
  }

  export type SessionClassCreateManySessiontermInputEnvelope = {
    data: SessionClassCreateManySessiontermInput | SessionClassCreateManySessiontermInput[]
    skipDuplicates?: boolean
  }

  export type BranchSessionUpsertWithoutSessionTermInput = {
    update: XOR<BranchSessionUpdateWithoutSessionTermInput, BranchSessionUncheckedUpdateWithoutSessionTermInput>
    create: XOR<BranchSessionCreateWithoutSessionTermInput, BranchSessionUncheckedCreateWithoutSessionTermInput>
    where?: BranchSessionWhereInput
  }

  export type BranchSessionUpdateToOneWithWhereWithoutSessionTermInput = {
    where?: BranchSessionWhereInput
    data: XOR<BranchSessionUpdateWithoutSessionTermInput, BranchSessionUncheckedUpdateWithoutSessionTermInput>
  }

  export type BranchSessionUpdateWithoutSessionTermInput = {
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchSessionUncheckedUpdateWithoutSessionTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    session_name?: StringFieldUpdateOperationsInput | string
    no_of_terms?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type TermUpsertWithoutSessionTermInput = {
    update: XOR<TermUpdateWithoutSessionTermInput, TermUncheckedUpdateWithoutSessionTermInput>
    create: XOR<TermCreateWithoutSessionTermInput, TermUncheckedCreateWithoutSessionTermInput>
    where?: TermWhereInput
  }

  export type TermUpdateToOneWithWhereWithoutSessionTermInput = {
    where?: TermWhereInput
    data: XOR<TermUpdateWithoutSessionTermInput, TermUncheckedUpdateWithoutSessionTermInput>
  }

  export type TermUpdateWithoutSessionTermInput = {
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exams?: ExamUpdateManyWithoutTermNestedInput
  }

  export type TermUncheckedUpdateWithoutSessionTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exams?: ExamUncheckedUpdateManyWithoutTermNestedInput
  }

  export type SessionClassUpsertWithWhereUniqueWithoutSessiontermInput = {
    where: SessionClassWhereUniqueInput
    update: XOR<SessionClassUpdateWithoutSessiontermInput, SessionClassUncheckedUpdateWithoutSessiontermInput>
    create: XOR<SessionClassCreateWithoutSessiontermInput, SessionClassUncheckedCreateWithoutSessiontermInput>
  }

  export type SessionClassUpdateWithWhereUniqueWithoutSessiontermInput = {
    where: SessionClassWhereUniqueInput
    data: XOR<SessionClassUpdateWithoutSessiontermInput, SessionClassUncheckedUpdateWithoutSessiontermInput>
  }

  export type SessionClassUpdateManyWithWhereWithoutSessiontermInput = {
    where: SessionClassScalarWhereInput
    data: XOR<SessionClassUpdateManyMutationInput, SessionClassUncheckedUpdateManyWithoutSessiontermInput>
  }

  export type UserCrudPermissionCreateWithoutUserInput = {
    user_type: string
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutUserCrudPermissionInput
  }

  export type UserCrudPermissionUncheckedCreateWithoutUserInput = {
    id?: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionCreateOrConnectWithoutUserInput = {
    where: UserCrudPermissionWhereUniqueInput
    create: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput>
  }

  export type UserCrudPermissionCreateManyUserInputEnvelope = {
    data: UserCrudPermissionCreateManyUserInput | UserCrudPermissionCreateManyUserInput[]
    skipDuplicates?: boolean
  }

  export type UserPermissionCreateWithoutUserInput = {
    user_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutUserPermissionInput
  }

  export type UserPermissionUncheckedCreateWithoutUserInput = {
    id?: number
    user_id: number
    permission_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserPermissionCreateOrConnectWithoutUserInput = {
    where: UserPermissionWhereUniqueInput
    create: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput>
  }

  export type UserPermissionCreateManyUserInputEnvelope = {
    data: UserPermissionCreateManyUserInput | UserPermissionCreateManyUserInput[]
    skipDuplicates?: boolean
  }

  export type SchoolCreateWithoutUsersInput = {
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branches?: BranchCreateNestedManyWithoutSchoolInput
    students?: StudentCreateNestedManyWithoutSchoolInput
    guardians?: GuardianCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUncheckedCreateWithoutUsersInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branches?: BranchUncheckedCreateNestedManyWithoutSchoolInput
    students?: StudentUncheckedCreateNestedManyWithoutSchoolInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutSchoolInput
  }

  export type SchoolCreateOrConnectWithoutUsersInput = {
    where: SchoolWhereUniqueInput
    create: XOR<SchoolCreateWithoutUsersInput, SchoolUncheckedCreateWithoutUsersInput>
  }

  export type BranchCreateWithoutUsersInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutUsersInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutUsersInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutUsersInput, BranchUncheckedCreateWithoutUsersInput>
  }

  export type UserCrudPermissionUpsertWithWhereUniqueWithoutUserInput = {
    where: UserCrudPermissionWhereUniqueInput
    update: XOR<UserCrudPermissionUpdateWithoutUserInput, UserCrudPermissionUncheckedUpdateWithoutUserInput>
    create: XOR<UserCrudPermissionCreateWithoutUserInput, UserCrudPermissionUncheckedCreateWithoutUserInput>
  }

  export type UserCrudPermissionUpdateWithWhereUniqueWithoutUserInput = {
    where: UserCrudPermissionWhereUniqueInput
    data: XOR<UserCrudPermissionUpdateWithoutUserInput, UserCrudPermissionUncheckedUpdateWithoutUserInput>
  }

  export type UserCrudPermissionUpdateManyWithWhereWithoutUserInput = {
    where: UserCrudPermissionScalarWhereInput
    data: XOR<UserCrudPermissionUpdateManyMutationInput, UserCrudPermissionUncheckedUpdateManyWithoutUserInput>
  }

  export type UserCrudPermissionScalarWhereInput = {
    AND?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
    OR?: UserCrudPermissionScalarWhereInput[]
    NOT?: UserCrudPermissionScalarWhereInput | UserCrudPermissionScalarWhereInput[]
    id?: IntFilter<"UserCrudPermission"> | number
    user_id?: IntFilter<"UserCrudPermission"> | number
    user_type?: StringFilter<"UserCrudPermission"> | string
    permission_id?: IntFilter<"UserCrudPermission"> | number
    permission_menu?: IntFilter<"UserCrudPermission"> | number
    permission_create?: IntFilter<"UserCrudPermission"> | number
    permission_read?: IntFilter<"UserCrudPermission"> | number
    permission_update?: IntFilter<"UserCrudPermission"> | number
    permission_delete?: IntFilter<"UserCrudPermission"> | number
    created_at?: DateTimeFilter<"UserCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserCrudPermission"> | number | null
  }

  export type UserPermissionUpsertWithWhereUniqueWithoutUserInput = {
    where: UserPermissionWhereUniqueInput
    update: XOR<UserPermissionUpdateWithoutUserInput, UserPermissionUncheckedUpdateWithoutUserInput>
    create: XOR<UserPermissionCreateWithoutUserInput, UserPermissionUncheckedCreateWithoutUserInput>
  }

  export type UserPermissionUpdateWithWhereUniqueWithoutUserInput = {
    where: UserPermissionWhereUniqueInput
    data: XOR<UserPermissionUpdateWithoutUserInput, UserPermissionUncheckedUpdateWithoutUserInput>
  }

  export type UserPermissionUpdateManyWithWhereWithoutUserInput = {
    where: UserPermissionScalarWhereInput
    data: XOR<UserPermissionUpdateManyMutationInput, UserPermissionUncheckedUpdateManyWithoutUserInput>
  }

  export type UserPermissionScalarWhereInput = {
    AND?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
    OR?: UserPermissionScalarWhereInput[]
    NOT?: UserPermissionScalarWhereInput | UserPermissionScalarWhereInput[]
    id?: IntFilter<"UserPermission"> | number
    user_id?: IntFilter<"UserPermission"> | number
    permission_id?: IntFilter<"UserPermission"> | number
    user_type?: StringFilter<"UserPermission"> | string
    created_at?: DateTimeFilter<"UserPermission"> | Date | string
    created_by?: IntNullableFilter<"UserPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"UserPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"UserPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"UserPermission"> | number | null
    userId?: IntNullableFilter<"UserPermission"> | number | null
  }

  export type SchoolUpsertWithoutUsersInput = {
    update: XOR<SchoolUpdateWithoutUsersInput, SchoolUncheckedUpdateWithoutUsersInput>
    create: XOR<SchoolCreateWithoutUsersInput, SchoolUncheckedCreateWithoutUsersInput>
    where?: SchoolWhereInput
  }

  export type SchoolUpdateToOneWithWhereWithoutUsersInput = {
    where?: SchoolWhereInput
    data: XOR<SchoolUpdateWithoutUsersInput, SchoolUncheckedUpdateWithoutUsersInput>
  }

  export type SchoolUpdateWithoutUsersInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branches?: BranchUpdateManyWithoutSchoolNestedInput
    students?: StudentUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolUncheckedUpdateWithoutUsersInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branches?: BranchUncheckedUpdateManyWithoutSchoolNestedInput
    students?: StudentUncheckedUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutSchoolNestedInput
  }

  export type BranchUpsertWithoutUsersInput = {
    update: XOR<BranchUpdateWithoutUsersInput, BranchUncheckedUpdateWithoutUsersInput>
    create: XOR<BranchCreateWithoutUsersInput, BranchUncheckedCreateWithoutUsersInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutUsersInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutUsersInput, BranchUncheckedUpdateWithoutUsersInput>
  }

  export type BranchUpdateWithoutUsersInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutUsersInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type BranchCreateWithoutStudentsInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
    guardians?: GuardianCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutStudentsInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutStudentsInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutStudentsInput, BranchUncheckedCreateWithoutStudentsInput>
  }

  export type SchoolCreateWithoutStudentsInput = {
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserCreateNestedManyWithoutSchoolInput
    branches?: BranchCreateNestedManyWithoutSchoolInput
    guardians?: GuardianCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUncheckedCreateWithoutStudentsInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserUncheckedCreateNestedManyWithoutSchoolInput
    branches?: BranchUncheckedCreateNestedManyWithoutSchoolInput
    guardians?: GuardianUncheckedCreateNestedManyWithoutSchoolInput
  }

  export type SchoolCreateOrConnectWithoutStudentsInput = {
    where: SchoolWhereUniqueInput
    create: XOR<SchoolCreateWithoutStudentsInput, SchoolUncheckedCreateWithoutStudentsInput>
  }

  export type StudentTrackingCreateWithoutStudentInput = {
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTrackingUncheckedCreateWithoutStudentInput = {
    id?: number
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTrackingCreateOrConnectWithoutStudentInput = {
    where: StudentTrackingWhereUniqueInput
    create: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput>
  }

  export type StudentTrackingCreateManyStudentInputEnvelope = {
    data: StudentTrackingCreateManyStudentInput | StudentTrackingCreateManyStudentInput[]
    skipDuplicates?: boolean
  }

  export type BranchUpsertWithoutStudentsInput = {
    update: XOR<BranchUpdateWithoutStudentsInput, BranchUncheckedUpdateWithoutStudentsInput>
    create: XOR<BranchCreateWithoutStudentsInput, BranchUncheckedCreateWithoutStudentsInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutStudentsInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutStudentsInput, BranchUncheckedUpdateWithoutStudentsInput>
  }

  export type BranchUpdateWithoutStudentsInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutStudentsInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type SchoolUpsertWithoutStudentsInput = {
    update: XOR<SchoolUpdateWithoutStudentsInput, SchoolUncheckedUpdateWithoutStudentsInput>
    create: XOR<SchoolCreateWithoutStudentsInput, SchoolUncheckedCreateWithoutStudentsInput>
    where?: SchoolWhereInput
  }

  export type SchoolUpdateToOneWithWhereWithoutStudentsInput = {
    where?: SchoolWhereInput
    data: XOR<SchoolUpdateWithoutStudentsInput, SchoolUncheckedUpdateWithoutStudentsInput>
  }

  export type SchoolUpdateWithoutStudentsInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUpdateManyWithoutSchoolNestedInput
    branches?: BranchUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolUncheckedUpdateWithoutStudentsInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUncheckedUpdateManyWithoutSchoolNestedInput
    branches?: BranchUncheckedUpdateManyWithoutSchoolNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutSchoolNestedInput
  }

  export type StudentTrackingUpsertWithWhereUniqueWithoutStudentInput = {
    where: StudentTrackingWhereUniqueInput
    update: XOR<StudentTrackingUpdateWithoutStudentInput, StudentTrackingUncheckedUpdateWithoutStudentInput>
    create: XOR<StudentTrackingCreateWithoutStudentInput, StudentTrackingUncheckedCreateWithoutStudentInput>
  }

  export type StudentTrackingUpdateWithWhereUniqueWithoutStudentInput = {
    where: StudentTrackingWhereUniqueInput
    data: XOR<StudentTrackingUpdateWithoutStudentInput, StudentTrackingUncheckedUpdateWithoutStudentInput>
  }

  export type StudentTrackingUpdateManyWithWhereWithoutStudentInput = {
    where: StudentTrackingScalarWhereInput
    data: XOR<StudentTrackingUpdateManyMutationInput, StudentTrackingUncheckedUpdateManyWithoutStudentInput>
  }

  export type StudentTrackingScalarWhereInput = {
    AND?: StudentTrackingScalarWhereInput | StudentTrackingScalarWhereInput[]
    OR?: StudentTrackingScalarWhereInput[]
    NOT?: StudentTrackingScalarWhereInput | StudentTrackingScalarWhereInput[]
    id?: IntFilter<"StudentTracking"> | number
    session_class_id?: IntFilter<"StudentTracking"> | number
    specialization_id?: IntNullableFilter<"StudentTracking"> | number | null
    group_id?: IntNullableFilter<"StudentTracking"> | number | null
    student_id?: IntFilter<"StudentTracking"> | number
    created_by?: IntNullableFilter<"StudentTracking"> | number | null
    created_at?: DateTimeFilter<"StudentTracking"> | Date | string
    updated_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"StudentTracking"> | Date | string | null
  }

  export type SchoolCreateWithoutGuardiansInput = {
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserCreateNestedManyWithoutSchoolInput
    branches?: BranchCreateNestedManyWithoutSchoolInput
    students?: StudentCreateNestedManyWithoutSchoolInput
  }

  export type SchoolUncheckedCreateWithoutGuardiansInput = {
    id?: number
    uuid?: string
    school_name: string
    school_approved?: number
    school_active?: number
    profile_photo_path?: string | null
    aboutus?: string | null
    mission?: string | null
    vision?: string | null
    idcard_bg_color?: string | null
    idcard_design_color?: string | null
    idcard_text_color?: string | null
    idcard_tnc1?: string | null
    idcard_tnc2?: string | null
    school_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    users?: UserUncheckedCreateNestedManyWithoutSchoolInput
    branches?: BranchUncheckedCreateNestedManyWithoutSchoolInput
    students?: StudentUncheckedCreateNestedManyWithoutSchoolInput
  }

  export type SchoolCreateOrConnectWithoutGuardiansInput = {
    where: SchoolWhereUniqueInput
    create: XOR<SchoolCreateWithoutGuardiansInput, SchoolUncheckedCreateWithoutGuardiansInput>
  }

  export type BranchCreateWithoutGuardiansInput = {
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    school: SchoolCreateNestedOneWithoutBranchesInput
    branchLevels?: BranchLevelCreateNestedManyWithoutBranchInput
    students?: StudentCreateNestedManyWithoutBranchInput
    users?: UserCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookCreateNestedManyWithoutBranchInput
  }

  export type BranchUncheckedCreateWithoutGuardiansInput = {
    id?: number
    school_id: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branchLevels?: BranchLevelUncheckedCreateNestedManyWithoutBranchInput
    students?: StudentUncheckedCreateNestedManyWithoutBranchInput
    users?: UserUncheckedCreateNestedManyWithoutBranchInput
    multimedia?: MultimediaUncheckedCreateNestedManyWithoutBranchInput
    librarybooks?: LibraryBookUncheckedCreateNestedManyWithoutBranchInput
  }

  export type BranchCreateOrConnectWithoutGuardiansInput = {
    where: BranchWhereUniqueInput
    create: XOR<BranchCreateWithoutGuardiansInput, BranchUncheckedCreateWithoutGuardiansInput>
  }

  export type SchoolUpsertWithoutGuardiansInput = {
    update: XOR<SchoolUpdateWithoutGuardiansInput, SchoolUncheckedUpdateWithoutGuardiansInput>
    create: XOR<SchoolCreateWithoutGuardiansInput, SchoolUncheckedCreateWithoutGuardiansInput>
    where?: SchoolWhereInput
  }

  export type SchoolUpdateToOneWithWhereWithoutGuardiansInput = {
    where?: SchoolWhereInput
    data: XOR<SchoolUpdateWithoutGuardiansInput, SchoolUncheckedUpdateWithoutGuardiansInput>
  }

  export type SchoolUpdateWithoutGuardiansInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUpdateManyWithoutSchoolNestedInput
    branches?: BranchUpdateManyWithoutSchoolNestedInput
    students?: StudentUpdateManyWithoutSchoolNestedInput
  }

  export type SchoolUncheckedUpdateWithoutGuardiansInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    school_name?: StringFieldUpdateOperationsInput | string
    school_approved?: IntFieldUpdateOperationsInput | number
    school_active?: IntFieldUpdateOperationsInput | number
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    aboutus?: NullableStringFieldUpdateOperationsInput | string | null
    mission?: NullableStringFieldUpdateOperationsInput | string | null
    vision?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_bg_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_design_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_text_color?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc1?: NullableStringFieldUpdateOperationsInput | string | null
    idcard_tnc2?: NullableStringFieldUpdateOperationsInput | string | null
    school_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    users?: UserUncheckedUpdateManyWithoutSchoolNestedInput
    branches?: BranchUncheckedUpdateManyWithoutSchoolNestedInput
    students?: StudentUncheckedUpdateManyWithoutSchoolNestedInput
  }

  export type BranchUpsertWithoutGuardiansInput = {
    update: XOR<BranchUpdateWithoutGuardiansInput, BranchUncheckedUpdateWithoutGuardiansInput>
    create: XOR<BranchCreateWithoutGuardiansInput, BranchUncheckedCreateWithoutGuardiansInput>
    where?: BranchWhereInput
  }

  export type BranchUpdateToOneWithWhereWithoutGuardiansInput = {
    where?: BranchWhereInput
    data: XOR<BranchUpdateWithoutGuardiansInput, BranchUncheckedUpdateWithoutGuardiansInput>
  }

  export type BranchUpdateWithoutGuardiansInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneRequiredWithoutBranchesNestedInput
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutGuardiansInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type RoleCrudPermissionCreateWithoutPermissionInput = {
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    role: RoleCreateNestedOneWithoutRoleCrudPermissionInput
  }

  export type RoleCrudPermissionUncheckedCreateWithoutPermissionInput = {
    id?: number
    role_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCrudPermissionCreateOrConnectWithoutPermissionInput = {
    where: RoleCrudPermissionWhereUniqueInput
    create: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type RoleCrudPermissionCreateManyPermissionInputEnvelope = {
    data: RoleCrudPermissionCreateManyPermissionInput | RoleCrudPermissionCreateManyPermissionInput[]
    skipDuplicates?: boolean
  }

  export type UserCrudPermissionCreateWithoutPermissionInput = {
    user_type: string
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    User?: UserCreateNestedOneWithoutCrudUserPermissionInput
  }

  export type UserCrudPermissionUncheckedCreateWithoutPermissionInput = {
    id?: number
    user_id: number
    user_type: string
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionCreateOrConnectWithoutPermissionInput = {
    where: UserCrudPermissionWhereUniqueInput
    create: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type UserCrudPermissionCreateManyPermissionInputEnvelope = {
    data: UserCrudPermissionCreateManyPermissionInput | UserCrudPermissionCreateManyPermissionInput[]
    skipDuplicates?: boolean
  }

  export type RolePermissionCreateWithoutPermissionInput = {
    role_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RolePermissionUncheckedCreateWithoutPermissionInput = {
    id?: number
    role_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RolePermissionCreateOrConnectWithoutPermissionInput = {
    where: RolePermissionWhereUniqueInput
    create: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput>
  }

  export type RolePermissionCreateManyPermissionInputEnvelope = {
    data: RolePermissionCreateManyPermissionInput | RolePermissionCreateManyPermissionInput[]
    skipDuplicates?: boolean
  }

  export type UserPermissionCreateWithoutPermissionInput = {
    user_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    User?: UserCreateNestedOneWithoutPermissionUserInput
  }

  export type UserPermissionUncheckedCreateWithoutPermissionInput = {
    id?: number
    user_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    userId?: number | null
  }

  export type UserPermissionCreateOrConnectWithoutPermissionInput = {
    where: UserPermissionWhereUniqueInput
    create: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type UserPermissionCreateManyPermissionInputEnvelope = {
    data: UserPermissionCreateManyPermissionInput | UserPermissionCreateManyPermissionInput[]
    skipDuplicates?: boolean
  }

  export type RoleCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput = {
    where: RoleCrudPermissionWhereUniqueInput
    update: XOR<RoleCrudPermissionUpdateWithoutPermissionInput, RoleCrudPermissionUncheckedUpdateWithoutPermissionInput>
    create: XOR<RoleCrudPermissionCreateWithoutPermissionInput, RoleCrudPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type RoleCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput = {
    where: RoleCrudPermissionWhereUniqueInput
    data: XOR<RoleCrudPermissionUpdateWithoutPermissionInput, RoleCrudPermissionUncheckedUpdateWithoutPermissionInput>
  }

  export type RoleCrudPermissionUpdateManyWithWhereWithoutPermissionInput = {
    where: RoleCrudPermissionScalarWhereInput
    data: XOR<RoleCrudPermissionUpdateManyMutationInput, RoleCrudPermissionUncheckedUpdateManyWithoutPermissionInput>
  }

  export type RoleCrudPermissionScalarWhereInput = {
    AND?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
    OR?: RoleCrudPermissionScalarWhereInput[]
    NOT?: RoleCrudPermissionScalarWhereInput | RoleCrudPermissionScalarWhereInput[]
    id?: IntFilter<"RoleCrudPermission"> | number
    role_id?: IntFilter<"RoleCrudPermission"> | number
    permission_id?: IntFilter<"RoleCrudPermission"> | number
    permission_menu?: IntFilter<"RoleCrudPermission"> | number
    permission_create?: IntFilter<"RoleCrudPermission"> | number
    permission_read?: IntFilter<"RoleCrudPermission"> | number
    permission_update?: IntFilter<"RoleCrudPermission"> | number
    permission_delete?: IntFilter<"RoleCrudPermission"> | number
    created_at?: DateTimeFilter<"RoleCrudPermission"> | Date | string
    created_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RoleCrudPermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RoleCrudPermission"> | number | null
  }

  export type UserCrudPermissionUpsertWithWhereUniqueWithoutPermissionInput = {
    where: UserCrudPermissionWhereUniqueInput
    update: XOR<UserCrudPermissionUpdateWithoutPermissionInput, UserCrudPermissionUncheckedUpdateWithoutPermissionInput>
    create: XOR<UserCrudPermissionCreateWithoutPermissionInput, UserCrudPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type UserCrudPermissionUpdateWithWhereUniqueWithoutPermissionInput = {
    where: UserCrudPermissionWhereUniqueInput
    data: XOR<UserCrudPermissionUpdateWithoutPermissionInput, UserCrudPermissionUncheckedUpdateWithoutPermissionInput>
  }

  export type UserCrudPermissionUpdateManyWithWhereWithoutPermissionInput = {
    where: UserCrudPermissionScalarWhereInput
    data: XOR<UserCrudPermissionUpdateManyMutationInput, UserCrudPermissionUncheckedUpdateManyWithoutPermissionInput>
  }

  export type RolePermissionUpsertWithWhereUniqueWithoutPermissionInput = {
    where: RolePermissionWhereUniqueInput
    update: XOR<RolePermissionUpdateWithoutPermissionInput, RolePermissionUncheckedUpdateWithoutPermissionInput>
    create: XOR<RolePermissionCreateWithoutPermissionInput, RolePermissionUncheckedCreateWithoutPermissionInput>
  }

  export type RolePermissionUpdateWithWhereUniqueWithoutPermissionInput = {
    where: RolePermissionWhereUniqueInput
    data: XOR<RolePermissionUpdateWithoutPermissionInput, RolePermissionUncheckedUpdateWithoutPermissionInput>
  }

  export type RolePermissionUpdateManyWithWhereWithoutPermissionInput = {
    where: RolePermissionScalarWhereInput
    data: XOR<RolePermissionUpdateManyMutationInput, RolePermissionUncheckedUpdateManyWithoutPermissionInput>
  }

  export type RolePermissionScalarWhereInput = {
    AND?: RolePermissionScalarWhereInput | RolePermissionScalarWhereInput[]
    OR?: RolePermissionScalarWhereInput[]
    NOT?: RolePermissionScalarWhereInput | RolePermissionScalarWhereInput[]
    id?: IntFilter<"RolePermission"> | number
    role_id?: IntFilter<"RolePermission"> | number
    permission_id?: IntFilter<"RolePermission"> | number
    created_at?: DateTimeFilter<"RolePermission"> | Date | string
    created_by?: IntNullableFilter<"RolePermission"> | number | null
    updated_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    updated_by?: IntNullableFilter<"RolePermission"> | number | null
    deleted_at?: DateTimeNullableFilter<"RolePermission"> | Date | string | null
    deleted_by?: IntNullableFilter<"RolePermission"> | number | null
  }

  export type UserPermissionUpsertWithWhereUniqueWithoutPermissionInput = {
    where: UserPermissionWhereUniqueInput
    update: XOR<UserPermissionUpdateWithoutPermissionInput, UserPermissionUncheckedUpdateWithoutPermissionInput>
    create: XOR<UserPermissionCreateWithoutPermissionInput, UserPermissionUncheckedCreateWithoutPermissionInput>
  }

  export type UserPermissionUpdateWithWhereUniqueWithoutPermissionInput = {
    where: UserPermissionWhereUniqueInput
    data: XOR<UserPermissionUpdateWithoutPermissionInput, UserPermissionUncheckedUpdateWithoutPermissionInput>
  }

  export type UserPermissionUpdateManyWithWhereWithoutPermissionInput = {
    where: UserPermissionScalarWhereInput
    data: XOR<UserPermissionUpdateManyMutationInput, UserPermissionUncheckedUpdateManyWithoutPermissionInput>
  }

  export type RoleCreateWithoutRoleCrudPermissionInput = {
    name: string
    display_name: string
    description: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleUncheckedCreateWithoutRoleCrudPermissionInput = {
    id?: number
    name: string
    display_name: string
    description: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCreateOrConnectWithoutRoleCrudPermissionInput = {
    where: RoleWhereUniqueInput
    create: XOR<RoleCreateWithoutRoleCrudPermissionInput, RoleUncheckedCreateWithoutRoleCrudPermissionInput>
  }

  export type PermissionCreateWithoutRoleCrudPermissionInput = {
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    UserCrudPermission?: UserCrudPermissionCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUncheckedCreateWithoutRoleCrudPermissionInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    UserCrudPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionUncheckedCreateNestedManyWithoutPermissionInput
  }

  export type PermissionCreateOrConnectWithoutRoleCrudPermissionInput = {
    where: PermissionWhereUniqueInput
    create: XOR<PermissionCreateWithoutRoleCrudPermissionInput, PermissionUncheckedCreateWithoutRoleCrudPermissionInput>
  }

  export type RoleUpsertWithoutRoleCrudPermissionInput = {
    update: XOR<RoleUpdateWithoutRoleCrudPermissionInput, RoleUncheckedUpdateWithoutRoleCrudPermissionInput>
    create: XOR<RoleCreateWithoutRoleCrudPermissionInput, RoleUncheckedCreateWithoutRoleCrudPermissionInput>
    where?: RoleWhereInput
  }

  export type RoleUpdateToOneWithWhereWithoutRoleCrudPermissionInput = {
    where?: RoleWhereInput
    data: XOR<RoleUpdateWithoutRoleCrudPermissionInput, RoleUncheckedUpdateWithoutRoleCrudPermissionInput>
  }

  export type RoleUpdateWithoutRoleCrudPermissionInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleUncheckedUpdateWithoutRoleCrudPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type PermissionUpsertWithoutRoleCrudPermissionInput = {
    update: XOR<PermissionUpdateWithoutRoleCrudPermissionInput, PermissionUncheckedUpdateWithoutRoleCrudPermissionInput>
    create: XOR<PermissionCreateWithoutRoleCrudPermissionInput, PermissionUncheckedCreateWithoutRoleCrudPermissionInput>
    where?: PermissionWhereInput
  }

  export type PermissionUpdateToOneWithWhereWithoutRoleCrudPermissionInput = {
    where?: PermissionWhereInput
    data: XOR<PermissionUpdateWithoutRoleCrudPermissionInput, PermissionUncheckedUpdateWithoutRoleCrudPermissionInput>
  }

  export type PermissionUpdateWithoutRoleCrudPermissionInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    UserCrudPermission?: UserCrudPermissionUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionUncheckedUpdateWithoutRoleCrudPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    UserCrudPermission?: UserCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUncheckedUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionCreateWithoutRolePermissionInput = {
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUncheckedCreateWithoutRolePermissionInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionUncheckedCreateNestedManyWithoutPermissionInput
  }

  export type PermissionCreateOrConnectWithoutRolePermissionInput = {
    where: PermissionWhereUniqueInput
    create: XOR<PermissionCreateWithoutRolePermissionInput, PermissionUncheckedCreateWithoutRolePermissionInput>
  }

  export type PermissionUpsertWithoutRolePermissionInput = {
    update: XOR<PermissionUpdateWithoutRolePermissionInput, PermissionUncheckedUpdateWithoutRolePermissionInput>
    create: XOR<PermissionCreateWithoutRolePermissionInput, PermissionUncheckedCreateWithoutRolePermissionInput>
    where?: PermissionWhereInput
  }

  export type PermissionUpdateToOneWithWhereWithoutRolePermissionInput = {
    where?: PermissionWhereInput
    data: XOR<PermissionUpdateWithoutRolePermissionInput, PermissionUncheckedUpdateWithoutRolePermissionInput>
  }

  export type PermissionUpdateWithoutRolePermissionInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionUncheckedUpdateWithoutRolePermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUncheckedUpdateManyWithoutPermissionNestedInput
  }

  export type RoleCrudPermissionCreateWithoutRoleInput = {
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    permission: PermissionCreateNestedOneWithoutRoleCrudPermissionInput
  }

  export type RoleCrudPermissionUncheckedCreateWithoutRoleInput = {
    id?: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCrudPermissionCreateOrConnectWithoutRoleInput = {
    where: RoleCrudPermissionWhereUniqueInput
    create: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput>
  }

  export type RoleCrudPermissionCreateManyRoleInputEnvelope = {
    data: RoleCrudPermissionCreateManyRoleInput | RoleCrudPermissionCreateManyRoleInput[]
    skipDuplicates?: boolean
  }

  export type RoleCrudPermissionUpsertWithWhereUniqueWithoutRoleInput = {
    where: RoleCrudPermissionWhereUniqueInput
    update: XOR<RoleCrudPermissionUpdateWithoutRoleInput, RoleCrudPermissionUncheckedUpdateWithoutRoleInput>
    create: XOR<RoleCrudPermissionCreateWithoutRoleInput, RoleCrudPermissionUncheckedCreateWithoutRoleInput>
  }

  export type RoleCrudPermissionUpdateWithWhereUniqueWithoutRoleInput = {
    where: RoleCrudPermissionWhereUniqueInput
    data: XOR<RoleCrudPermissionUpdateWithoutRoleInput, RoleCrudPermissionUncheckedUpdateWithoutRoleInput>
  }

  export type RoleCrudPermissionUpdateManyWithWhereWithoutRoleInput = {
    where: RoleCrudPermissionScalarWhereInput
    data: XOR<RoleCrudPermissionUpdateManyMutationInput, RoleCrudPermissionUncheckedUpdateManyWithoutRoleInput>
  }

  export type PermissionCreateWithoutUserCrudPermissionInput = {
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUncheckedCreateWithoutUserCrudPermissionInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserPermission?: UserPermissionUncheckedCreateNestedManyWithoutPermissionInput
  }

  export type PermissionCreateOrConnectWithoutUserCrudPermissionInput = {
    where: PermissionWhereUniqueInput
    create: XOR<PermissionCreateWithoutUserCrudPermissionInput, PermissionUncheckedCreateWithoutUserCrudPermissionInput>
  }

  export type UserCreateWithoutCrudUserPermissionInput = {
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    PermissionUser?: UserPermissionCreateNestedManyWithoutUserInput
    school?: SchoolCreateNestedOneWithoutUsersInput
    branch?: BranchCreateNestedOneWithoutUsersInput
  }

  export type UserUncheckedCreateWithoutCrudUserPermissionInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    PermissionUser?: UserPermissionUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutCrudUserPermissionInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutCrudUserPermissionInput, UserUncheckedCreateWithoutCrudUserPermissionInput>
  }

  export type PermissionUpsertWithoutUserCrudPermissionInput = {
    update: XOR<PermissionUpdateWithoutUserCrudPermissionInput, PermissionUncheckedUpdateWithoutUserCrudPermissionInput>
    create: XOR<PermissionCreateWithoutUserCrudPermissionInput, PermissionUncheckedCreateWithoutUserCrudPermissionInput>
    where?: PermissionWhereInput
  }

  export type PermissionUpdateToOneWithWhereWithoutUserCrudPermissionInput = {
    where?: PermissionWhereInput
    data: XOR<PermissionUpdateWithoutUserCrudPermissionInput, PermissionUncheckedUpdateWithoutUserCrudPermissionInput>
  }

  export type PermissionUpdateWithoutUserCrudPermissionInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionUncheckedUpdateWithoutUserCrudPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserPermission?: UserPermissionUncheckedUpdateManyWithoutPermissionNestedInput
  }

  export type UserUpsertWithoutCrudUserPermissionInput = {
    update: XOR<UserUpdateWithoutCrudUserPermissionInput, UserUncheckedUpdateWithoutCrudUserPermissionInput>
    create: XOR<UserCreateWithoutCrudUserPermissionInput, UserUncheckedCreateWithoutCrudUserPermissionInput>
    where?: UserWhereInput
  }

  export type UserUpdateToOneWithWhereWithoutCrudUserPermissionInput = {
    where?: UserWhereInput
    data: XOR<UserUpdateWithoutCrudUserPermissionInput, UserUncheckedUpdateWithoutCrudUserPermissionInput>
  }

  export type UserUpdateWithoutCrudUserPermissionInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    PermissionUser?: UserPermissionUpdateManyWithoutUserNestedInput
    school?: SchoolUpdateOneWithoutUsersNestedInput
    branch?: BranchUpdateOneWithoutUsersNestedInput
  }

  export type UserUncheckedUpdateWithoutCrudUserPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    PermissionUser?: UserPermissionUncheckedUpdateManyWithoutUserNestedInput
  }

  export type PermissionCreateWithoutUserPermissionInput = {
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionCreateNestedManyWithoutPermissionInput
  }

  export type PermissionUncheckedCreateWithoutUserPermissionInput = {
    id?: number
    name: string
    display_name: string
    description?: string | null
    is_crud?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    UserCrudPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutPermissionInput
    RolePermission?: RolePermissionUncheckedCreateNestedManyWithoutPermissionInput
  }

  export type PermissionCreateOrConnectWithoutUserPermissionInput = {
    where: PermissionWhereUniqueInput
    create: XOR<PermissionCreateWithoutUserPermissionInput, PermissionUncheckedCreateWithoutUserPermissionInput>
  }

  export type UserCreateWithoutPermissionUserInput = {
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionCreateNestedManyWithoutUserInput
    school?: SchoolCreateNestedOneWithoutUsersInput
    branch?: BranchCreateNestedOneWithoutUsersInput
  }

  export type UserUncheckedCreateWithoutPermissionUserInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedCreateNestedManyWithoutUserInput
  }

  export type UserCreateOrConnectWithoutPermissionUserInput = {
    where: UserWhereUniqueInput
    create: XOR<UserCreateWithoutPermissionUserInput, UserUncheckedCreateWithoutPermissionUserInput>
  }

  export type PermissionUpsertWithoutUserPermissionInput = {
    update: XOR<PermissionUpdateWithoutUserPermissionInput, PermissionUncheckedUpdateWithoutUserPermissionInput>
    create: XOR<PermissionCreateWithoutUserPermissionInput, PermissionUncheckedCreateWithoutUserPermissionInput>
    where?: PermissionWhereInput
  }

  export type PermissionUpdateToOneWithWhereWithoutUserPermissionInput = {
    where?: PermissionWhereInput
    data: XOR<PermissionUpdateWithoutUserPermissionInput, PermissionUncheckedUpdateWithoutUserPermissionInput>
  }

  export type PermissionUpdateWithoutUserPermissionInput = {
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUpdateManyWithoutPermissionNestedInput
  }

  export type PermissionUncheckedUpdateWithoutUserPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    display_name?: StringFieldUpdateOperationsInput | string
    description?: NullableStringFieldUpdateOperationsInput | string | null
    is_crud?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    RoleCrudPermission?: RoleCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    UserCrudPermission?: UserCrudPermissionUncheckedUpdateManyWithoutPermissionNestedInput
    RolePermission?: RolePermissionUncheckedUpdateManyWithoutPermissionNestedInput
  }

  export type UserUpsertWithoutPermissionUserInput = {
    update: XOR<UserUpdateWithoutPermissionUserInput, UserUncheckedUpdateWithoutPermissionUserInput>
    create: XOR<UserCreateWithoutPermissionUserInput, UserUncheckedCreateWithoutPermissionUserInput>
    where?: UserWhereInput
  }

  export type UserUpdateToOneWithWhereWithoutPermissionUserInput = {
    where?: UserWhereInput
    data: XOR<UserUpdateWithoutPermissionUserInput, UserUncheckedUpdateWithoutPermissionUserInput>
  }

  export type UserUpdateWithoutPermissionUserInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUpdateManyWithoutUserNestedInput
    school?: SchoolUpdateOneWithoutUsersNestedInput
    branch?: BranchUpdateOneWithoutUsersNestedInput
  }

  export type UserUncheckedUpdateWithoutPermissionUserInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedUpdateManyWithoutUserNestedInput
  }

  export type SessionTermCreateWithoutTermInput = {
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    session?: BranchSessionCreateNestedOneWithoutSessionTermInput
    sessionclass?: SessionClassCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermUncheckedCreateWithoutTermInput = {
    id?: number
    session_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    sessionclass?: SessionClassUncheckedCreateNestedManyWithoutSessiontermInput
  }

  export type SessionTermCreateOrConnectWithoutTermInput = {
    where: SessionTermWhereUniqueInput
    create: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput>
  }

  export type SessionTermCreateManyTermInputEnvelope = {
    data: SessionTermCreateManyTermInput | SessionTermCreateManyTermInput[]
    skipDuplicates?: boolean
  }

  export type ExamCreateWithoutTermInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutTermInput = {
    id?: number
    class_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamCreateOrConnectWithoutTermInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput>
  }

  export type ExamCreateManyTermInputEnvelope = {
    data: ExamCreateManyTermInput | ExamCreateManyTermInput[]
    skipDuplicates?: boolean
  }

  export type SessionTermUpsertWithWhereUniqueWithoutTermInput = {
    where: SessionTermWhereUniqueInput
    update: XOR<SessionTermUpdateWithoutTermInput, SessionTermUncheckedUpdateWithoutTermInput>
    create: XOR<SessionTermCreateWithoutTermInput, SessionTermUncheckedCreateWithoutTermInput>
  }

  export type SessionTermUpdateWithWhereUniqueWithoutTermInput = {
    where: SessionTermWhereUniqueInput
    data: XOR<SessionTermUpdateWithoutTermInput, SessionTermUncheckedUpdateWithoutTermInput>
  }

  export type SessionTermUpdateManyWithWhereWithoutTermInput = {
    where: SessionTermScalarWhereInput
    data: XOR<SessionTermUpdateManyMutationInput, SessionTermUncheckedUpdateManyWithoutTermInput>
  }

  export type ExamUpsertWithWhereUniqueWithoutTermInput = {
    where: ExamWhereUniqueInput
    update: XOR<ExamUpdateWithoutTermInput, ExamUncheckedUpdateWithoutTermInput>
    create: XOR<ExamCreateWithoutTermInput, ExamUncheckedCreateWithoutTermInput>
  }

  export type ExamUpdateWithWhereUniqueWithoutTermInput = {
    where: ExamWhereUniqueInput
    data: XOR<ExamUpdateWithoutTermInput, ExamUncheckedUpdateWithoutTermInput>
  }

  export type ExamUpdateManyWithWhereWithoutTermInput = {
    where: ExamScalarWhereInput
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyWithoutTermInput>
  }

  export type SchoolSubjectCreateWithoutClassSubjectTemplateInput = {
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectCreateNestedManyWithoutSubjectInput
    exam?: ExamCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectUncheckedCreateWithoutClassSubjectTemplateInput = {
    id?: number
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedCreateNestedManyWithoutSubjectInput
    exam?: ExamUncheckedCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectCreateOrConnectWithoutClassSubjectTemplateInput = {
    where: SchoolSubjectWhereUniqueInput
    create: XOR<SchoolSubjectCreateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedCreateWithoutClassSubjectTemplateInput>
  }

  export type SchoolSubjectUpsertWithoutClassSubjectTemplateInput = {
    update: XOR<SchoolSubjectUpdateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedUpdateWithoutClassSubjectTemplateInput>
    create: XOR<SchoolSubjectCreateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedCreateWithoutClassSubjectTemplateInput>
    where?: SchoolSubjectWhereInput
  }

  export type SchoolSubjectUpdateToOneWithWhereWithoutClassSubjectTemplateInput = {
    where?: SchoolSubjectWhereInput
    data: XOR<SchoolSubjectUpdateWithoutClassSubjectTemplateInput, SchoolSubjectUncheckedUpdateWithoutClassSubjectTemplateInput>
  }

  export type SchoolSubjectUpdateWithoutClassSubjectTemplateInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUpdateManyWithoutSubjectNestedInput
    exam?: ExamUpdateManyWithoutSubjectNestedInput
  }

  export type SchoolSubjectUncheckedUpdateWithoutClassSubjectTemplateInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedUpdateManyWithoutSubjectNestedInput
    exam?: ExamUncheckedUpdateManyWithoutSubjectNestedInput
  }

  export type ClassTemplateCreateWithoutSessionClassInput = {
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamCreateNestedManyWithoutClassInput
  }

  export type ClassTemplateUncheckedCreateWithoutSessionClassInput = {
    id?: number
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam?: ExamUncheckedCreateNestedManyWithoutClassInput
  }

  export type ClassTemplateCreateOrConnectWithoutSessionClassInput = {
    where: ClassTemplateWhereUniqueInput
    create: XOR<ClassTemplateCreateWithoutSessionClassInput, ClassTemplateUncheckedCreateWithoutSessionClassInput>
  }

  export type SessionTermCreateWithoutSessionclassInput = {
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    session?: BranchSessionCreateNestedOneWithoutSessionTermInput
    term?: TermCreateNestedOneWithoutSessionTermInput
  }

  export type SessionTermUncheckedCreateWithoutSessionclassInput = {
    id?: number
    session_id: number
    term_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionTermCreateOrConnectWithoutSessionclassInput = {
    where: SessionTermWhereUniqueInput
    create: XOR<SessionTermCreateWithoutSessionclassInput, SessionTermUncheckedCreateWithoutSessionclassInput>
  }

  export type ClassTemplateUpsertWithoutSessionClassInput = {
    update: XOR<ClassTemplateUpdateWithoutSessionClassInput, ClassTemplateUncheckedUpdateWithoutSessionClassInput>
    create: XOR<ClassTemplateCreateWithoutSessionClassInput, ClassTemplateUncheckedCreateWithoutSessionClassInput>
    where?: ClassTemplateWhereInput
  }

  export type ClassTemplateUpdateToOneWithWhereWithoutSessionClassInput = {
    where?: ClassTemplateWhereInput
    data: XOR<ClassTemplateUpdateWithoutSessionClassInput, ClassTemplateUncheckedUpdateWithoutSessionClassInput>
  }

  export type ClassTemplateUpdateWithoutSessionClassInput = {
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUpdateManyWithoutClassNestedInput
  }

  export type ClassTemplateUncheckedUpdateWithoutSessionClassInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUncheckedUpdateManyWithoutClassNestedInput
  }

  export type SessionTermUpsertWithoutSessionclassInput = {
    update: XOR<SessionTermUpdateWithoutSessionclassInput, SessionTermUncheckedUpdateWithoutSessionclassInput>
    create: XOR<SessionTermCreateWithoutSessionclassInput, SessionTermUncheckedCreateWithoutSessionclassInput>
    where?: SessionTermWhereInput
  }

  export type SessionTermUpdateToOneWithWhereWithoutSessionclassInput = {
    where?: SessionTermWhereInput
    data: XOR<SessionTermUpdateWithoutSessionclassInput, SessionTermUncheckedUpdateWithoutSessionclassInput>
  }

  export type SessionTermUpdateWithoutSessionclassInput = {
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session?: BranchSessionUpdateOneWithoutSessionTermNestedInput
    term?: TermUpdateOneWithoutSessionTermNestedInput
  }

  export type SessionTermUncheckedUpdateWithoutSessionclassInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SchoolSubjectCreateWithoutSessionClassSubjectInput = {
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    ClassSubjectTemplate?: ClassSubjectTemplateCreateNestedManyWithoutSubjectInput
    exam?: ExamCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectUncheckedCreateWithoutSessionClassSubjectInput = {
    id?: number
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedCreateNestedManyWithoutSubjectInput
    exam?: ExamUncheckedCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectCreateOrConnectWithoutSessionClassSubjectInput = {
    where: SchoolSubjectWhereUniqueInput
    create: XOR<SchoolSubjectCreateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedCreateWithoutSessionClassSubjectInput>
  }

  export type SchoolSubjectUpsertWithoutSessionClassSubjectInput = {
    update: XOR<SchoolSubjectUpdateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedUpdateWithoutSessionClassSubjectInput>
    create: XOR<SchoolSubjectCreateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedCreateWithoutSessionClassSubjectInput>
    where?: SchoolSubjectWhereInput
  }

  export type SchoolSubjectUpdateToOneWithWhereWithoutSessionClassSubjectInput = {
    where?: SchoolSubjectWhereInput
    data: XOR<SchoolSubjectUpdateWithoutSessionClassSubjectInput, SchoolSubjectUncheckedUpdateWithoutSessionClassSubjectInput>
  }

  export type SchoolSubjectUpdateWithoutSessionClassSubjectInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    ClassSubjectTemplate?: ClassSubjectTemplateUpdateManyWithoutSubjectNestedInput
    exam?: ExamUpdateManyWithoutSubjectNestedInput
  }

  export type SchoolSubjectUncheckedUpdateWithoutSessionClassSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectNestedInput
    exam?: ExamUncheckedUpdateManyWithoutSubjectNestedInput
  }

  export type StudentCreateWithoutStudentTrackingInput = {
    uuid?: string | null
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    branch?: BranchCreateNestedOneWithoutStudentsInput
    school?: SchoolCreateNestedOneWithoutStudentsInput
  }

  export type StudentUncheckedCreateWithoutStudentTrackingInput = {
    id?: number
    uuid?: string | null
    school_id: number
    branch_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentCreateOrConnectWithoutStudentTrackingInput = {
    where: StudentWhereUniqueInput
    create: XOR<StudentCreateWithoutStudentTrackingInput, StudentUncheckedCreateWithoutStudentTrackingInput>
  }

  export type StudentUpsertWithoutStudentTrackingInput = {
    update: XOR<StudentUpdateWithoutStudentTrackingInput, StudentUncheckedUpdateWithoutStudentTrackingInput>
    create: XOR<StudentCreateWithoutStudentTrackingInput, StudentUncheckedCreateWithoutStudentTrackingInput>
    where?: StudentWhereInput
  }

  export type StudentUpdateToOneWithWhereWithoutStudentTrackingInput = {
    where?: StudentWhereInput
    data: XOR<StudentUpdateWithoutStudentTrackingInput, StudentUncheckedUpdateWithoutStudentTrackingInput>
  }

  export type StudentUpdateWithoutStudentTrackingInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutStudentsNestedInput
    school?: SchoolUpdateOneWithoutStudentsNestedInput
  }

  export type StudentUncheckedUpdateWithoutStudentTrackingInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    branch_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkCreateWithoutScoresetupInput = {
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    exam: ExamCreateNestedOneWithoutExamscoresetuplinkInput
  }

  export type ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput = {
    id?: number
    exam_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkCreateOrConnectWithoutScoresetupInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    create: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput>
  }

  export type ExamScoreSetupLinkCreateManyScoresetupInputEnvelope = {
    data: ExamScoreSetupLinkCreateManyScoresetupInput | ExamScoreSetupLinkCreateManyScoresetupInput[]
    skipDuplicates?: boolean
  }

  export type ExamScoreSetupLinkUpsertWithWhereUniqueWithoutScoresetupInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    update: XOR<ExamScoreSetupLinkUpdateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedUpdateWithoutScoresetupInput>
    create: XOR<ExamScoreSetupLinkCreateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedCreateWithoutScoresetupInput>
  }

  export type ExamScoreSetupLinkUpdateWithWhereUniqueWithoutScoresetupInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    data: XOR<ExamScoreSetupLinkUpdateWithoutScoresetupInput, ExamScoreSetupLinkUncheckedUpdateWithoutScoresetupInput>
  }

  export type ExamScoreSetupLinkUpdateManyWithWhereWithoutScoresetupInput = {
    where: ExamScoreSetupLinkScalarWhereInput
    data: XOR<ExamScoreSetupLinkUpdateManyMutationInput, ExamScoreSetupLinkUncheckedUpdateManyWithoutScoresetupInput>
  }

  export type ExamScoreSetupLinkScalarWhereInput = {
    AND?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
    OR?: ExamScoreSetupLinkScalarWhereInput[]
    NOT?: ExamScoreSetupLinkScalarWhereInput | ExamScoreSetupLinkScalarWhereInput[]
    id?: IntFilter<"ExamScoreSetupLink"> | number
    exam_id?: IntFilter<"ExamScoreSetupLink"> | number
    score_setup_id?: IntFilter<"ExamScoreSetupLink"> | number
    created_by?: IntNullableFilter<"ExamScoreSetupLink"> | number | null
    created_at?: DateTimeFilter<"ExamScoreSetupLink"> | Date | string
    updated_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
    deleted_at?: DateTimeNullableFilter<"ExamScoreSetupLink"> | Date | string | null
  }

  export type ExamCreateWithoutExamtypeInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    term?: TermCreateNestedOneWithoutExamsInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutExamtypeInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamCreateOrConnectWithoutExamtypeInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput>
  }

  export type ExamCreateManyExamtypeInputEnvelope = {
    data: ExamCreateManyExamtypeInput | ExamCreateManyExamtypeInput[]
    skipDuplicates?: boolean
  }

  export type ExamUpsertWithWhereUniqueWithoutExamtypeInput = {
    where: ExamWhereUniqueInput
    update: XOR<ExamUpdateWithoutExamtypeInput, ExamUncheckedUpdateWithoutExamtypeInput>
    create: XOR<ExamCreateWithoutExamtypeInput, ExamUncheckedCreateWithoutExamtypeInput>
  }

  export type ExamUpdateWithWhereUniqueWithoutExamtypeInput = {
    where: ExamWhereUniqueInput
    data: XOR<ExamUpdateWithoutExamtypeInput, ExamUncheckedUpdateWithoutExamtypeInput>
  }

  export type ExamUpdateManyWithWhereWithoutExamtypeInput = {
    where: ExamScalarWhereInput
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyWithoutExamtypeInput>
  }

  export type ExamCreateWithoutExamcategoryInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkCreateNestedManyWithoutExamInput
    term?: TermCreateNestedOneWithoutExamsInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutExamcategoryInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedCreateNestedManyWithoutExamInput
  }

  export type ExamCreateOrConnectWithoutExamcategoryInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput>
  }

  export type ExamCreateManyExamcategoryInputEnvelope = {
    data: ExamCreateManyExamcategoryInput | ExamCreateManyExamcategoryInput[]
    skipDuplicates?: boolean
  }

  export type ExamUpsertWithWhereUniqueWithoutExamcategoryInput = {
    where: ExamWhereUniqueInput
    update: XOR<ExamUpdateWithoutExamcategoryInput, ExamUncheckedUpdateWithoutExamcategoryInput>
    create: XOR<ExamCreateWithoutExamcategoryInput, ExamUncheckedCreateWithoutExamcategoryInput>
  }

  export type ExamUpdateWithWhereUniqueWithoutExamcategoryInput = {
    where: ExamWhereUniqueInput
    data: XOR<ExamUpdateWithoutExamcategoryInput, ExamUncheckedUpdateWithoutExamcategoryInput>
  }

  export type ExamUpdateManyWithWhereWithoutExamcategoryInput = {
    where: ExamScalarWhereInput
    data: XOR<ExamUpdateManyMutationInput, ExamUncheckedUpdateManyWithoutExamcategoryInput>
  }

  export type ExamScoreSetupLinkCreateWithoutExamInput = {
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    scoresetup: SessionClassScoreSetupCreateNestedOneWithoutExamscoresetuplinkInput
  }

  export type ExamScoreSetupLinkUncheckedCreateWithoutExamInput = {
    id?: number
    score_setup_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkCreateOrConnectWithoutExamInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    create: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput>
  }

  export type ExamScoreSetupLinkCreateManyExamInputEnvelope = {
    data: ExamScoreSetupLinkCreateManyExamInput | ExamScoreSetupLinkCreateManyExamInput[]
    skipDuplicates?: boolean
  }

  export type TermCreateWithoutExamsInput = {
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermCreateNestedManyWithoutTermInput
  }

  export type TermUncheckedCreateWithoutExamsInput = {
    id?: number
    term_name: string
    term_alias: string
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionTerm?: SessionTermUncheckedCreateNestedManyWithoutTermInput
  }

  export type TermCreateOrConnectWithoutExamsInput = {
    where: TermWhereUniqueInput
    create: XOR<TermCreateWithoutExamsInput, TermUncheckedCreateWithoutExamsInput>
  }

  export type ClassTemplateCreateWithoutExamInput = {
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClass?: SessionClassCreateNestedManyWithoutClassdetailsInput
  }

  export type ClassTemplateUncheckedCreateWithoutExamInput = {
    id?: number
    branch_level_id: number
    class_name: string
    no_of_group?: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    rank?: number | null
    class_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClass?: SessionClassUncheckedCreateNestedManyWithoutClassdetailsInput
  }

  export type ClassTemplateCreateOrConnectWithoutExamInput = {
    where: ClassTemplateWhereUniqueInput
    create: XOR<ClassTemplateCreateWithoutExamInput, ClassTemplateUncheckedCreateWithoutExamInput>
  }

  export type SchoolSubjectCreateWithoutExamInput = {
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectCreateNestedManyWithoutSubjectInput
    ClassSubjectTemplate?: ClassSubjectTemplateCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectUncheckedCreateWithoutExamInput = {
    id?: number
    school_id: number
    subject_name: string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: number
    is_compulsory?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedCreateNestedManyWithoutSubjectInput
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedCreateNestedManyWithoutSubjectInput
  }

  export type SchoolSubjectCreateOrConnectWithoutExamInput = {
    where: SchoolSubjectWhereUniqueInput
    create: XOR<SchoolSubjectCreateWithoutExamInput, SchoolSubjectUncheckedCreateWithoutExamInput>
  }

  export type ExamTypeCreateWithoutExamInput = {
    exam_type_name: string
    exam_type_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamTypeUncheckedCreateWithoutExamInput = {
    id?: number
    exam_type_name: string
    exam_type_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamTypeCreateOrConnectWithoutExamInput = {
    where: ExamTypeWhereUniqueInput
    create: XOR<ExamTypeCreateWithoutExamInput, ExamTypeUncheckedCreateWithoutExamInput>
  }

  export type ExamCategoryCreateWithoutExamInput = {
    exam_category_name: string
    exam_category_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCategoryUncheckedCreateWithoutExamInput = {
    id?: number
    exam_category_name: string
    exam_category_active?: number
    desc?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCategoryCreateOrConnectWithoutExamInput = {
    where: ExamCategoryWhereUniqueInput
    create: XOR<ExamCategoryCreateWithoutExamInput, ExamCategoryUncheckedCreateWithoutExamInput>
  }

  export type ExamScoreSetupLinkUpsertWithWhereUniqueWithoutExamInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    update: XOR<ExamScoreSetupLinkUpdateWithoutExamInput, ExamScoreSetupLinkUncheckedUpdateWithoutExamInput>
    create: XOR<ExamScoreSetupLinkCreateWithoutExamInput, ExamScoreSetupLinkUncheckedCreateWithoutExamInput>
  }

  export type ExamScoreSetupLinkUpdateWithWhereUniqueWithoutExamInput = {
    where: ExamScoreSetupLinkWhereUniqueInput
    data: XOR<ExamScoreSetupLinkUpdateWithoutExamInput, ExamScoreSetupLinkUncheckedUpdateWithoutExamInput>
  }

  export type ExamScoreSetupLinkUpdateManyWithWhereWithoutExamInput = {
    where: ExamScoreSetupLinkScalarWhereInput
    data: XOR<ExamScoreSetupLinkUpdateManyMutationInput, ExamScoreSetupLinkUncheckedUpdateManyWithoutExamInput>
  }

  export type TermUpsertWithoutExamsInput = {
    update: XOR<TermUpdateWithoutExamsInput, TermUncheckedUpdateWithoutExamsInput>
    create: XOR<TermCreateWithoutExamsInput, TermUncheckedCreateWithoutExamsInput>
    where?: TermWhereInput
  }

  export type TermUpdateToOneWithWhereWithoutExamsInput = {
    where?: TermWhereInput
    data: XOR<TermUpdateWithoutExamsInput, TermUncheckedUpdateWithoutExamsInput>
  }

  export type TermUpdateWithoutExamsInput = {
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUpdateManyWithoutTermNestedInput
  }

  export type TermUncheckedUpdateWithoutExamsInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_name?: StringFieldUpdateOperationsInput | string
    term_alias?: StringFieldUpdateOperationsInput | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionTerm?: SessionTermUncheckedUpdateManyWithoutTermNestedInput
  }

  export type ClassTemplateUpsertWithoutExamInput = {
    update: XOR<ClassTemplateUpdateWithoutExamInput, ClassTemplateUncheckedUpdateWithoutExamInput>
    create: XOR<ClassTemplateCreateWithoutExamInput, ClassTemplateUncheckedCreateWithoutExamInput>
    where?: ClassTemplateWhereInput
  }

  export type ClassTemplateUpdateToOneWithWhereWithoutExamInput = {
    where?: ClassTemplateWhereInput
    data: XOR<ClassTemplateUpdateWithoutExamInput, ClassTemplateUncheckedUpdateWithoutExamInput>
  }

  export type ClassTemplateUpdateWithoutExamInput = {
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClass?: SessionClassUpdateManyWithoutClassdetailsNestedInput
  }

  export type ClassTemplateUncheckedUpdateWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_level_id?: IntFieldUpdateOperationsInput | number
    class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    rank?: NullableIntFieldUpdateOperationsInput | number | null
    class_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClass?: SessionClassUncheckedUpdateManyWithoutClassdetailsNestedInput
  }

  export type SchoolSubjectUpsertWithoutExamInput = {
    update: XOR<SchoolSubjectUpdateWithoutExamInput, SchoolSubjectUncheckedUpdateWithoutExamInput>
    create: XOR<SchoolSubjectCreateWithoutExamInput, SchoolSubjectUncheckedCreateWithoutExamInput>
    where?: SchoolSubjectWhereInput
  }

  export type SchoolSubjectUpdateToOneWithWhereWithoutExamInput = {
    where?: SchoolSubjectWhereInput
    data: XOR<SchoolSubjectUpdateWithoutExamInput, SchoolSubjectUncheckedUpdateWithoutExamInput>
  }

  export type SchoolSubjectUpdateWithoutExamInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUpdateManyWithoutSubjectNestedInput
    ClassSubjectTemplate?: ClassSubjectTemplateUpdateManyWithoutSubjectNestedInput
  }

  export type SchoolSubjectUncheckedUpdateWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    subject_name?: StringFieldUpdateOperationsInput | string
    branch_config?: NullableJsonNullValueInput | InputJsonValue
    school_subjects_active?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    SessionClassSubject?: SessionClassSubjectUncheckedUpdateManyWithoutSubjectNestedInput
    ClassSubjectTemplate?: ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectNestedInput
  }

  export type ExamTypeUpsertWithoutExamInput = {
    update: XOR<ExamTypeUpdateWithoutExamInput, ExamTypeUncheckedUpdateWithoutExamInput>
    create: XOR<ExamTypeCreateWithoutExamInput, ExamTypeUncheckedCreateWithoutExamInput>
    where?: ExamTypeWhereInput
  }

  export type ExamTypeUpdateToOneWithWhereWithoutExamInput = {
    where?: ExamTypeWhereInput
    data: XOR<ExamTypeUpdateWithoutExamInput, ExamTypeUncheckedUpdateWithoutExamInput>
  }

  export type ExamTypeUpdateWithoutExamInput = {
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamTypeUncheckedUpdateWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_type_name?: StringFieldUpdateOperationsInput | string
    exam_type_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCategoryUpsertWithoutExamInput = {
    update: XOR<ExamCategoryUpdateWithoutExamInput, ExamCategoryUncheckedUpdateWithoutExamInput>
    create: XOR<ExamCategoryCreateWithoutExamInput, ExamCategoryUncheckedCreateWithoutExamInput>
    where?: ExamCategoryWhereInput
  }

  export type ExamCategoryUpdateToOneWithWhereWithoutExamInput = {
    where?: ExamCategoryWhereInput
    data: XOR<ExamCategoryUpdateWithoutExamInput, ExamCategoryUncheckedUpdateWithoutExamInput>
  }

  export type ExamCategoryUpdateWithoutExamInput = {
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCategoryUncheckedUpdateWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_category_name?: StringFieldUpdateOperationsInput | string
    exam_category_active?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCreateWithoutExamscoresetuplinkInput = {
    desc?: string | null
    exam_date?: Date | string | null
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
    term?: TermCreateNestedOneWithoutExamsInput
    class?: ClassTemplateCreateNestedOneWithoutExamInput
    subject?: SchoolSubjectCreateNestedOneWithoutExamInput
    examtype?: ExamTypeCreateNestedOneWithoutExamInput
    examcategory?: ExamCategoryCreateNestedOneWithoutExamInput
  }

  export type ExamUncheckedCreateWithoutExamscoresetuplinkInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCreateOrConnectWithoutExamscoresetuplinkInput = {
    where: ExamWhereUniqueInput
    create: XOR<ExamCreateWithoutExamscoresetuplinkInput, ExamUncheckedCreateWithoutExamscoresetuplinkInput>
  }

  export type SessionClassScoreSetupCreateWithoutExamscoresetuplinkInput = {
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassScoreSetupUncheckedCreateWithoutExamscoresetuplinkInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    group_id?: number | null
    score_type_id: number
    display_type?: number | null
    display_name: string
    max_score: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassScoreSetupCreateOrConnectWithoutExamscoresetuplinkInput = {
    where: SessionClassScoreSetupWhereUniqueInput
    create: XOR<SessionClassScoreSetupCreateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedCreateWithoutExamscoresetuplinkInput>
  }

  export type ExamUpsertWithoutExamscoresetuplinkInput = {
    update: XOR<ExamUpdateWithoutExamscoresetuplinkInput, ExamUncheckedUpdateWithoutExamscoresetuplinkInput>
    create: XOR<ExamCreateWithoutExamscoresetuplinkInput, ExamUncheckedCreateWithoutExamscoresetuplinkInput>
    where?: ExamWhereInput
  }

  export type ExamUpdateToOneWithWhereWithoutExamscoresetuplinkInput = {
    where?: ExamWhereInput
    data: XOR<ExamUpdateWithoutExamscoresetuplinkInput, ExamUncheckedUpdateWithoutExamscoresetuplinkInput>
  }

  export type ExamUpdateWithoutExamscoresetuplinkInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    term?: TermUpdateOneWithoutExamsNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutExamscoresetuplinkInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassScoreSetupUpsertWithoutExamscoresetuplinkInput = {
    update: XOR<SessionClassScoreSetupUpdateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedUpdateWithoutExamscoresetuplinkInput>
    create: XOR<SessionClassScoreSetupCreateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedCreateWithoutExamscoresetuplinkInput>
    where?: SessionClassScoreSetupWhereInput
  }

  export type SessionClassScoreSetupUpdateToOneWithWhereWithoutExamscoresetuplinkInput = {
    where?: SessionClassScoreSetupWhereInput
    data: XOR<SessionClassScoreSetupUpdateWithoutExamscoresetuplinkInput, SessionClassScoreSetupUncheckedUpdateWithoutExamscoresetuplinkInput>
  }

  export type SessionClassScoreSetupUpdateWithoutExamscoresetuplinkInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassScoreSetupUncheckedUpdateWithoutExamscoresetuplinkInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    score_type_id?: IntFieldUpdateOperationsInput | number
    display_type?: NullableIntFieldUpdateOperationsInput | number | null
    display_name?: StringFieldUpdateOperationsInput | string
    max_score?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type CountryCreateWithoutRegionRelationInput = {
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    subregionRelation?: SubregionCreateNestedOneWithoutCountriesInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutRegionRelationInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutRegionRelationInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput>
  }

  export type CountryCreateManyRegionRelationInputEnvelope = {
    data: CountryCreateManyRegionRelationInput | CountryCreateManyRegionRelationInput[]
    skipDuplicates?: boolean
  }

  export type SubregionCreateWithoutRegionInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryCreateNestedManyWithoutSubregionRelationInput
  }

  export type SubregionUncheckedCreateWithoutRegionInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryUncheckedCreateNestedManyWithoutSubregionRelationInput
  }

  export type SubregionCreateOrConnectWithoutRegionInput = {
    where: SubregionWhereUniqueInput
    create: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput>
  }

  export type SubregionCreateManyRegionInputEnvelope = {
    data: SubregionCreateManyRegionInput | SubregionCreateManyRegionInput[]
    skipDuplicates?: boolean
  }

  export type CountryUpsertWithWhereUniqueWithoutRegionRelationInput = {
    where: CountryWhereUniqueInput
    update: XOR<CountryUpdateWithoutRegionRelationInput, CountryUncheckedUpdateWithoutRegionRelationInput>
    create: XOR<CountryCreateWithoutRegionRelationInput, CountryUncheckedCreateWithoutRegionRelationInput>
  }

  export type CountryUpdateWithWhereUniqueWithoutRegionRelationInput = {
    where: CountryWhereUniqueInput
    data: XOR<CountryUpdateWithoutRegionRelationInput, CountryUncheckedUpdateWithoutRegionRelationInput>
  }

  export type CountryUpdateManyWithWhereWithoutRegionRelationInput = {
    where: CountryScalarWhereInput
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyWithoutRegionRelationInput>
  }

  export type CountryScalarWhereInput = {
    AND?: CountryScalarWhereInput | CountryScalarWhereInput[]
    OR?: CountryScalarWhereInput[]
    NOT?: CountryScalarWhereInput | CountryScalarWhereInput[]
    id?: IntFilter<"Country"> | number
    name?: StringFilter<"Country"> | string
    iso3?: StringNullableFilter<"Country"> | string | null
    iso2?: StringNullableFilter<"Country"> | string | null
    numeric_code?: StringNullableFilter<"Country"> | string | null
    phonecode?: StringNullableFilter<"Country"> | string | null
    capital?: StringNullableFilter<"Country"> | string | null
    currency?: StringNullableFilter<"Country"> | string | null
    currency_name?: StringNullableFilter<"Country"> | string | null
    currency_symbol?: StringNullableFilter<"Country"> | string | null
    tld?: StringNullableFilter<"Country"> | string | null
    native_reserved?: StringNullableFilter<"Country"> | string | null
    population?: IntNullableFilter<"Country"> | number | null
    gdp?: IntNullableFilter<"Country"> | number | null
    region?: StringNullableFilter<"Country"> | string | null
    region_id?: IntNullableFilter<"Country"> | number | null
    subregion?: StringNullableFilter<"Country"> | string | null
    subregion_id?: IntNullableFilter<"Country"> | number | null
    nationality?: StringNullableFilter<"Country"> | string | null
    timezones?: JsonNullableFilter<"Country">
    translations?: JsonNullableFilter<"Country">
    latitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"Country"> | Decimal | DecimalJsLike | number | string | null
    emoji?: StringNullableFilter<"Country"> | string | null
    emojiU?: StringNullableFilter<"Country"> | string | null
    wikiDataId?: StringNullableFilter<"Country"> | string | null
    createdAt?: DateTimeFilter<"Country"> | Date | string
    updatedAt?: DateTimeFilter<"Country"> | Date | string
  }

  export type SubregionUpsertWithWhereUniqueWithoutRegionInput = {
    where: SubregionWhereUniqueInput
    update: XOR<SubregionUpdateWithoutRegionInput, SubregionUncheckedUpdateWithoutRegionInput>
    create: XOR<SubregionCreateWithoutRegionInput, SubregionUncheckedCreateWithoutRegionInput>
  }

  export type SubregionUpdateWithWhereUniqueWithoutRegionInput = {
    where: SubregionWhereUniqueInput
    data: XOR<SubregionUpdateWithoutRegionInput, SubregionUncheckedUpdateWithoutRegionInput>
  }

  export type SubregionUpdateManyWithWhereWithoutRegionInput = {
    where: SubregionScalarWhereInput
    data: XOR<SubregionUpdateManyMutationInput, SubregionUncheckedUpdateManyWithoutRegionInput>
  }

  export type SubregionScalarWhereInput = {
    AND?: SubregionScalarWhereInput | SubregionScalarWhereInput[]
    OR?: SubregionScalarWhereInput[]
    NOT?: SubregionScalarWhereInput | SubregionScalarWhereInput[]
    id?: IntFilter<"Subregion"> | number
    name?: StringFilter<"Subregion"> | string
    region_id?: IntFilter<"Subregion"> | number
    translations?: JsonNullableFilter<"Subregion">
    wikiDataId?: StringNullableFilter<"Subregion"> | string | null
    createdAt?: DateTimeFilter<"Subregion"> | Date | string
    updatedAt?: DateTimeFilter<"Subregion"> | Date | string
  }

  export type RegionCreateWithoutSubregionsInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryCreateNestedManyWithoutRegionRelationInput
  }

  export type RegionUncheckedCreateWithoutSubregionsInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    countries?: CountryUncheckedCreateNestedManyWithoutRegionRelationInput
  }

  export type RegionCreateOrConnectWithoutSubregionsInput = {
    where: RegionWhereUniqueInput
    create: XOR<RegionCreateWithoutSubregionsInput, RegionUncheckedCreateWithoutSubregionsInput>
  }

  export type CountryCreateWithoutSubregionRelationInput = {
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    regionRelation?: RegionCreateNestedOneWithoutCountriesInput
    states?: StateCreateNestedManyWithoutCountryInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutSubregionRelationInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutSubregionRelationInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput>
  }

  export type CountryCreateManySubregionRelationInputEnvelope = {
    data: CountryCreateManySubregionRelationInput | CountryCreateManySubregionRelationInput[]
    skipDuplicates?: boolean
  }

  export type RegionUpsertWithoutSubregionsInput = {
    update: XOR<RegionUpdateWithoutSubregionsInput, RegionUncheckedUpdateWithoutSubregionsInput>
    create: XOR<RegionCreateWithoutSubregionsInput, RegionUncheckedCreateWithoutSubregionsInput>
    where?: RegionWhereInput
  }

  export type RegionUpdateToOneWithWhereWithoutSubregionsInput = {
    where?: RegionWhereInput
    data: XOR<RegionUpdateWithoutSubregionsInput, RegionUncheckedUpdateWithoutSubregionsInput>
  }

  export type RegionUpdateWithoutSubregionsInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUpdateManyWithoutRegionRelationNestedInput
  }

  export type RegionUncheckedUpdateWithoutSubregionsInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUncheckedUpdateManyWithoutRegionRelationNestedInput
  }

  export type CountryUpsertWithWhereUniqueWithoutSubregionRelationInput = {
    where: CountryWhereUniqueInput
    update: XOR<CountryUpdateWithoutSubregionRelationInput, CountryUncheckedUpdateWithoutSubregionRelationInput>
    create: XOR<CountryCreateWithoutSubregionRelationInput, CountryUncheckedCreateWithoutSubregionRelationInput>
  }

  export type CountryUpdateWithWhereUniqueWithoutSubregionRelationInput = {
    where: CountryWhereUniqueInput
    data: XOR<CountryUpdateWithoutSubregionRelationInput, CountryUncheckedUpdateWithoutSubregionRelationInput>
  }

  export type CountryUpdateManyWithWhereWithoutSubregionRelationInput = {
    where: CountryScalarWhereInput
    data: XOR<CountryUpdateManyMutationInput, CountryUncheckedUpdateManyWithoutSubregionRelationInput>
  }

  export type RegionCreateWithoutCountriesInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    subregions?: SubregionCreateNestedManyWithoutRegionInput
  }

  export type RegionUncheckedCreateWithoutCountriesInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    subregions?: SubregionUncheckedCreateNestedManyWithoutRegionInput
  }

  export type RegionCreateOrConnectWithoutCountriesInput = {
    where: RegionWhereUniqueInput
    create: XOR<RegionCreateWithoutCountriesInput, RegionUncheckedCreateWithoutCountriesInput>
  }

  export type SubregionCreateWithoutCountriesInput = {
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    region: RegionCreateNestedOneWithoutSubregionsInput
  }

  export type SubregionUncheckedCreateWithoutCountriesInput = {
    id?: number
    name: string
    region_id: number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type SubregionCreateOrConnectWithoutCountriesInput = {
    where: SubregionWhereUniqueInput
    create: XOR<SubregionCreateWithoutCountriesInput, SubregionUncheckedCreateWithoutCountriesInput>
  }

  export type StateCreateWithoutCountryInput = {
    name: string
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    cities?: CityCreateNestedManyWithoutStateInput
  }

  export type StateUncheckedCreateWithoutCountryInput = {
    id?: number
    name: string
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    cities?: CityUncheckedCreateNestedManyWithoutStateInput
  }

  export type StateCreateOrConnectWithoutCountryInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput>
  }

  export type StateCreateManyCountryInputEnvelope = {
    data: StateCreateManyCountryInput | StateCreateManyCountryInput[]
    skipDuplicates?: boolean
  }

  export type CityCreateWithoutCountryInput = {
    name: string
    state_code: string
    state_name?: string | null
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    state: StateCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateWithoutCountryInput = {
    id?: number
    name: string
    state_id: number
    state_code: string
    state_name?: string | null
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityCreateOrConnectWithoutCountryInput = {
    where: CityWhereUniqueInput
    create: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput>
  }

  export type CityCreateManyCountryInputEnvelope = {
    data: CityCreateManyCountryInput | CityCreateManyCountryInput[]
    skipDuplicates?: boolean
  }

  export type RegionUpsertWithoutCountriesInput = {
    update: XOR<RegionUpdateWithoutCountriesInput, RegionUncheckedUpdateWithoutCountriesInput>
    create: XOR<RegionCreateWithoutCountriesInput, RegionUncheckedCreateWithoutCountriesInput>
    where?: RegionWhereInput
  }

  export type RegionUpdateToOneWithWhereWithoutCountriesInput = {
    where?: RegionWhereInput
    data: XOR<RegionUpdateWithoutCountriesInput, RegionUncheckedUpdateWithoutCountriesInput>
  }

  export type RegionUpdateWithoutCountriesInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    subregions?: SubregionUpdateManyWithoutRegionNestedInput
  }

  export type RegionUncheckedUpdateWithoutCountriesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    subregions?: SubregionUncheckedUpdateManyWithoutRegionNestedInput
  }

  export type SubregionUpsertWithoutCountriesInput = {
    update: XOR<SubregionUpdateWithoutCountriesInput, SubregionUncheckedUpdateWithoutCountriesInput>
    create: XOR<SubregionCreateWithoutCountriesInput, SubregionUncheckedCreateWithoutCountriesInput>
    where?: SubregionWhereInput
  }

  export type SubregionUpdateToOneWithWhereWithoutCountriesInput = {
    where?: SubregionWhereInput
    data: XOR<SubregionUpdateWithoutCountriesInput, SubregionUncheckedUpdateWithoutCountriesInput>
  }

  export type SubregionUpdateWithoutCountriesInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    region?: RegionUpdateOneRequiredWithoutSubregionsNestedInput
  }

  export type SubregionUncheckedUpdateWithoutCountriesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    region_id?: IntFieldUpdateOperationsInput | number
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StateUpsertWithWhereUniqueWithoutCountryInput = {
    where: StateWhereUniqueInput
    update: XOR<StateUpdateWithoutCountryInput, StateUncheckedUpdateWithoutCountryInput>
    create: XOR<StateCreateWithoutCountryInput, StateUncheckedCreateWithoutCountryInput>
  }

  export type StateUpdateWithWhereUniqueWithoutCountryInput = {
    where: StateWhereUniqueInput
    data: XOR<StateUpdateWithoutCountryInput, StateUncheckedUpdateWithoutCountryInput>
  }

  export type StateUpdateManyWithWhereWithoutCountryInput = {
    where: StateScalarWhereInput
    data: XOR<StateUpdateManyMutationInput, StateUncheckedUpdateManyWithoutCountryInput>
  }

  export type StateScalarWhereInput = {
    AND?: StateScalarWhereInput | StateScalarWhereInput[]
    OR?: StateScalarWhereInput[]
    NOT?: StateScalarWhereInput | StateScalarWhereInput[]
    id?: IntFilter<"State"> | number
    name?: StringFilter<"State"> | string
    country_id?: IntFilter<"State"> | number
    country_code?: StringFilter<"State"> | string
    country_name?: StringNullableFilter<"State"> | string | null
    iso2?: StringNullableFilter<"State"> | string | null
    iso3166_2?: StringNullableFilter<"State"> | string | null
    fips_code?: StringNullableFilter<"State"> | string | null
    type?: StringNullableFilter<"State"> | string | null
    level?: StringNullableFilter<"State"> | string | null
    parent_id?: StringNullableFilter<"State"> | string | null
    native_reserved?: StringNullableFilter<"State"> | string | null
    latitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    longitude?: DecimalNullableFilter<"State"> | Decimal | DecimalJsLike | number | string | null
    timezone?: StringNullableFilter<"State"> | string | null
    wikiDataId?: StringNullableFilter<"State"> | string | null
    state_code?: StringNullableFilter<"State"> | string | null
    createdAt?: DateTimeFilter<"State"> | Date | string
    updatedAt?: DateTimeFilter<"State"> | Date | string
  }

  export type CityUpsertWithWhereUniqueWithoutCountryInput = {
    where: CityWhereUniqueInput
    update: XOR<CityUpdateWithoutCountryInput, CityUncheckedUpdateWithoutCountryInput>
    create: XOR<CityCreateWithoutCountryInput, CityUncheckedCreateWithoutCountryInput>
  }

  export type CityUpdateWithWhereUniqueWithoutCountryInput = {
    where: CityWhereUniqueInput
    data: XOR<CityUpdateWithoutCountryInput, CityUncheckedUpdateWithoutCountryInput>
  }

  export type CityUpdateManyWithWhereWithoutCountryInput = {
    where: CityScalarWhereInput
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyWithoutCountryInput>
  }

  export type CityScalarWhereInput = {
    AND?: CityScalarWhereInput | CityScalarWhereInput[]
    OR?: CityScalarWhereInput[]
    NOT?: CityScalarWhereInput | CityScalarWhereInput[]
    id?: IntFilter<"City"> | number
    name?: StringFilter<"City"> | string
    state_id?: IntFilter<"City"> | number
    state_code?: StringFilter<"City"> | string
    state_name?: StringNullableFilter<"City"> | string | null
    country_id?: IntFilter<"City"> | number
    country_code?: StringFilter<"City"> | string
    country_name?: StringFilter<"City"> | string
    latitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFilter<"City"> | Decimal | DecimalJsLike | number | string
    timezone?: StringNullableFilter<"City"> | string | null
    wikiDataId?: StringNullableFilter<"City"> | string | null
    createdAt?: DateTimeFilter<"City"> | Date | string
    updatedAt?: DateTimeFilter<"City"> | Date | string
  }

  export type CountryCreateWithoutStatesInput = {
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    regionRelation?: RegionCreateNestedOneWithoutCountriesInput
    subregionRelation?: SubregionCreateNestedOneWithoutCountriesInput
    cities?: CityCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutStatesInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    cities?: CityUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutStatesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
  }

  export type CityCreateWithoutStateInput = {
    name: string
    state_code: string
    state_name?: string | null
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    country: CountryCreateNestedOneWithoutCitiesInput
  }

  export type CityUncheckedCreateWithoutStateInput = {
    id?: number
    name: string
    state_code: string
    state_name?: string | null
    country_id: number
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityCreateOrConnectWithoutStateInput = {
    where: CityWhereUniqueInput
    create: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput>
  }

  export type CityCreateManyStateInputEnvelope = {
    data: CityCreateManyStateInput | CityCreateManyStateInput[]
    skipDuplicates?: boolean
  }

  export type CountryUpsertWithoutStatesInput = {
    update: XOR<CountryUpdateWithoutStatesInput, CountryUncheckedUpdateWithoutStatesInput>
    create: XOR<CountryCreateWithoutStatesInput, CountryUncheckedCreateWithoutStatesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutStatesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutStatesInput, CountryUncheckedUpdateWithoutStatesInput>
  }

  export type CountryUpdateWithoutStatesInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    regionRelation?: RegionUpdateOneWithoutCountriesNestedInput
    subregionRelation?: SubregionUpdateOneWithoutCountriesNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutStatesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CityUpsertWithWhereUniqueWithoutStateInput = {
    where: CityWhereUniqueInput
    update: XOR<CityUpdateWithoutStateInput, CityUncheckedUpdateWithoutStateInput>
    create: XOR<CityCreateWithoutStateInput, CityUncheckedCreateWithoutStateInput>
  }

  export type CityUpdateWithWhereUniqueWithoutStateInput = {
    where: CityWhereUniqueInput
    data: XOR<CityUpdateWithoutStateInput, CityUncheckedUpdateWithoutStateInput>
  }

  export type CityUpdateManyWithWhereWithoutStateInput = {
    where: CityScalarWhereInput
    data: XOR<CityUpdateManyMutationInput, CityUncheckedUpdateManyWithoutStateInput>
  }

  export type StateCreateWithoutCitiesInput = {
    name: string
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    country: CountryCreateNestedOneWithoutStatesInput
  }

  export type StateUncheckedCreateWithoutCitiesInput = {
    id?: number
    name: string
    country_id: number
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type StateCreateOrConnectWithoutCitiesInput = {
    where: StateWhereUniqueInput
    create: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
  }

  export type CountryCreateWithoutCitiesInput = {
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    regionRelation?: RegionCreateNestedOneWithoutCountriesInput
    subregionRelation?: SubregionCreateNestedOneWithoutCountriesInput
    states?: StateCreateNestedManyWithoutCountryInput
  }

  export type CountryUncheckedCreateWithoutCitiesInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
    states?: StateUncheckedCreateNestedManyWithoutCountryInput
  }

  export type CountryCreateOrConnectWithoutCitiesInput = {
    where: CountryWhereUniqueInput
    create: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
  }

  export type StateUpsertWithoutCitiesInput = {
    update: XOR<StateUpdateWithoutCitiesInput, StateUncheckedUpdateWithoutCitiesInput>
    create: XOR<StateCreateWithoutCitiesInput, StateUncheckedCreateWithoutCitiesInput>
    where?: StateWhereInput
  }

  export type StateUpdateToOneWithWhereWithoutCitiesInput = {
    where?: StateWhereInput
    data: XOR<StateUpdateWithoutCitiesInput, StateUncheckedUpdateWithoutCitiesInput>
  }

  export type StateUpdateWithoutCitiesInput = {
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    country?: CountryUpdateOneRequiredWithoutStatesNestedInput
  }

  export type StateUncheckedUpdateWithoutCitiesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CountryUpsertWithoutCitiesInput = {
    update: XOR<CountryUpdateWithoutCitiesInput, CountryUncheckedUpdateWithoutCitiesInput>
    create: XOR<CountryCreateWithoutCitiesInput, CountryUncheckedCreateWithoutCitiesInput>
    where?: CountryWhereInput
  }

  export type CountryUpdateToOneWithWhereWithoutCitiesInput = {
    where?: CountryWhereInput
    data: XOR<CountryUpdateWithoutCitiesInput, CountryUncheckedUpdateWithoutCitiesInput>
  }

  export type CountryUpdateWithoutCitiesInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    regionRelation?: RegionUpdateOneWithoutCountriesNestedInput
    subregionRelation?: SubregionUpdateOneWithoutCountriesNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutCitiesInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type UserCreateManySchoolInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    branch_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchCreateManySchoolInput = {
    id?: number
    branch_country_id?: number | null
    branch_state_id?: number | null
    branch_name: string
    branch_phone: string
    branch_email?: string | null
    branch_address: string
    branch_state?: number | null
    branch_active?: number
    branch_main?: number
    prevent_users_to_login?: number
    branch_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentCreateManySchoolInput = {
    id?: number
    uuid?: string | null
    branch_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianCreateManySchoolInput = {
    id?: number
    uuid?: string | null
    branch_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserUpdateWithoutSchoolInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUpdateManyWithoutUserNestedInput
    branch?: BranchUpdateOneWithoutUsersNestedInput
  }

  export type UserUncheckedUpdateWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUncheckedUpdateManyWithoutUserNestedInput
  }

  export type UserUncheckedUpdateManyWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchUpdateWithoutSchoolInput = {
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUpdateManyWithoutBranchNestedInput
    students?: StudentUpdateManyWithoutBranchNestedInput
    users?: UserUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branchLevels?: BranchLevelUncheckedUpdateManyWithoutBranchNestedInput
    students?: StudentUncheckedUpdateManyWithoutBranchNestedInput
    users?: UserUncheckedUpdateManyWithoutBranchNestedInput
    multimedia?: MultimediaUncheckedUpdateManyWithoutBranchNestedInput
    librarybooks?: LibraryBookUncheckedUpdateManyWithoutBranchNestedInput
    guardians?: GuardianUncheckedUpdateManyWithoutBranchNestedInput
  }

  export type BranchUncheckedUpdateManyWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    branch_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    branch_name?: StringFieldUpdateOperationsInput | string
    branch_phone?: StringFieldUpdateOperationsInput | string
    branch_email?: NullableStringFieldUpdateOperationsInput | string | null
    branch_address?: StringFieldUpdateOperationsInput | string
    branch_state?: NullableIntFieldUpdateOperationsInput | number | null
    branch_active?: IntFieldUpdateOperationsInput | number
    branch_main?: IntFieldUpdateOperationsInput | number
    prevent_users_to_login?: IntFieldUpdateOperationsInput | number
    branch_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentUpdateWithoutSchoolInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutStudentsNestedInput
    StudentTracking?: StudentTrackingUpdateManyWithoutStudentNestedInput
  }

  export type StudentUncheckedUpdateWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    branch_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    StudentTracking?: StudentTrackingUncheckedUpdateManyWithoutStudentNestedInput
  }

  export type StudentUncheckedUpdateManyWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    branch_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianUpdateWithoutSchoolInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    branch?: BranchUpdateOneWithoutGuardiansNestedInput
  }

  export type GuardianUncheckedUpdateWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    branch_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianUncheckedUpdateManyWithoutSchoolInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    branch_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelCreateManyBranchInput = {
    id?: number
    level_name: string
    level_leader?: number | null
    level_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentCreateManyBranchInput = {
    id?: number
    uuid?: string | null
    school_id: number
    local_id?: number | null
    student_country_id?: number | null
    student_state_id?: number | null
    guardian_id?: number | null
    religion_id?: number | null
    first_name: string
    middle_name?: string | null
    last_name: string
    email?: string | null
    student_phone?: string | null
    student_address?: string | null
    student_sex: number
    student_bio?: string | null
    profile_photo_path?: string | null
    username?: string | null
    password?: string | null
    student_active?: number
    student_blocked_reason?: string | null
    role?: string | null
    user_type?: string | null
    use_role?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type UserCreateManyBranchInput = {
    id?: number
    uuid: string
    user_country_id?: number | null
    user_state_id?: number | null
    user_city_id?: number | null
    school_id?: number | null
    local_id?: number | null
    staff_dept: $Enums.users_staff_dept
    user_name: string
    user_phone: string
    user_sex: number
    email: string
    email_verified_at?: Date | string | null
    user_address: string
    qualification_id?: number | null
    user_proffession?: string | null
    profile_photo_path?: string | null
    date_of_birth?: Date | string | null
    breif_bio?: string | null
    facebook_handle?: string | null
    twitter_handle?: string | null
    instagram_handle?: string | null
    username?: string | null
    password: string
    remember_token?: string | null
    user_active?: number
    user_must_change_password?: number
    role?: string | null
    user_type?: string | null
    use_role?: number
    user_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type MultimediaCreateManyBranchInput = {
    id?: number
    school_id: number
    multimedia_is_image?: number
    multimedia_name: string
    multimedia_desc?: string | null
    multimedia_path: string
    multimedia_active?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type LibraryBookCreateManyBranchInput = {
    id?: number
    school_id?: number | null
    book_name: string
    book_desc: string
    book_author_name: string
    book_cover?: string | null
    book_path?: string | null
    book_type: $Enums.book_type
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type GuardianCreateManyBranchInput = {
    id?: number
    uuid?: string | null
    school_id: number
    surname: string
    first_name?: string | null
    guardian_sex: number
    is_married?: number
    marriage_disolved?: number
    is_parent?: number
    relation_how_related?: string | null
    guardian_proffession?: string | null
    phonenumber?: string | null
    email: string
    role?: string | null
    user_type?: string | null
    password?: string | null
    use_role?: number
    guardian_active?: number
    guardian_blocked_reason?: string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type BranchLevelUpdateWithoutBranchInput = {
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type BranchLevelUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    level_name?: StringFieldUpdateOperationsInput | string
    level_leader?: NullableIntFieldUpdateOperationsInput | number | null
    level_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentUpdateWithoutBranchInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneWithoutStudentsNestedInput
    StudentTracking?: StudentTrackingUpdateManyWithoutStudentNestedInput
  }

  export type StudentUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    StudentTracking?: StudentTrackingUncheckedUpdateManyWithoutStudentNestedInput
  }

  export type StudentUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    student_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    guardian_id?: NullableIntFieldUpdateOperationsInput | number | null
    religion_id?: NullableIntFieldUpdateOperationsInput | number | null
    first_name?: StringFieldUpdateOperationsInput | string
    middle_name?: NullableStringFieldUpdateOperationsInput | string | null
    last_name?: StringFieldUpdateOperationsInput | string
    email?: NullableStringFieldUpdateOperationsInput | string | null
    student_phone?: NullableStringFieldUpdateOperationsInput | string | null
    student_address?: NullableStringFieldUpdateOperationsInput | string | null
    student_sex?: IntFieldUpdateOperationsInput | number
    student_bio?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    student_active?: IntFieldUpdateOperationsInput | number
    student_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserUpdateWithoutBranchInput = {
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUpdateManyWithoutUserNestedInput
    school?: SchoolUpdateOneWithoutUsersNestedInput
  }

  export type UserUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    CrudUserPermission?: UserCrudPermissionUncheckedUpdateManyWithoutUserNestedInput
    PermissionUser?: UserPermissionUncheckedUpdateManyWithoutUserNestedInput
  }

  export type UserUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: StringFieldUpdateOperationsInput | string
    user_country_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_state_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_city_id?: NullableIntFieldUpdateOperationsInput | number | null
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    local_id?: NullableIntFieldUpdateOperationsInput | number | null
    staff_dept?: Enumusers_staff_deptFieldUpdateOperationsInput | $Enums.users_staff_dept
    user_name?: StringFieldUpdateOperationsInput | string
    user_phone?: StringFieldUpdateOperationsInput | string
    user_sex?: IntFieldUpdateOperationsInput | number
    email?: StringFieldUpdateOperationsInput | string
    email_verified_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    user_address?: StringFieldUpdateOperationsInput | string
    qualification_id?: NullableIntFieldUpdateOperationsInput | number | null
    user_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    profile_photo_path?: NullableStringFieldUpdateOperationsInput | string | null
    date_of_birth?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    breif_bio?: NullableStringFieldUpdateOperationsInput | string | null
    facebook_handle?: NullableStringFieldUpdateOperationsInput | string | null
    twitter_handle?: NullableStringFieldUpdateOperationsInput | string | null
    instagram_handle?: NullableStringFieldUpdateOperationsInput | string | null
    username?: NullableStringFieldUpdateOperationsInput | string | null
    password?: StringFieldUpdateOperationsInput | string
    remember_token?: NullableStringFieldUpdateOperationsInput | string | null
    user_active?: IntFieldUpdateOperationsInput | number
    user_must_change_password?: IntFieldUpdateOperationsInput | number
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    user_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaUpdateWithoutBranchInput = {
    school_id?: IntFieldUpdateOperationsInput | number
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type MultimediaUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: IntFieldUpdateOperationsInput | number
    multimedia_is_image?: IntFieldUpdateOperationsInput | number
    multimedia_name?: StringFieldUpdateOperationsInput | string
    multimedia_desc?: NullableStringFieldUpdateOperationsInput | string | null
    multimedia_path?: StringFieldUpdateOperationsInput | string
    multimedia_active?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookUpdateWithoutBranchInput = {
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type LibraryBookUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    school_id?: NullableIntFieldUpdateOperationsInput | number | null
    book_name?: StringFieldUpdateOperationsInput | string
    book_desc?: StringFieldUpdateOperationsInput | string
    book_author_name?: StringFieldUpdateOperationsInput | string
    book_cover?: NullableStringFieldUpdateOperationsInput | string | null
    book_path?: NullableStringFieldUpdateOperationsInput | string | null
    book_type?: Enumbook_typeFieldUpdateOperationsInput | $Enums.book_type
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianUpdateWithoutBranchInput = {
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    school?: SchoolUpdateOneWithoutGuardiansNestedInput
  }

  export type GuardianUncheckedUpdateWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type GuardianUncheckedUpdateManyWithoutBranchInput = {
    id?: IntFieldUpdateOperationsInput | number
    uuid?: NullableStringFieldUpdateOperationsInput | string | null
    school_id?: IntFieldUpdateOperationsInput | number
    surname?: StringFieldUpdateOperationsInput | string
    first_name?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_sex?: IntFieldUpdateOperationsInput | number
    is_married?: IntFieldUpdateOperationsInput | number
    marriage_disolved?: IntFieldUpdateOperationsInput | number
    is_parent?: IntFieldUpdateOperationsInput | number
    relation_how_related?: NullableStringFieldUpdateOperationsInput | string | null
    guardian_proffession?: NullableStringFieldUpdateOperationsInput | string | null
    phonenumber?: NullableStringFieldUpdateOperationsInput | string | null
    email?: StringFieldUpdateOperationsInput | string
    role?: NullableStringFieldUpdateOperationsInput | string | null
    user_type?: NullableStringFieldUpdateOperationsInput | string | null
    password?: NullableStringFieldUpdateOperationsInput | string | null
    use_role?: IntFieldUpdateOperationsInput | number
    guardian_active?: IntFieldUpdateOperationsInput | number
    guardian_blocked_reason?: NullableStringFieldUpdateOperationsInput | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassCreateManyClassdetailsInput = {
    id?: number
    session_term_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCreateManyClassInput = {
    id?: number
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassUpdateWithoutClassdetailsInput = {
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    sessionterm?: SessionTermUpdateOneWithoutSessionclassNestedInput
  }

  export type SessionClassUncheckedUpdateWithoutClassdetailsInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_term_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassUncheckedUpdateManyWithoutClassdetailsInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_term_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamUpdateWithoutClassInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    term?: TermUpdateOneWithoutExamsNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutClassInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateManyWithoutClassInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectCreateManySubjectInput = {
    id?: number
    session_class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ClassSubjectTemplateCreateManySubjectInput = {
    id?: number
    class_id: number
    specialization_id: number
    is_compulsory?: number
    include_in_result?: number
    include_in_calculation?: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCreateManySubjectInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassSubjectUpdateWithoutSubjectInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectUncheckedUpdateWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassSubjectUncheckedUpdateManyWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateUpdateWithoutSubjectInput = {
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateUncheckedUpdateWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ClassSubjectTemplateUncheckedUpdateManyWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: IntFieldUpdateOperationsInput | number
    is_compulsory?: IntFieldUpdateOperationsInput | number
    include_in_result?: IntFieldUpdateOperationsInput | number
    include_in_calculation?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamUpdateWithoutSubjectInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    term?: TermUpdateOneWithoutExamsNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateManyWithoutSubjectInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionTermCreateManySessionInput = {
    id?: number
    term_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionTermUpdateWithoutSessionInput = {
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    term?: TermUpdateOneWithoutSessionTermNestedInput
    sessionclass?: SessionClassUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermUncheckedUpdateWithoutSessionInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    sessionclass?: SessionClassUncheckedUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermUncheckedUpdateManyWithoutSessionInput = {
    id?: IntFieldUpdateOperationsInput | number
    term_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassCreateManySessiontermInput = {
    id?: number
    class_id: number
    session_class_name: string
    no_of_group: number
    has_multiple_teacher?: number
    has_specialization?: number
    has_optionals_subject?: number
    main_treachear?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionClassUpdateWithoutSessiontermInput = {
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    classdetails?: ClassTemplateUpdateOneWithoutSessionClassNestedInput
  }

  export type SessionClassUncheckedUpdateWithoutSessiontermInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type SessionClassUncheckedUpdateManyWithoutSessiontermInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: IntFieldUpdateOperationsInput | number
    session_class_name?: StringFieldUpdateOperationsInput | string
    no_of_group?: IntFieldUpdateOperationsInput | number
    has_multiple_teacher?: IntFieldUpdateOperationsInput | number
    has_specialization?: IntFieldUpdateOperationsInput | number
    has_optionals_subject?: IntFieldUpdateOperationsInput | number
    main_treachear?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type UserCrudPermissionCreateManyUserInput = {
    id?: number
    user_type: string
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserPermissionCreateManyUserInput = {
    id?: number
    user_id: number
    permission_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionUpdateWithoutUserInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutUserCrudPermissionNestedInput
  }

  export type UserCrudPermissionUncheckedUpdateWithoutUserInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionUncheckedUpdateManyWithoutUserInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionUpdateWithoutUserInput = {
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutUserPermissionNestedInput
  }

  export type UserPermissionUncheckedUpdateWithoutUserInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionUncheckedUpdateManyWithoutUserInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type StudentTrackingCreateManyStudentInput = {
    id?: number
    session_class_id: number
    specialization_id?: number | null
    group_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type StudentTrackingUpdateWithoutStudentInput = {
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTrackingUncheckedUpdateWithoutStudentInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type StudentTrackingUncheckedUpdateManyWithoutStudentInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_class_id?: IntFieldUpdateOperationsInput | number
    specialization_id?: NullableIntFieldUpdateOperationsInput | number | null
    group_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type RoleCrudPermissionCreateManyPermissionInput = {
    id?: number
    role_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserCrudPermissionCreateManyPermissionInput = {
    id?: number
    user_id: number
    user_type: string
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RolePermissionCreateManyPermissionInput = {
    id?: number
    role_id: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type UserPermissionCreateManyPermissionInput = {
    id?: number
    user_id: number
    user_type: string
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
    userId?: number | null
  }

  export type RoleCrudPermissionUpdateWithoutPermissionInput = {
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    role?: RoleUpdateOneRequiredWithoutRoleCrudPermissionNestedInput
  }

  export type RoleCrudPermissionUncheckedUpdateWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionUncheckedUpdateManyWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionUpdateWithoutPermissionInput = {
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    User?: UserUpdateOneWithoutCrudUserPermissionNestedInput
  }

  export type UserCrudPermissionUncheckedUpdateWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserCrudPermissionUncheckedUpdateManyWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionUpdateWithoutPermissionInput = {
    role_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionUncheckedUpdateWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RolePermissionUncheckedUpdateManyWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    role_id?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionUpdateWithoutPermissionInput = {
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    User?: UserUpdateOneWithoutPermissionUserNestedInput
  }

  export type UserPermissionUncheckedUpdateWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    userId?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type UserPermissionUncheckedUpdateManyWithoutPermissionInput = {
    id?: IntFieldUpdateOperationsInput | number
    user_id?: IntFieldUpdateOperationsInput | number
    user_type?: StringFieldUpdateOperationsInput | string
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    userId?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionCreateManyRoleInput = {
    id?: number
    permission_id: number
    permission_menu?: number
    permission_create?: number
    permission_read?: number
    permission_update?: number
    permission_delete?: number
    created_at?: Date | string
    created_by?: number | null
    updated_at?: Date | string | null
    updated_by?: number | null
    deleted_at?: Date | string | null
    deleted_by?: number | null
  }

  export type RoleCrudPermissionUpdateWithoutRoleInput = {
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
    permission?: PermissionUpdateOneRequiredWithoutRoleCrudPermissionNestedInput
  }

  export type RoleCrudPermissionUncheckedUpdateWithoutRoleInput = {
    id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type RoleCrudPermissionUncheckedUpdateManyWithoutRoleInput = {
    id?: IntFieldUpdateOperationsInput | number
    permission_id?: IntFieldUpdateOperationsInput | number
    permission_menu?: IntFieldUpdateOperationsInput | number
    permission_create?: IntFieldUpdateOperationsInput | number
    permission_read?: IntFieldUpdateOperationsInput | number
    permission_update?: IntFieldUpdateOperationsInput | number
    permission_delete?: IntFieldUpdateOperationsInput | number
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    updated_by?: NullableIntFieldUpdateOperationsInput | number | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_by?: NullableIntFieldUpdateOperationsInput | number | null
  }

  export type SessionTermCreateManyTermInput = {
    id?: number
    session_id: number
    session_term_name: string
    session_term_visible?: number
    session_term_locked?: number
    session_term_current?: number
    session_term_clone_details?: number | null
    session_term_clone_details_from?: number | null
    session_term_clone_details_from_id?: number | null
    session_term_clone_classinstances?: number | null
    session_terms_clone_subjects?: number | null
    session_terms_clone_scoresetup?: number | null
    session_term_start?: Date | string | null
    session_term_end?: Date | string | null
    session_term_next_begin?: Date | string | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamCreateManyTermInput = {
    id?: number
    class_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type SessionTermUpdateWithoutTermInput = {
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session?: BranchSessionUpdateOneWithoutSessionTermNestedInput
    sessionclass?: SessionClassUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermUncheckedUpdateWithoutTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    sessionclass?: SessionClassUncheckedUpdateManyWithoutSessiontermNestedInput
  }

  export type SessionTermUncheckedUpdateManyWithoutTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    session_id?: IntFieldUpdateOperationsInput | number
    session_term_name?: StringFieldUpdateOperationsInput | string
    session_term_visible?: IntFieldUpdateOperationsInput | number
    session_term_locked?: IntFieldUpdateOperationsInput | number
    session_term_current?: IntFieldUpdateOperationsInput | number
    session_term_clone_details?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_details_from_id?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_clone_classinstances?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_subjects?: NullableIntFieldUpdateOperationsInput | number | null
    session_terms_clone_scoresetup?: NullableIntFieldUpdateOperationsInput | number | null
    session_term_start?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_end?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    session_term_next_begin?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamUpdateWithoutTermInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateManyWithoutTermInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkCreateManyScoresetupInput = {
    id?: number
    exam_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkUpdateWithoutScoresetupInput = {
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam?: ExamUpdateOneRequiredWithoutExamscoresetuplinkNestedInput
  }

  export type ExamScoreSetupLinkUncheckedUpdateWithoutScoresetupInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkUncheckedUpdateManyWithoutScoresetupInput = {
    id?: IntFieldUpdateOperationsInput | number
    exam_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCreateManyExamtypeInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_category: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamUpdateWithoutExamtypeInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    term?: TermUpdateOneWithoutExamsNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examcategory?: ExamCategoryUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutExamtypeInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateManyWithoutExamtypeInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_category?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamCreateManyExamcategoryInput = {
    id?: number
    class_id?: number | null
    term_id?: number | null
    subject_id: number
    desc?: string | null
    exam_date?: Date | string | null
    exam_type: number
    exam_visibility?: number | null
    max_time_allowed: number
    no_of_life?: number | null
    exam_objective_max_score?: number | null
    exam_theory_max_score?: number | null
    objective_max_no_of_question?: number | null
    theory_max_no_of_question?: number | null
    exam_enabled?: number
    allow_assessment_only_at_specified_time?: number | null
    allow_submit_after_time_elapsed?: number
    is_practise_exam?: number
    exam_gift_id?: number | null
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamUpdateWithoutExamcategoryInput = {
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUpdateManyWithoutExamNestedInput
    term?: TermUpdateOneWithoutExamsNestedInput
    class?: ClassTemplateUpdateOneWithoutExamNestedInput
    subject?: SchoolSubjectUpdateOneWithoutExamNestedInput
    examtype?: ExamTypeUpdateOneWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateWithoutExamcategoryInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    examscoresetuplink?: ExamScoreSetupLinkUncheckedUpdateManyWithoutExamNestedInput
  }

  export type ExamUncheckedUpdateManyWithoutExamcategoryInput = {
    id?: IntFieldUpdateOperationsInput | number
    class_id?: NullableIntFieldUpdateOperationsInput | number | null
    term_id?: NullableIntFieldUpdateOperationsInput | number | null
    subject_id?: IntFieldUpdateOperationsInput | number
    desc?: NullableStringFieldUpdateOperationsInput | string | null
    exam_date?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    exam_type?: IntFieldUpdateOperationsInput | number
    exam_visibility?: NullableIntFieldUpdateOperationsInput | number | null
    max_time_allowed?: IntFieldUpdateOperationsInput | number
    no_of_life?: NullableIntFieldUpdateOperationsInput | number | null
    exam_objective_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    exam_theory_max_score?: NullableIntFieldUpdateOperationsInput | number | null
    objective_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    theory_max_no_of_question?: NullableIntFieldUpdateOperationsInput | number | null
    exam_enabled?: IntFieldUpdateOperationsInput | number
    allow_assessment_only_at_specified_time?: NullableIntFieldUpdateOperationsInput | number | null
    allow_submit_after_time_elapsed?: IntFieldUpdateOperationsInput | number
    is_practise_exam?: IntFieldUpdateOperationsInput | number
    exam_gift_id?: NullableIntFieldUpdateOperationsInput | number | null
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkCreateManyExamInput = {
    id?: number
    score_setup_id: number
    created_by?: number | null
    created_at?: Date | string
    updated_at?: Date | string | null
    deleted_at?: Date | string | null
  }

  export type ExamScoreSetupLinkUpdateWithoutExamInput = {
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    scoresetup?: SessionClassScoreSetupUpdateOneRequiredWithoutExamscoresetuplinkNestedInput
  }

  export type ExamScoreSetupLinkUncheckedUpdateWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type ExamScoreSetupLinkUncheckedUpdateManyWithoutExamInput = {
    id?: IntFieldUpdateOperationsInput | number
    score_setup_id?: IntFieldUpdateOperationsInput | number
    created_by?: NullableIntFieldUpdateOperationsInput | number | null
    created_at?: DateTimeFieldUpdateOperationsInput | Date | string
    updated_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
    deleted_at?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null
  }

  export type CountryCreateManyRegionRelationInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    subregion?: string | null
    subregion_id?: number | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type SubregionCreateManyRegionInput = {
    id?: number
    name: string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CountryUpdateWithoutRegionRelationInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    subregionRelation?: SubregionUpdateOneWithoutCountriesNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutRegionRelationInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateManyWithoutRegionRelationInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    subregion_id?: NullableIntFieldUpdateOperationsInput | number | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type SubregionUpdateWithoutRegionInput = {
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUpdateManyWithoutSubregionRelationNestedInput
  }

  export type SubregionUncheckedUpdateWithoutRegionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    countries?: CountryUncheckedUpdateManyWithoutSubregionRelationNestedInput
  }

  export type SubregionUncheckedUpdateManyWithoutRegionInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    translations?: NullableJsonNullValueInput | InputJsonValue
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CountryCreateManySubregionRelationInput = {
    id?: number
    name: string
    iso3?: string | null
    iso2?: string | null
    numeric_code?: string | null
    phonecode?: string | null
    capital?: string | null
    currency?: string | null
    currency_name?: string | null
    currency_symbol?: string | null
    tld?: string | null
    native_reserved?: string | null
    population?: number | null
    gdp?: number | null
    region?: string | null
    region_id?: number | null
    subregion?: string | null
    nationality?: string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    emoji?: string | null
    emojiU?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CountryUpdateWithoutSubregionRelationInput = {
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    regionRelation?: RegionUpdateOneWithoutCountriesNestedInput
    states?: StateUpdateManyWithoutCountryNestedInput
    cities?: CityUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateWithoutSubregionRelationInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    states?: StateUncheckedUpdateManyWithoutCountryNestedInput
    cities?: CityUncheckedUpdateManyWithoutCountryNestedInput
  }

  export type CountryUncheckedUpdateManyWithoutSubregionRelationInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    iso3?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    numeric_code?: NullableStringFieldUpdateOperationsInput | string | null
    phonecode?: NullableStringFieldUpdateOperationsInput | string | null
    capital?: NullableStringFieldUpdateOperationsInput | string | null
    currency?: NullableStringFieldUpdateOperationsInput | string | null
    currency_name?: NullableStringFieldUpdateOperationsInput | string | null
    currency_symbol?: NullableStringFieldUpdateOperationsInput | string | null
    tld?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    population?: NullableIntFieldUpdateOperationsInput | number | null
    gdp?: NullableIntFieldUpdateOperationsInput | number | null
    region?: NullableStringFieldUpdateOperationsInput | string | null
    region_id?: NullableIntFieldUpdateOperationsInput | number | null
    subregion?: NullableStringFieldUpdateOperationsInput | string | null
    nationality?: NullableStringFieldUpdateOperationsInput | string | null
    timezones?: NullableJsonNullValueInput | InputJsonValue
    translations?: NullableJsonNullValueInput | InputJsonValue
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    emoji?: NullableStringFieldUpdateOperationsInput | string | null
    emojiU?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type StateCreateManyCountryInput = {
    id?: number
    name: string
    country_code: string
    country_name?: string | null
    iso2?: string | null
    iso3166_2?: string | null
    fips_code?: string | null
    type?: string | null
    level?: string | null
    parent_id?: string | null
    native_reserved?: string | null
    latitude?: Decimal | DecimalJsLike | number | string | null
    longitude?: Decimal | DecimalJsLike | number | string | null
    timezone?: string | null
    wikiDataId?: string | null
    state_code?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityCreateManyCountryInput = {
    id?: number
    name: string
    state_id: number
    state_code: string
    state_name?: string | null
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type StateUpdateWithoutCountryInput = {
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    cities?: CityUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    cities?: CityUncheckedUpdateManyWithoutStateNestedInput
  }

  export type StateUncheckedUpdateManyWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: NullableStringFieldUpdateOperationsInput | string | null
    iso2?: NullableStringFieldUpdateOperationsInput | string | null
    iso3166_2?: NullableStringFieldUpdateOperationsInput | string | null
    fips_code?: NullableStringFieldUpdateOperationsInput | string | null
    type?: NullableStringFieldUpdateOperationsInput | string | null
    level?: NullableStringFieldUpdateOperationsInput | string | null
    parent_id?: NullableStringFieldUpdateOperationsInput | string | null
    native_reserved?: NullableStringFieldUpdateOperationsInput | string | null
    latitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    longitude?: NullableDecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string | null
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    state_code?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityUpdateWithoutCountryInput = {
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    state?: StateUpdateOneRequiredWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_id?: IntFieldUpdateOperationsInput | number
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityUncheckedUpdateManyWithoutCountryInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_id?: IntFieldUpdateOperationsInput | number
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityCreateManyStateInput = {
    id?: number
    name: string
    state_code: string
    state_name?: string | null
    country_id: number
    country_code: string
    country_name: string
    latitude: Decimal | DecimalJsLike | number | string
    longitude: Decimal | DecimalJsLike | number | string
    timezone?: string | null
    wikiDataId?: string | null
    createdAt?: Date | string
    updatedAt?: Date | string
  }

  export type CityUpdateWithoutStateInput = {
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
    country?: CountryUpdateOneRequiredWithoutCitiesNestedInput
  }

  export type CityUncheckedUpdateWithoutStateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }

  export type CityUncheckedUpdateManyWithoutStateInput = {
    id?: IntFieldUpdateOperationsInput | number
    name?: StringFieldUpdateOperationsInput | string
    state_code?: StringFieldUpdateOperationsInput | string
    state_name?: NullableStringFieldUpdateOperationsInput | string | null
    country_id?: IntFieldUpdateOperationsInput | number
    country_code?: StringFieldUpdateOperationsInput | string
    country_name?: StringFieldUpdateOperationsInput | string
    latitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    longitude?: DecimalFieldUpdateOperationsInput | Decimal | DecimalJsLike | number | string
    timezone?: NullableStringFieldUpdateOperationsInput | string | null
    wikiDataId?: NullableStringFieldUpdateOperationsInput | string | null
    createdAt?: DateTimeFieldUpdateOperationsInput | Date | string
    updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string
  }



  /**
   * Batch Payload for updateMany & deleteMany & createMany
   */

  export type BatchPayload = {
    count: number
  }

  /**
   * DMMF
   */
  export const dmmf: runtime.BaseDMMF
}