ec-nest/prisma/schema.prisma
liuyun 8f9177e36a feat(c4): qc + record_correction 数据模型
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:23:41 +08:00

763 lines
32 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 通用系统管理脚手架 (sysmgr) 数据模型
// 约定:表名 sys_ 前缀;列 snake_case(模型 camelCase + @map);业务键关联(角色/资源/组织/字典/租户用 code,用户用 id)。
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
/// 租户
model Tenant {
id String @id @default(uuid(7)) @db.VarChar(36)
code String @unique @db.VarChar(64)
name String @db.VarChar(128)
status String @default("enabled") @db.VarChar(16)
remark String? @db.VarChar(255)
brandName String? @map("brand_name") @db.VarChar(64)
logoUrl String? @map("logo_url") @db.VarChar(255)
themeColor String? @map("theme_color") @db.VarChar(16)
copyright String? @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
@@map("sys_tenant")
}
/// 用户
model User {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
username String @db.VarChar(64)
passwordHash String @map("password_hash") @db.VarChar(255)
nickname String? @db.VarChar(64)
email String? @db.VarChar(128)
phone String? @db.VarChar(32)
avatar String? @db.VarChar(255)
status String @default("enabled") @db.VarChar(16)
tokenVersion Int @default(0) @map("token_version")
lockedAt DateTime? @map("locked_at")
lockReason String? @map("lock_reason") @db.VarChar(255)
mustChangePassword Boolean @default(false) @map("must_change_password")
orgCode String? @map("org_code") @db.VarChar(64)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, username])
@@index([tenantCode])
@@index([orgCode])
@@map("sys_user")
}
/// 角色
model Role {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
code String @db.VarChar(64)
name String @db.VarChar(64)
dataScope String @default("all") @map("data_scope") @db.VarChar(16)
status String @default("enabled") @db.VarChar(16)
remark String? @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, code])
@@index([tenantCode])
@@map("sys_role")
}
/// 资源(菜单/按钮/接口)
model Resource {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
parentCode String? @map("parent_code") @db.VarChar(64)
type String @db.VarChar(16)
code String @db.VarChar(128)
name String @db.VarChar(64)
path String? @db.VarChar(255)
component String? @db.VarChar(255)
method String? @db.VarChar(8)
apiPath String? @map("api_path") @db.VarChar(255)
icon String? @db.VarChar(64)
sort Int @default(0)
status String @default("enabled") @db.VarChar(16)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, code])
@@index([tenantCode])
@@index([parentCode])
@@map("sys_resource")
}
/// 组织
model Org {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
parentCode String? @map("parent_code") @db.VarChar(64)
code String @db.VarChar(64)
name String @db.VarChar(64)
leader String? @db.VarChar(64)
sort Int @default(0)
status String @default("enabled") @db.VarChar(16)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, code])
@@index([tenantCode])
@@index([parentCode])
@@map("sys_org")
}
/// 字典类型
model DictType {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
code String @db.VarChar(64)
name String @db.VarChar(64)
status String @default("enabled") @db.VarChar(16)
builtIn Boolean @default(false) @map("built_in")
remark String? @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, code])
@@index([tenantCode])
@@map("sys_dict_type")
}
/// 字典项
model DictItem {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
dictTypeCode String @map("dict_type_code") @db.VarChar(64)
label String @db.VarChar(64)
value String @db.VarChar(64)
sort Int @default(0)
status String @default("enabled") @db.VarChar(16)
builtIn Boolean @default(false) @map("built_in")
colorType String? @map("color_type") @db.VarChar(16)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, dictTypeCode, value])
@@index([tenantCode, dictTypeCode])
@@map("sys_dict_item")
}
/// 参数配置
model Config {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
key String @db.VarChar(128)
value String? @db.Text
remark String? @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, key])
@@map("sys_config")
}
/// 操作日志(只增,硬删)
model AuditLog {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
userId String? @map("user_id") @db.VarChar(36)
username String? @db.VarChar(64)
module String? @db.VarChar(64)
action String? @db.VarChar(64)
method String? @db.VarChar(8)
path String? @db.VarChar(255)
params String? @db.Text
result String? @db.Text
status String? @db.VarChar(16)
errorMessage String? @map("error_message") @db.Text
ip String? @db.VarChar(64)
userAgent String? @map("user_agent") @db.VarChar(255)
durationMs Int? @map("duration_ms")
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantCode, createdAt])
@@map("sys_audit_log")
}
/// 登录日志(只增,硬删)
model LoginLog {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
username String? @db.VarChar(64)
ip String? @db.VarChar(64)
userAgent String? @map("user_agent") @db.VarChar(255)
status String @default("success") @db.VarChar(16)
message String? @db.VarChar(255)
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantCode, createdAt])
@@map("sys_login_log")
}
/// 刷新令牌(会话载体,硬删)
model RefreshToken {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
userId String @map("user_id") @db.VarChar(36)
sid String? @db.VarChar(36)
jti String @unique @db.VarChar(64)
tokenHash String @map("token_hash") @db.VarChar(255)
ip String? @db.VarChar(64)
userAgent String? @map("user_agent") @db.VarChar(255)
loginAt DateTime @default(now()) @map("login_at")
expireAt DateTime @map("expire_at")
revokedAt DateTime? @map("revoked_at")
createdAt DateTime @default(now()) @map("created_at")
@@index([tenantCode, userId])
@@index([sid])
@@map("sys_refresh_token")
}
/// 通知/公告
model Notice {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
title String @db.VarChar(128)
content String @db.Text
status String @default("enabled") @db.VarChar(16)
createdBy String? @map("created_by") @db.VarChar(36)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode])
@@map("sys_notice")
}
/// 通知已读追踪
model NoticeRead {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
noticeId String @map("notice_id") @db.VarChar(36)
userId String @map("user_id") @db.VarChar(36)
readAt DateTime @default(now()) @map("read_at")
@@unique([tenantCode, noticeId, userId])
@@index([tenantCode, userId])
@@map("sys_notice_read")
}
/// 用户-角色关联
model UserRole {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
userId String @map("user_id") @db.VarChar(36)
roleCode String @map("role_code") @db.VarChar(64)
@@unique([tenantCode, userId, roleCode])
@@index([tenantCode, userId])
@@map("sys_user_role")
}
/// 角色-资源关联
model RoleResource {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
roleCode String @map("role_code") @db.VarChar(64)
resourceCode String @map("resource_code") @db.VarChar(128)
@@unique([tenantCode, roleCode, resourceCode])
@@index([tenantCode, roleCode])
@@map("sys_role_resource")
}
/// 角色-组织关联(数据权限「自定义」)
model RoleOrg {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
roleCode String @map("role_code") @db.VarChar(64)
orgCode String @map("org_code") @db.VarChar(64)
@@unique([tenantCode, roleCode, orgCode])
@@map("sys_role_org")
}
/// 机构(=租户的业务信息,1:1 于 Tenant,code 与 tenant.code 同值)
model Agency {
code String @id @db.VarChar(64)
orgName String @map("org_name") @db.VarChar(100)
orgType String @map("org_type") @db.VarChar(20)
creditCode String @map("credit_code") @db.VarChar(18)
locCode String @map("loc_code") @db.VarChar(12)
locName String @map("loc_name") @db.VarChar(50)
svcSource String @map("svc_source") @db.VarChar(10)
licenseNo String? @map("license_no") @db.VarChar(50)
address String @map("address") @db.VarChar(200)
contactName String @map("contact_name") @db.VarChar(30)
contactPhone String @map("contact_phone") @db.VarChar(15)
bedCount Int? @map("bed_count")
signDate DateTime? @map("sign_date") @db.Date
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@map("ltc_agency")
}
/// 人员(护理员/医护/组长,账号在 User,staff.user_id 关联 user.id)
model Staff {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
userId String? @unique @map("user_id") @db.VarChar(36)
name String @db.VarChar(30)
idCardNo String @map("id_card_no") @db.VarChar(255)
personCode String? @map("person_code") @db.VarChar(20)
phone String @db.VarChar(15)
jobType String @map("job_type") @db.VarChar(20)
workType String @map("work_type") @db.VarChar(10)
entryDate DateTime? @map("entry_date") @db.Date
leaveDate DateTime? @map("leave_date") @db.Date
employStatus String @map("employ_status") @db.VarChar(10)
certType String? @map("cert_type") @db.VarChar(20)
certNo String? @map("cert_no") @db.VarChar(50)
certLevel String? @map("cert_level") @db.VarChar(20)
certExpire DateTime? @map("cert_expire") @db.Date
certStatus String? @map("cert_status") @db.VarChar(20)
certVerifyUrl String? @map("cert_verify_url") @db.VarChar(200)
groupLeaderId String? @map("group_leader_id") @db.VarChar(36)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, name])
@@map("ltc_staff")
}
/// 国家基准库 L1(全局,36 项)
model SvcNational {
id String @id @default(uuid(7)) @db.VarChar(36)
natCode String @unique @map("nat_code") @db.VarChar(20)
natName String @map("nat_name") @db.VarChar(100)
natCategory String @map("nat_category") @db.VarChar(20)
natSubCategory String? @map("nat_sub_category") @db.VarChar(50)
recommendStaff String? @map("recommend_staff") @db.VarChar(50)
recommendDuration String? @map("recommend_duration") @db.VarChar(50)
isMedical Boolean @default(false) @map("is_medical")
version Int @default(1)
@@map("svc_national")
}
/// 属地目录 L2(全局,昆明 45 项 / 州市引用 L1)
model SvcLocal {
id String @id @default(uuid(7)) @db.VarChar(36)
locCode String @map("loc_code") @db.VarChar(12)
localItemName String @map("local_item_name") @db.VarChar(100)
localCategory String? @map("local_category") @db.VarChar(20)
svcTime String? @map("svc_time") @db.VarChar(50)
minFreq String? @map("min_freq") @db.VarChar(50)
staffQual String? @map("staff_qual") @db.VarChar(50)
isMedical Boolean @default(false) @map("is_medical")
sourceDoc String? @map("source_doc") @db.VarChar(200)
mapStatus String @default("mapped") @map("map_status") @db.VarChar(20)
@@index([locCode])
@@map("svc_local")
}
/// 属地↔国家映射 L3(全局,机构不可见)
model SvcMapping {
id String @id @default(uuid(7)) @db.VarChar(36)
locId String @map("loc_id") @db.VarChar(36)
natId String? @map("nat_id") @db.VarChar(36)
mapType String @map("map_type") @db.VarChar(20)
mapNote String? @map("map_note") @db.VarChar(200)
status String @default("confirmed") @db.VarChar(20)
@@index([locId])
@@map("svc_mapping")
}
/// 机构项目库 L4(租户级:机构勾选+配价)
model SvcOrg {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
srcType String @map("src_type") @db.VarChar(10)
srcId String @map("src_id") @db.VarChar(36)
isEnabled Boolean @default(true) @map("is_enabled")
price String? @map("price") @db.VarChar(50)
priceEffective DateTime? @map("price_effective")
isNewNational Boolean @default(false) @map("is_new_national")
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, srcType])
@@map("svc_org")
}
/// 统筹区配置(全局)
model LocConfig {
locCode String @id @map("loc_code") @db.VarChar(12)
locName String @map("loc_name") @db.VarChar(50)
svcSource String @map("svc_source") @db.VarChar(10)
itemCountRule String? @map("item_count_rule") @db.VarChar(100)
@@map("loc_config")
}
/// 老人档案
model Elder {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
locCode String @map("loc_code") @db.VarChar(12)
prevLocCode String? @map("prev_loc_code") @db.VarChar(12)
transferConfirmAt DateTime? @map("transfer_confirm_at")
name String @db.VarChar(30)
gender String @db.Char(1)
birthDate DateTime @map("birth_date") @db.Date
idCardNo String @map("id_card_no") @db.VarChar(255)
phone String? @db.VarChar(15)
address String @db.VarChar(200)
guardianName String? @map("guardian_name") @db.VarChar(30)
guardianPhone String? @map("guardian_phone") @db.VarChar(15)
insurNo String @map("insur_no") @db.VarChar(30)
insurType String @map("insur_type") @db.VarChar(10)
insurYears Int? @map("insur_years")
insurVerifyStatus String? @map("insur_verify_status") @db.VarChar(20)
insurVerifyDate DateTime? @map("insur_verify_date") @db.Date
assessLevel String? @map("assess_level") @db.VarChar(20)
careLevel String? @map("care_level") @db.VarChar(20)
assessDate DateTime? @map("assess_date") @db.Date
assessOrg String? @map("assess_org") @db.VarChar(100)
assessEvidenceFile String? @map("assess_evidence_file") @db.VarChar(255)
benefitStart DateTime? @map("benefit_start") @db.Date
benefitEnd DateTime? @map("benefit_end") @db.Date
treatStatus String @default("pending_file") @map("treat_status") @db.VarChar(20)
statusSource String @default("manual") @map("status_source") @db.VarChar(10)
statusChangeDate DateTime? @map("status_change_date") @db.Date
hospStart DateTime? @map("hosp_start") @db.Date
hospEnd DateTime? @map("hosp_end") @db.Date
photoTierOverride Json? @map("photo_tier_override")
needAssess Json? @map("need_assess")
note String? @db.Text
bizLine String @default("ltci") @map("biz_line") @db.VarChar(20)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, idCardNo])
@@index([tenantCode, name])
@@map("ltc_elder")
}
/// 待遇状态变更日志
model ElderStatusLog {
id String @id @default(uuid(7)) @db.VarChar(36)
elderId String @map("elder_id") @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
fromStatus String @map("from_status") @db.VarChar(20)
toStatus String @map("to_status") @db.VarChar(20)
changeReason String @map("change_reason") @db.VarChar(200)
source String @default("manual") @db.VarChar(10)
operatorId String @map("operator_id") @db.VarChar(36)
evidenceFile String? @map("evidence_file") @db.VarChar(255)
changedAt DateTime @default(now()) @map("changed_at")
@@index([elderId])
@@map("ltc_elder_status_log")
}
/// 服务计划头
model Plan {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
elderId String @map("elder_id") @db.VarChar(36)
planPeriodStart DateTime @map("plan_period_start") @db.Date
planPeriodEnd DateTime @map("plan_period_end") @db.Date
careLevel String @map("care_level") @db.VarChar(20)
careMode String @map("care_mode") @db.VarChar(20)
itemCount Int @default(0) @map("item_count")
itemCountRule String? @map("item_count_rule") @db.VarChar(100)
extraItemCount Int @default(0) @map("extra_item_count")
weekFreq Int? @map("week_freq")
monthHours Int? @map("month_hours")
planStatus String @default("draft") @map("plan_status") @db.VarChar(20)
confirmElder Boolean @default(false) @map("confirm_elder")
confirmGuardian Boolean @default(false) @map("confirm_guardian")
confirmTime DateTime? @map("confirm_time")
planBasis Json? @map("plan_basis")
changeFromPlanId String? @map("change_from_plan_id") @db.VarChar(36)
bizLine String @default("ltci") @map("biz_line") @db.VarChar(20)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, elderId])
@@map("svc_plan")
}
/// 服务计划项
model PlanItem {
id String @id @default(uuid(7)) @db.VarChar(36)
planId String @map("plan_id") @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
svcId String @map("svc_id") @db.VarChar(36)
svcNameSnapshot String @map("svc_name_snapshot") @db.VarChar(100)
svcCodeSnapshot String? @map("svc_code_snapshot") @db.VarChar(20)
freqType String? @map("freq_type") @db.VarChar(20)
freqValue Int? @map("freq_value")
durationMin Int? @map("duration_min")
photoTier String @default("free") @map("photo_tier") @db.VarChar(10)
cautionNote String? @map("caution_note") @db.Text
isMedical Boolean @default(false) @map("is_medical")
needCert Boolean @default(false) @map("need_cert")
@@index([planId])
@@map("svc_plan_item")
}
/// 工单
model Order {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
elderId String @map("elder_id") @db.VarChar(36)
planId String @map("plan_id") @db.VarChar(36)
serviceDate DateTime @map("service_date") @db.Date
timeSlotStart DateTime @map("time_slot_start")
timeSlotEnd DateTime @map("time_slot_end")
assigneeId String? @map("assignee_id") @db.VarChar(36)
assignTime DateTime? @map("assign_time")
assignMode String? @map("assign_mode") @db.VarChar(20)
orderStatus String @default("to_assign") @map("order_status") @db.VarChar(20)
itemList Json @map("item_list")
needPhoto Boolean @default(false) @map("need_photo")
cancelReason String? @map("cancel_reason") @db.VarChar(200)
rescheduleLog Json? @map("reschedule_log")
qualificationCheck String? @map("qualification_check") @db.VarChar(20)
billable Boolean @default(true) @map("billable")
priceSnapshot Json? @map("price_snapshot")
settlePeriod String? @map("settle_period") @db.VarChar(20)
notMetReason String? @map("not_met_reason") @db.VarChar(50)
notMetAt DateTime? @map("not_met_at")
bizLine String @default("ltci") @map("biz_line") @db.VarChar(20)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, assigneeId, serviceDate])
@@index([tenantCode, elderId])
@@map("svc_order")
}
/// 老人个人项目库
model ElderSvc {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
elderId String @map("elder_id") @db.VarChar(36)
svcId String @map("svc_id") @db.VarChar(36)
svcNameSnapshot String @map("svc_name_snapshot") @db.VarChar(100)
svcCodeSnapshot String? @map("svc_code_snapshot") @db.VarChar(20)
careMode String @map("care_mode") @db.VarChar(20)
isActive Boolean @default(true) @map("is_active")
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, elderId])
@@map("ltc_elder_svc")
}
/// 履约留痕(主)
model Record {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
orderId String @map("order_id") @db.VarChar(36)
elderId String @map("elder_id") @db.VarChar(36)
assigneeId String @map("assignee_id") @db.VarChar(36)
checkinTime DateTime? @map("checkin_time")
checkoutTime DateTime? @map("checkout_time")
durationMin Int? @map("duration_min")
checkinLat Decimal? @map("checkin_lat") @db.Decimal(10, 6)
checkinLng Decimal? @map("checkin_lng") @db.Decimal(10, 6)
locateStatus String @default("ok") @map("locate_status") @db.VarChar(20)
recordStatus String @default("serving") @map("record_status") @db.VarChar(20)
voiceFile String? @map("voice_file") @db.VarChar(200)
offlineFlag Boolean @default(false) @map("offline_flag")
clientMd5 String? @map("client_md5") @db.VarChar(32)
submitTime DateTime? @map("submit_time")
actualDurationTier String? @map("actual_duration_tier") @db.VarChar(10)
bizLine String @default("ltci") @map("biz_line") @db.VarChar(20)
isPrepaid Boolean @default(false) @map("is_prepaid")
billable Boolean @default(true) @map("billable")
sourcePrepaidOf String? @map("source_prepaid_of") @db.VarChar(36)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@unique([tenantCode, clientMd5])
@@index([tenantCode, orderId])
@@index([tenantCode, elderId])
@@index([tenantCode, assigneeId, checkinTime])
@@map("ho_record")
}
/// 留痕项目明细
model RecordItem {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String @map("record_id") @db.VarChar(36)
svcId String @map("svc_id") @db.VarChar(36)
svcNameSnapshot String @map("svc_name_snapshot") @db.VarChar(100)
execResult String @map("exec_result") @db.VarChar(20)
undoReason String? @map("undo_reason") @db.VarChar(200)
extraFlag Boolean @default(false) @map("extra_flag")
photoRequired Boolean @default(false) @map("photo_required")
isRefusedPhoto Boolean @default(false) @map("is_refused_photo")
refuseReason String? @map("refuse_reason") @db.VarChar(200)
@@index([recordId])
@@map("ho_record_item")
}
/// 留痕照片
model RecordPhoto {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String @map("record_id") @db.VarChar(36)
svcId String? @map("svc_id") @db.VarChar(36)
filePath String @map("file_path") @db.VarChar(255)
fileSize Int @map("file_size")
visibleToFamily Boolean @default(false) @map("visible_to_family")
uploadBatch String? @map("upload_batch") @db.VarChar(36)
keepUntil DateTime? @map("keep_until")
createdAt DateTime @default(now()) @map("created_at")
@@index([recordId])
@@map("ho_record_photo")
}
/// 异常上报
model RecordAbnormal {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String? @map("record_id") @db.VarChar(36)
orderId String? @map("order_id") @db.VarChar(36)
elderId String @map("elder_id") @db.VarChar(36)
reporterId String @map("reporter_id") @db.VarChar(36)
abnormalType String @map("abnormal_type") @db.VarChar(20)
abnormalDesc String? @map("abnormal_desc") @db.Text
voiceFile String? @map("voice_file") @db.VarChar(200)
hasPhoto Boolean @default(false) @map("has_photo")
visitTime DateTime? @map("visit_time")
visitLat Decimal? @map("visit_lat") @db.Decimal(10, 6)
visitLng Decimal? @map("visit_lng") @db.Decimal(10, 6)
notifyStatus String @default("pending") @map("notify_status") @db.VarChar(20)
handleStatus String @default("open") @map("handle_status") @db.VarChar(20)
handleResult String? @map("handle_result") @db.VarChar(200)
linkPlanChange Boolean @default(false) @map("link_plan_change")
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
@@index([tenantCode, elderId])
@@index([tenantCode, notifyStatus])
@@map("ho_record_abnormal")
}
/// 结算表(二期预留,建空表不写业务数据)
model Settlement {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
settlePeriod String @map("settle_period") @db.VarChar(20)
amountTotal Decimal? @map("amount_total") @db.Decimal(12, 2)
amountPassed Decimal? @map("amount_passed") @db.Decimal(12, 2)
amountRejected Decimal? @map("amount_rejected") @db.Decimal(12, 2)
amountFund Decimal? @map("amount_fund") @db.Decimal(12, 2)
amountSelfPay Decimal? @map("amount_self_pay") @db.Decimal(12, 2)
submitDate DateTime? @map("submit_date") @db.Date
payDate DateTime? @map("pay_date") @db.Date
exceptionReason String? @map("exception_reason") @db.VarChar(200)
handleDeadline DateTime? @map("handle_deadline") @db.Date
createdAt DateTime @default(now()) @map("created_at")
@@map("settlement")
}
/// 上报表(二期预留,建空表不写业务数据)
model Report {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String @map("record_id") @db.VarChar(36)
orderId String @map("order_id") @db.VarChar(36)
reportStatus String @default("pending") @map("report_status") @db.VarChar(20)
reportTime DateTime? @map("report_time")
officialNo String? @map("official_no") @db.VarChar(50)
locCode String @map("loc_code") @db.VarChar(12)
natCodeSnapshot Json? @map("nat_code_snapshot")
adapterResult String? @map("adapter_result") @db.VarChar(200)
createdAt DateTime @default(now()) @map("created_at")
@@map("report")
}
/// 质控记录
model Qc {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String @map("record_id") @db.VarChar(36)
qcType String @default("normal") @map("qc_type") @db.VarChar(20)
qcResult String @default("pending") @map("qc_result") @db.VarChar(20)
qcNote String? @map("qc_note") @db.VarChar(200)
qcStaffId String? @map("qc_staff_id") @db.VarChar(36)
qcTime DateTime? @map("qc_time")
passTime DateTime? @map("pass_time")
firstQcId String? @map("first_qc_id") @db.VarChar(36)
createdAt DateTime @default(now()) @map("created_at")
createdBy String? @map("created_by") @db.VarChar(36)
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
@@index([tenantCode, recordId])
@@index([tenantCode, qcResult])
@@map("qc")
}
/// 补正说明(留痕域 ho_)
model RecordCorrection {
id String @id @default(uuid(7)) @db.VarChar(36)
tenantCode String @map("tenant_code") @db.VarChar(64)
recordId String @map("record_id") @db.VarChar(36)
qcId String? @map("qc_id") @db.VarChar(36)
correctionNote String @map("correction_note") @db.VarChar(200)
correctedBy String @map("corrected_by") @db.VarChar(36)
correctedAt DateTime @default(now()) @map("corrected_at")
@@index([recordId])
@@map("ho_record_correction")
}