// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init generator client { provider = "prisma-client-js" previewFeatures = ["postgresqlExtensions"] } generator kysely { provider = "prisma-kysely" previewFeatures = ["postgresqlExtensions"] output = "../src/core/database" fileName = "types.ts" } datasource db { provider = "postgresql" url = env("DATABASE_URL") extensions = [pgcrypto] } model TourSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? check String? createTime String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' lastUpdate String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' empfangenVonId String? endgen String? // yyyy-MM-dd serienId String? serienKategorName String? serienKategorie String? zadStatus String? abrDate String? // yyyy-MM-dd abrNum String? abrTime String? // HH:mm ausrueckZeit String? // HH:mm 'Europe/Berlin' startTime String? // HH:mm 'Europe/Berlin' (is after ausrueckZeit) startDate String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' date String? // yyyy-MM-dd date_iso String? // ISO 8601 String dauergenehmigung String? direction String? distanceValue String? // meters (probably int) besetztKm String? // kilometers (float) gefahren String? // Boolean as number gesamtPreis String? // float infektion String? // Boolean as number itDesc String? itKrz String? itName String? kkId String? krankenkasse String? stammVersNr String? patId String? patName String? patSurname String? patStreet String? patZip String? patCity String? startInstitution String? startStreet String? startZip String? startCity String? targetInstitution String? targetStreet String? targetZip String? targetCity String? transportKrz String? transportName String? transportart String? // ID verordnungsId String? verordnungsName String? type String? startBegin String? // HH:mm 'Europe/Berlin' startEnd String? // HH:mm 'Europe/Berlin' frei String? // HH:mm 'Europe/Berlin' ziel String? // HH:mm 'Europe/Berlin' zielBegin String? // HH:mm 'Europe/Berlin' endTime String? // HH:mm 'Europe/Berlin' endDate String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' einsatzNummer String? carName String? carNo String? // ID beifahrerName String? beifahrer String? // ID fahrerName String? fahrer String? // ID color String? // Hex rgb overRTW String? companyName String? schwerlast String? } model EmployeeDispoLiveSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? pScheinAblaufDatum String? // yyyy-MM-dd name String? surname String? persId String? importPersId String? // Personal ID aus Dyflexis qualifikation String? // ID } model AttendanceRegistrationSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String attendanceRegistrationId String? employeeId String? personnelNumber String? dateTime String? // ISO 8601 String with timezone event String? } model PlannedTimeSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? user_id String? firstname String? surname String? department_id String? department_name String? start_date String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' end_date String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' pauze String? duration String? deleted String? mark String? } model WorkTimeSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? user_id String? firstname String? surname String? department_id String? department_name String? start_date String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' end_date String? // yyyy-MM-dd HH:mm:ss 'Europe/Berlin' pauze String? duration String? } model EmployeeDyflexisSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? firstname String? surname String? contract_id String? contract_start String? // yyyy-MM-dd contract_end String? // yyyy-MM-dd contract_hours_week String? // Float string contract_salary_hour String? // Float string contract_type_name String? } model PatientSource { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid insertedAt DateTime @default(now()) jobId String id String? surname String? name String? street String? zip String? city String? birthday String? kkId String? krankenkasse String? stammVersNr String? pflegestufe String? behinderung1 String? behinderung2 String? } model TourStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id String? done Boolean? direction String? carName String? operationId String? driverId String? driverName String? codriverId String? codriverName String? patientId String? patientName String? patientSurname String? patientStreet String? patientZip String? patientCity String? healthInsurance String? healthInsuranceNumber String? insuranceNo String? type String? category String? transportType String? ordinanceType String? rangeEndDate DateTime? startInstitution String? startStreet String? startZip String? startCity String? targetInstitution String? targetStreet String? targetZip String? targetCity String? startDate DateTime? check Int @default(0) occupiedKm Float? totalKm Float? startBegin String? startEnd String? target String? targetBegin String? empty String? hasInfection Boolean @default(false) infectionName String? revenueDispoLive Float? billDate DateTime? billNumber String? revenue Float @default(0) revenueDeviation Float @default(0) consumptionCosts Float @default(0) overRTW Boolean @default(false) companyName String? schwerlast Boolean @default(false) createdAt DateTime? updatedAt DateTime? } model PatientStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id String? surname String? name String? street String? zip String? city String? birthday DateTime? healthinsuranceId String? healthinsurance String? insuranceNo String? careDegree String? disabilityMark1 String? disabilityMark2 String? } model AttendanceRegistrationStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid attendanceRegistrationId Int employeeId Int dateTime DateTime event String personnelNumber String? @default("") } model PlannedTimeStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id Int employeeId Int firstname String? surname String? departmentName String? startDate DateTime endDate DateTime deleted Boolean mark String? pause Int duration Int } model WorkTimeStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id Int employeeId Int firstname String surname String departmentName String? startDate DateTime endDate DateTime pause Int duration Int } model EmployeeDyflexisStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id Int firstname String surname String contractStart DateTime contractEnd DateTime contractHoursWeek Float contractSalaryHour Float contractTypeName String? } model EmployeeDispoLiveStaging { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id String name String? surname String? personnelNumber String? // Personal ID aus Dyflexis qualification String? // ID personTransportCertificate DateTime? // yyyy-MM-dd } model Tour { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid done Boolean direction String carName String? operationId String @unique driverId String? driverName String? codriverId String? codriverName String? patientId String? patientName String? patientSurname String? patientStreet String? patientZip String? patientCity String? healthInsurance String? healthInsuranceNumber String? insuranceNo String? type String? category String? transportType String? ordinanceType String? rangeEndDate DateTime? startInstitution String? startStreet String? startZip String? startCity String? targetInstitution String? targetStreet String? targetZip String? targetCity String? startDate DateTime check Int @default(0) occupiedKm Float? totalKm Float? startBegin String? startEnd String? target String? targetBegin String? empty String? hasInfection Boolean @default(false) infectionName String? revenueDispoLive Float? billDate DateTime? billNumber String? revenue Float @default(0) consumptionCosts Float @default(0) revenueDeviation Float @default(0) overRTW Boolean @default(false) companyName String? schwerlast Boolean @default(false) createdAt DateTime? updatedAt DateTime? deletedAt DateTime? optimizationInMinutes Int @default(0) Ticket Ticket? @relation(fields: [ticketId], references: [id]) ticketId String? @db.Uuid } model TourFile { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid tourId String ticketId String storagePath String originalFilename String mimeType String fileSizeBytes Int dlUploadStatus String @default("pending") createdAt DateTime? @default(now()) @@unique([tourId, ticketId]) } model Patient { id String @id surname String? name String? street String? zip String? city String? birthday DateTime? healthinsuranceId String? healthinsurance String? insuranceNo String? careDegree String? disabilityMark1 String? disabilityMark2 String? } enum TicketState { CREATED APPROVAL_REQUIRED READY DONE BILLABLE ARCHIVED } enum TicketValidationState { CREATED USER_INTERACTION_REQUIRED TD_UNCERTAIN DOCUMENTS_MISSING ARCHIVED } enum ApprovalState { UNKNOWN FREE REQUIRED REQUESTED APPROVED } model Ticket { id String @id @db.Uuid patientId String? @db.Uuid stage String? @default("DRAFT") approvalRequirement String? @default("UNKNOWN") approvalStatus String? @default("NOT_STARTED") approvalRequestedAt DateTime? approvalLastInteractionAt DateTime? approvalReminderCount Int? @default(0) approvalRecipient String? approvalPreInquiryMessageId String? approvalFullRequestMessageId String? approvalIsOverriden Boolean @default(false) hasPhysicalTransportDocument Boolean @default(false) hasDigitalTransportDocument Boolean @default(false) lastStageBeforeClosed String? updatedAt DateTime? @updatedAt createdAt DateTime @default(now()) tours Tour[] state TicketStateHistory[] currentState TicketValidationState? notes String[] errors String[] isUrgent Boolean @default(false) urgency DateTime @default("2099-12-31T23:59:59.999Z") approvalState ApprovalState? documentInfo Json? @default("{\"approval\": {\"isNeeded\": null, \"whoRequested\": \"\",\"answeredFrom\": \"\"},\"tdLocation\": \"\"}") } model TicketStateHistory { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid state TicketValidationState createdAt DateTime @default(now()) Ticket Ticket @relation(fields: [ticketId], references: [id]) ticketId String @db.Uuid } model AttendanceRegistration { attendanceRegistrationId Int @id employeeId Int personnelNumber String? dateTime DateTime event String } model WorkTime { id String @id userId String firstname String surname String startDate DateTime? endDate DateTime? department String? pause Int duration Int } model PlannedTime { id String @id userId String firstname String? surname String? startDate DateTime? endDate DateTime? department String? pause Int duration Int note String? } model Employee { id String @id name String surname String personnelNumber String? mobile String? qualification String? occuptationalHealthExamination DateTime? personTransportCertificate DateTime? } model DyflexisEmployee { internalId String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid id Int firstname String surname String contractStart DateTime contractEnd DateTime? contractDaysWeek Int @default(0) contractHoursWeek Float contractSalaryHour Float contractTypeName String? } model Sickdays { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid start DateTime end DateTime hours Float days Int note String? locked Boolean employeeId Int } model Holiday { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid date DateTime locked Boolean excludedFromPayroll Boolean employeeId Int } enum CostTypeVariant { NACHTZUSCHLAG WOCHENENDZUSCHLAG FEIERTAGSZUSCHLAG DESINFEKTIONSZUSCHLAG KILOMETERZUSCHLAG FAHRZEUGZUSCHLAG TSWDIFFERENZIERUNG GRUNDPREIS GRUNDPREIS_ZEIT PRIVATVERSICHERUNG TRAGEHILFE } model AvicennaTenant { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid healthInsuranceNumber String name String tariffGroups TariffGroup[] } model TariffGroup { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid description String ordinanceType String tenants AvicennaTenant[] tariffs Tariff[] } model Tariff { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid validFrom DateTime? validTo DateTime? costTypes CostType[] tariffGroup TariffGroup? @relation(fields: [tariffGroupId], references: [id]) tariffGroupId String? @db.Uuid } model CostType { id String @unique @default(dbgenerated("gen_random_uuid()")) @db.Uuid description String variant CostTypeVariant costAmount Int timeRange String? kmInclusive Int? excludeCarNames String[] infectionType String? tariff Tariff? @relation(fields: [tariffId], references: [id]) tariffId String? @db.Uuid } model Trace { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid type String entityKey String createdAt DateTime @default(now()) } model Anomaly { id String @id type String description String groupKey String groupDescription String associatedEntities Json? @default("{}") workedOnBy String sleepTimer Int sleepSince DateTime? solution SolutionTarget[] @relation() resolvedAt DateTime? manuallyResolved Boolean @default(false) createdAt DateTime @default(now()) } model SolutionTarget { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid name String steps SolutionTargetStep[] @relation() anomaly Anomaly? @relation(fields: [anomalyId], references: [id]) anomalyId String? } model SolutionTargetStep { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid description String solutionTarget SolutionTarget? @relation(fields: [solutionTargetId], references: [id]) solutionTargetId String? @db.Uuid }