datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-client-js" } enum EquipmentStatus { Active Repair Reserve WriteOff } enum RepairOrderStatus { Draft Approved InWork Done Cancelled } enum RepairKind { TO TR TRE KR AR MP } enum laborOperation { Manual MachineManual Machine } enum EnumPeriodicityTO { Ежедневное Еженедельное Ежемесячное Полугодовое Годовое } enum Role { Исполнитель Подписант Пользователь } enum CategoryPart { Расходник Запчасть Инструмент Спецодежда } enum EquipmentType { Производственное Энергетическое Насосное Компрессорное } model Equipment { id String @id @default(uuid()) name String serialNumber String inventoryNumber String @unique equipmentType EquipmentType dateOfInspection DateTime? @db.Date periodicityTO EnumPeriodicityTO location String? status EquipmentStatus commissionedAt DateTime? @db.Date totalEngineHours Decimal? engineHoursSinceLastRepair Decimal? lastRepairAt DateTime? @db.Date notes String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relations repairOrders RepairOrder[] changeEquipmentStatuses ChangeEquipmentStatus[] consumptionRegistrations ConsumptionRegistration[] } model Employee { code String @id fullName String role Role position String price Float? phoneNumber Float? // Self-referential relation for boss/subordinates bossId String? boss Employee? @relation("EmployeeHierarchy", fields: [bossId], references: [code]) subordinates Employee[] @relation("EmployeeHierarchy") // Relations categoryResources CategoryResource[] confirmationDocuments ConfirmationDocument[] } model Part { id String @id @default(uuid()) name String categories CategoryPart? price Float? description String? serialNumber String? // Relations categoryResources CategoryResource[] } model CategoryResource { id String @id @default(uuid()) // Relations to Part and Employee (mutually exclusive) partId String? part Part? @relation(fields: [partId], references: [id]) employeeCode String? employee Employee? @relation(fields: [employeeCode], references: [code]) } model RepairOrder { id String @id @default(uuid()) number String @unique date DateTime @unique @db.Date equipmentId String equipment Equipment @relation(fields: [equipmentId], references: [id]) repairKind RepairKind status RepairOrderStatus @default(Draft) plannedAt DateTime @db.Date startedAt DateTime? @db.Date completedAt DateTime? @db.Date contractor String? engineHoursAtRepair Decimal? description String? notes String? confirmed Boolean? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relations confirmationDocuments ConfirmationDocument[] } model ChangeEquipmentStatus { id String @id @default(uuid()) equipmentId String equipment Equipment @relation(fields: [equipmentId], references: [id]) newStatus EquipmentStatus number String? comment String? date DateTime @db.Date responsible String? document String? // File path or reference createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ConfirmationDocument { id String @id @default(uuid()) number String? date DateTime @db.Date managerCode String? manager Employee? @relation(fields: [managerCode], references: [code]) orderId String order RepairOrder @relation(fields: [orderId], references: [id]) confirmed Boolean? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ConsumptionRegistration { id String @id @default(uuid()) number String? date DateTime @db.Date equipmentId String equipment Equipment @relation(fields: [equipmentId], references: [id]) totalEngineHours Decimal? fuelConsumption Decimal? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }