manicanldes-backend/prisma/procurement.prisma

128 lines
5.1 KiB
Plaintext

enum MaterialKind {
WAX
FRAGRANCE
WICK
DYE
VESSEL
PACKAGING
LABEL
OTHER
}
enum MaterialUnit {
GRAM
KILOGRAM
MILLILITRE
LITRE
PIECE
METRE
}
enum PurchaseOrderStatus {
DRAFT
ISSUED
CANCELLED
}
model Supplier {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
name String @db.VarChar(160)
code String @db.VarChar(32)
contactName String @map("contact_name") @db.VarChar(160)
email String @db.VarChar(254)
phone String @db.VarChar(24)
active Boolean @default(true)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
materials SupplierMaterial[]
purchaseOrders PurchaseOrder[]
@@unique([organizationId, code])
@@unique([id, organizationId])
@@index([organizationId, active, name, id])
@@map("suppliers")
}
model Material {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
name String @db.VarChar(160)
code String @db.VarChar(32)
kind MaterialKind
unit MaterialUnit
active Boolean @default(true)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
suppliers SupplierMaterial[]
purchaseOrderLines PurchaseOrderLine[]
@@unique([organizationId, code])
@@unique([id, organizationId])
@@index([organizationId, active, kind, name, id])
@@map("materials")
}
model PurchaseOrder {
id String @id @default(uuid()) @db.Uuid
organizationId String @map("organization_id") @db.Uuid
supplierId String @map("supplier_id") @db.Uuid
createdById String @map("created_by_id") @db.Uuid
reference String @db.VarChar(20)
status PurchaseOrderStatus @default(DRAFT)
currency String @db.Char(3)
expectedDeliveryAt DateTime? @map("expected_delivery_at") @db.Date
merchandiseTotal Decimal @map("merchandise_total") @db.Decimal(12,2)
issuedAt DateTime? @map("issued_at") @db.Timestamptz(3)
cancelledAt DateTime? @map("cancelled_at") @db.Timestamptz(3)
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz(3)
supplier Supplier @relation(fields: [supplierId, organizationId], references: [id, organizationId], onDelete: Restrict)
createdBy User @relation(fields: [createdById, organizationId], references: [id, organizationId], onDelete: Restrict)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Restrict)
lines PurchaseOrderLine[]
@@unique([organizationId, reference])
@@unique([id, organizationId])
@@index([organizationId, status, createdAt, id])
@@map("purchase_orders")
}
model PurchaseOrderLine {
id String @id @default(uuid()) @db.Uuid
purchaseOrderId String @map("purchase_order_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
materialId String @map("material_id") @db.Uuid
materialName String @map("material_name") @db.VarChar(160)
materialCode String @map("material_code") @db.VarChar(32)
unit MaterialUnit
supplierSku String @map("supplier_sku") @db.VarChar(64)
quantity Decimal @db.Decimal(12,3)
unitPrice Decimal @map("unit_price") @db.Decimal(12,2)
lineTotal Decimal @map("line_total") @db.Decimal(12,2)
purchaseOrder PurchaseOrder @relation(fields: [purchaseOrderId, organizationId], references: [id, organizationId], onDelete: Restrict)
material Material @relation(fields: [materialId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@unique([purchaseOrderId, materialId])
@@index([materialId, organizationId])
@@map("purchase_order_lines")
}
model SupplierMaterial {
supplierId String @map("supplier_id") @db.Uuid
materialId String @map("material_id") @db.Uuid
organizationId String @map("organization_id") @db.Uuid
supplierSku String @map("supplier_sku") @db.VarChar(64)
leadTimeDays Int @map("lead_time_days")
minOrderQuantity Decimal @map("min_order_quantity") @db.Decimal(12, 3)
unitPrice Decimal @map("unit_price") @db.Decimal(12, 2)
currency String @db.Char(3)
active Boolean @default(true)
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz(3)
supplier Supplier @relation(fields: [supplierId, organizationId], references: [id, organizationId], onDelete: Restrict)
material Material @relation(fields: [materialId, organizationId], references: [id, organizationId], onDelete: Restrict)
@@id([supplierId, materialId])
@@index([materialId, organizationId, active])
@@map("supplier_materials")
}