generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } enum AuthProvider { EMAIL KAKAO APPLE NAVER GOOGLE } model User { id String @id @default(cuid()) email String? @unique passwordHash String? name String phone String? provider AuthProvider @default(EMAIL) kakaoId String? @unique appleSub String? @unique naverId String? @unique googleId String? @unique profileImage String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt profile Profile? family FamilyMember[] policies Policy[] claims Claim[] notifications Notification[] diagnoses Diagnosis[] healthChecks HealthCheck[] consults Consult[] } model Profile { id String @id @default(cuid()) userId String @unique age Int gender Gender job String? monthlyPremium Int @default(0) score Int @default(0) user User @relation(fields: [userId], references: [id], onDelete: Cascade) } enum Gender { MALE FEMALE } enum Relation { SELF SPOUSE CHILD PARENT SIBLING } model FamilyMember { id String @id @default(cuid()) userId String relation Relation name String age Int gender Gender user User @relation(fields: [userId], references: [id], onDelete: Cascade) policies Policy[] @@index([userId]) } enum PolicyType { SILSON CANCER LIFE ACCIDENT CHILD NURSING FEMALE DENTAL DRIVER CAR } model Policy { id String @id @default(cuid()) userId String familyMemberId String? name String insurer String type PolicyType monthlyPremium Int coverage BigInt joinDate DateTime maturityDate DateTime? renewalDate DateTime? silsonGen Int? isGroup Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) familyMember FamilyMember? @relation(fields: [familyMemberId], references: [id], onDelete: SetNull) @@index([userId]) @@index([familyMemberId]) } enum ClaimStatus { SUBMITTED REVIEWING ADDITIONAL_DOCS APPROVED PAID REJECTED } model Claim { id String @id @default(cuid()) userId String title String hospital String? visitDate DateTime? status ClaimStatus @default(SUBMITTED) amount Int? aiEstimated String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) attachments ClaimAttachment[] events ClaimEvent[] @@index([userId, status]) } enum AttachmentType { RECEIPT DIAGNOSIS DETAIL OTHER } model ClaimAttachment { id String @id @default(cuid()) claimId String type AttachmentType objectKey String mimeType String? size Int? createdAt DateTime @default(now()) claim Claim @relation(fields: [claimId], references: [id], onDelete: Cascade) @@index([claimId]) } model ClaimEvent { id String @id @default(cuid()) claimId String status ClaimStatus note String? createdAt DateTime @default(now()) claim Claim @relation(fields: [claimId], references: [id], onDelete: Cascade) @@index([claimId]) } enum NotificationTone { INFO WARN DANGER } model Notification { id String @id @default(cuid()) userId String title String body String tone NotificationTone @default(INFO) scheduled DateTime readAt DateTime? createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId, scheduled]) } model Diagnosis { id String @id @default(cuid()) userId String answers Json score Int breakdown Json createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId]) } model HealthCheck { id String @id @default(cuid()) userId String date DateTime metrics Json summary String? createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId, date]) } enum ConsultMethod { KAKAO PHONE VISIT } enum ConsultStatus { REQUESTED SCHEDULED DONE CANCELED } model Consult { id String @id @default(cuid()) userId String method ConsultMethod phone String? preferredAt DateTime? memo String? status ConsultStatus @default(REQUESTED) createdAt DateTime @default(now()) user User @relation(fields: [userId], references: [id], onDelete: Cascade) @@index([userId, status]) }