R46 A1-A7:落地绩效考核模块首版

这个提交包含在:
2026-03-29 16:30:29 +08:00
父节点 48f395e18d
当前提交 659e3153a3
共修改 19 个文件,包含 2652 行新增和 15 行删除
+85 -3
查看文件
@@ -363,6 +363,27 @@ enum EmployeeTrainingStatus {
cancelled
}
enum PerformanceReviewCycleType {
monthly
quarterly
semi_annual
annual
}
enum PerformanceReviewCycleStatus {
draft
active
completed
}
enum PerformanceReviewDimensionType {
work_quality
work_efficiency
teamwork
initiative
professional_skill
}
enum WeeklyReportStatus {
draft
submitted
@@ -609,6 +630,8 @@ model Employee {
contracts EmployeeContract[]
trainings EmployeeTraining[]
certificates EmployeeCertificate[]
performance_reviews_received PerformanceReview[] @relation("PerformanceReviewEmployee")
performance_reviews_authored PerformanceReview[] @relation("PerformanceReviewReviewer")
@@index([department_id])
@@index([legal_entity_id], map: "idx_employees_legal_entity")
@@ -2045,11 +2068,11 @@ model EmployeeTraining {
}
model EmployeeCertificate {
id String @id @default(uuid()) @db.Uuid
employee_id String @db.Uuid
id String @id @default(uuid()) @db.Uuid
employee_id String @db.Uuid
name String
issuer String
obtained_date DateTime @db.Date
obtained_date DateTime @db.Date
expiry_date DateTime? @db.Date
certificate_no String?
attachment_path String?
@@ -2066,6 +2089,65 @@ model EmployeeCertificate {
@@map("employee_certificates")
}
model PerformanceReviewCycle {
id String @id @default(uuid()) @db.Uuid
name String
cycle_type PerformanceReviewCycleType
start_date DateTime @db.Date
end_date DateTime @db.Date
status PerformanceReviewCycleStatus @default(draft)
activated_at DateTime?
completed_at DateTime?
created_at DateTime @default(now())
created_by String? @db.Uuid
updated_at DateTime @default(now()) @updatedAt
updated_by String? @db.Uuid
reviews PerformanceReview[]
@@index([status, start_date], map: "idx_performance_review_cycles_status_start")
@@index([status, completed_at], map: "idx_performance_review_cycles_status_completed")
@@map("performance_review_cycles")
}
model PerformanceReview {
id String @id @default(uuid()) @db.Uuid
cycle_id String @db.Uuid
employee_id String @db.Uuid
reviewer_employee_id String @db.Uuid
overall_score Decimal @db.Decimal(3, 1)
comment String?
created_at DateTime @default(now())
created_by String? @db.Uuid
updated_at DateTime @default(now()) @updatedAt
updated_by String? @db.Uuid
cycle PerformanceReviewCycle @relation(fields: [cycle_id], references: [id], onDelete: Cascade)
employee Employee @relation("PerformanceReviewEmployee", fields: [employee_id], references: [id], onDelete: Cascade)
reviewer_employee Employee @relation("PerformanceReviewReviewer", fields: [reviewer_employee_id], references: [id], onDelete: Restrict)
dimensions PerformanceReviewDimension[]
@@unique([cycle_id, employee_id], map: "performance_reviews_cycle_employee_ux")
@@index([cycle_id, reviewer_employee_id], map: "idx_performance_reviews_cycle_reviewer")
@@index([employee_id, created_at], map: "idx_performance_reviews_employee_created")
@@map("performance_reviews")
}
model PerformanceReviewDimension {
id String @id @default(uuid()) @db.Uuid
review_id String @db.Uuid
dimension_type PerformanceReviewDimensionType
score Decimal @db.Decimal(3, 1)
review PerformanceReview @relation(fields: [review_id], references: [id], onDelete: Cascade)
@@unique([review_id, dimension_type], map: "performance_review_dimensions_review_dimension_ux")
@@index([dimension_type, score], map: "idx_performance_review_dimensions_dimension_score")
@@map("performance_review_dimensions")
}
model ProjectDeliveryRecord {
id String @id @default(uuid()) @db.Uuid
project_id String @db.Uuid