File size: 20,795 Bytes
ef874e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model alembic_version {
  version_num String @id @db.VarChar(32)
}

model audit_log {
  id         Int      @id @default(autoincrement())
  user_id    Int?
  aksi       String   @db.VarChar(50)
  entitas    String   @db.VarChar(50)
  entitas_id Int?
  data_lama  Json?
  data_baru  Json?
  ip_address String?  @db.VarChar(45)
  user_agent String?  @db.VarChar(255)
  created_at DateTime @default(now()) @db.DateTime(0)
  user       user?    @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "audit_log_ibfk_1")

  @@index([created_at], map: "idx_audit_created")
  @@index([entitas, entitas_id], map: "idx_audit_entitas_id")
  @@index([user_id], map: "idx_audit_user")
}

model bon {
  id            Int           @id @default(autoincrement())
  transaksi_id  Int
  member_id     Int
  total_bon     Decimal       @db.Decimal(15, 2)
  sisa_bon      Decimal       @db.Decimal(15, 2)
  jatuh_tempo   DateTime?     @db.Date
  status        bon_status    @default(aktif)
  reminder_sent Int           @default(0) @db.SmallInt
  created_at    DateTime      @default(now()) @db.DateTime(0)
  updated_at    DateTime      @default(now()) @db.DateTime(0)
  member        member        @relation(fields: [member_id], references: [id], onUpdate: NoAction, map: "bon_ibfk_1")
  transaksi     transaksi     @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "bon_ibfk_2")
  bon_cicilan   bon_cicilan[]

  @@index([jatuh_tempo], map: "idx_bon_jatuh_tempo")
  @@index([member_id], map: "idx_bon_member")
  @@index([status], map: "idx_bon_status")
  @@index([transaksi_id], map: "idx_bon_transaksi")
}

model bon_cicilan {
  id         Int                @id @default(autoincrement())
  bon_id     Int
  nominal    Decimal            @db.Decimal(15, 2)
  metode     bon_cicilan_metode
  user_id    Int
  created_at DateTime           @default(now()) @db.DateTime(0)
  bon        bon                @relation(fields: [bon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "bon_cicilan_ibfk_1")
  user       user               @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "bon_cicilan_ibfk_2")

  @@index([bon_id], map: "idx_cicilan_bon")
  @@index([user_id], map: "idx_cicilan_user")
}

model diskon {
  id               Int                @id @default(autoincrement())
  nama             String             @db.VarChar(200)
  tipe             diskon_tipe
  nilai            Decimal            @db.Decimal(15, 2)
  min_belanja      Decimal            @default(0.00) @db.Decimal(15, 2)
  produk_ids       Json?
  member_only      Int                @default(0) @db.SmallInt
  tgl_mulai        DateTime           @db.DateTime(0)
  tgl_selesai      DateTime           @db.DateTime(0)
  jam_mulai        DateTime?          @db.Time(0)
  jam_selesai      DateTime?          @db.Time(0)
  is_aktif         Int                @default(1) @db.SmallInt
  created_at       DateTime           @default(now()) @db.DateTime(0)
  diskon_bundling  diskon_bundling[]
  transaksi_detail transaksi_detail[]
  voucher          voucher[]

  @@index([tgl_mulai, tgl_selesai], map: "idx_diskon_periode")
  @@index([is_aktif], map: "idx_diskon_status")
}

model diskon_bundling {
  id        Int     @id @default(autoincrement())
  diskon_id Int
  produk_id Int
  qty       Decimal @db.Decimal(10, 2)
  diskon    diskon  @relation(fields: [diskon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "diskon_bundling_ibfk_1")
  produk    produk  @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "diskon_bundling_ibfk_2")

  @@index([diskon_id], map: "idx_bundling_diskon")
  @@index([produk_id], map: "idx_bundling_produk")
}

model harga_tingkat {
  id         Int                   @id @default(autoincrement())
  produk_id  Int
  tingkat    harga_tingkat_tingkat
  min_qty    Decimal               @db.Decimal(10, 2)
  harga      Decimal               @db.Decimal(15, 2)
  created_at DateTime              @default(now()) @db.DateTime(0)
  produk     produk                @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "harga_tingkat_ibfk_1")

  @@unique([produk_id, tingkat], map: "uq_produk_tingkat")
}

model kategori {
  id         Int       @id @default(autoincrement())
  nama       String    @unique(map: "nama") @db.VarChar(100)
  icon       String?   @db.VarChar(50)
  aktif      Int       @default(1) @db.SmallInt
  created_at DateTime  @default(now()) @db.DateTime(0)
  updated_at DateTime  @default(now()) @db.DateTime(0)
  deleted_at DateTime? @db.DateTime(0)
  produk     produk[]

  @@index([nama], map: "idx_kategori_nama")
}

model member {
  id         Int         @id @default(autoincrement())
  kode       String      @unique(map: "kode") @db.VarChar(20)
  nama       String      @db.VarChar(200)
  nomor_hp   String      @unique(map: "nomor_hp") @db.VarChar(20)
  alamat     String?     @db.Text
  total_poin Int         @default(0)
  limit_bon  Decimal     @default(0.00) @db.Decimal(15, 2)
  total_bon  Decimal     @default(0.00) @db.Decimal(15, 2)
  foto_url   String?     @db.VarChar(500)
  aktif      Int         @default(1) @db.SmallInt
  created_at DateTime    @default(now()) @db.DateTime(0)
  updated_at DateTime    @default(now()) @db.DateTime(0)
  deleted_at DateTime?   @db.DateTime(0)
  bon        bon[]
  transaksi  transaksi[]

  @@index([kode], map: "idx_pelanggan_kode")
  @@index([nomor_hp], map: "idx_pelanggan_nomor_hp")
}

model notifikasi {
  id           Int             @id @default(autoincrement())
  user_id      Int?
  tipe         notifikasi_tipe
  judul        String          @db.VarChar(255)
  pesan        String          @db.Text
  referensi_id Int?
  is_dibaca    Int             @default(0) @db.SmallInt
  was_sent     Int             @default(0) @db.SmallInt
  created_at   DateTime        @default(now()) @db.DateTime(0)
  user         user?           @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "notifikasi_ibfk_1")

  @@index([created_at], map: "idx_notif_created")
  @@index([user_id, is_dibaca], map: "idx_notif_user_dibaca")
}

model pembayaran {
  id           Int               @id @default(autoincrement())
  transaksi_id Int
  metode       pembayaran_metode
  nominal      Decimal           @db.Decimal(15, 2)
  referensi    String?           @db.VarChar(100)
  created_at   DateTime          @default(now()) @db.DateTime(0)
  transaksi    transaksi         @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "pembayaran_ibfk_1")

  @@index([metode], map: "idx_pembayaran_metode")
  @@index([transaksi_id], map: "idx_pembayaran_transaksi")
}

model pengaturan {
  id         Int      @id @default(autoincrement())
  kunci      String   @unique(map: "kunci") @db.VarChar(100)
  nilai      String   @db.Text
  deskripsi  String?  @db.VarChar(255)
  updated_at DateTime @default(now()) @db.DateTime(0)

  @@index([kunci], map: "idx_pengaturan_kunci")
}

model produk {
  id               Int                @id @default(autoincrement())
  kode             String             @unique(map: "kode") @db.VarChar(50)
  barcode          String?            @unique(map: "barcode") @db.VarChar(50)
  nama             String             @db.VarChar(200)
  kategori_id      Int
  supplier_id      Int?
  satuan           String             @default("pcs") @db.VarChar(20)
  harga_beli       Decimal            @db.Decimal(15, 2)
  harga_jual       Decimal            @db.Decimal(15, 2)
  stok             Decimal            @default(0.00) @db.Decimal(12, 2)
  stok_min         Decimal            @default(5.00) @db.Decimal(12, 2)
  expired_date     DateTime?          @db.Date
  foto_url         String?            @db.LongText
  qr_url           String?            @db.VarChar(500)
  deskripsi        String?            @db.Text
  is_ecer          Int                @default(1) @db.SmallInt
  is_aktif         Int                @default(1) @db.SmallInt
  created_at       DateTime           @default(now()) @db.DateTime(0)
  updated_at       DateTime           @default(now()) @db.DateTime(0)
  deleted_at       DateTime?          @db.DateTime(0)
  diskon_bundling  diskon_bundling[]
  harga_tingkat    harga_tingkat[]
  kategori         kategori           @relation(fields: [kategori_id], references: [id], onUpdate: NoAction, map: "produk_ibfk_1")
  supplier         supplier?          @relation(fields: [supplier_id], references: [id], onUpdate: NoAction, map: "produk_ibfk_2")
  stok_batch       stok_batch[]
  stok_log         stok_log[]
  stok_opname      stok_opname[]
  transaksi_detail transaksi_detail[]
  transaksi_retur  transaksi_retur[]

  @@index([barcode], map: "idx_produk_barcode")
  @@index([kategori_id], map: "idx_produk_kategori")
  @@index([kode], map: "idx_produk_kode")
  @@index([nama], map: "idx_produk_nama")
  @@index([supplier_id], map: "idx_produk_supplier")
}

model shift {
  id              Int          @id @default(autoincrement())
  user_id         Int
  kode            String       @db.VarChar(30)
  modal_awal      Decimal      @default(0.00) @db.Decimal(15, 2)
  waktu_buka      DateTime     @db.DateTime(0)
  waktu_tutup     DateTime?    @db.DateTime(0)
  total_transaksi Int          @default(0)
  total_tunai     Decimal      @default(0.00) @db.Decimal(15, 2)
  total_qris      Decimal      @default(0.00) @db.Decimal(15, 2)
  total_transfer  Decimal      @default(0.00) @db.Decimal(15, 2)
  total_bon       Decimal      @default(0.00) @db.Decimal(15, 2)
  total_diskon    Decimal      @default(0.00) @db.Decimal(15, 2)
  total_selisih   Decimal      @default(0.00) @db.Decimal(15, 2)
  status          shift_status @default(buka)
  catatan         String?      @db.Text
  user            user         @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "shift_ibfk_1")
  transaksi       transaksi[]

  @@index([kode], map: "idx_shift_kode")
  @@index([user_id], map: "idx_shift_user")
}

model stok_batch {
  id               Int                @id @default(autoincrement())
  produk_id        Int
  batch_no         String?            @db.VarChar(50)
  qty_masuk        Decimal            @db.Decimal(12, 2)
  qty_sisa         Decimal            @db.Decimal(12, 2)
  harga_beli       Decimal            @db.Decimal(15, 2)
  expired_date     DateTime?          @db.Date
  supplier_id      Int?
  catatan          String?            @db.Text
  created_at       DateTime           @default(now()) @db.DateTime(0)
  produk           produk             @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_batch_ibfk_1")
  supplier         supplier?          @relation(fields: [supplier_id], references: [id], onUpdate: NoAction, map: "stok_batch_ibfk_2")
  stok_log         stok_log[]
  transaksi_detail transaksi_detail[]

  @@index([expired_date], map: "idx_batch_expired")
  @@index([produk_id], map: "idx_batch_produk")
  @@index([supplier_id], map: "idx_batch_supplier")
}

model stok_log {
  id           Int           @id @default(autoincrement())
  produk_id    Int
  batch_id     Int?
  tipe         stok_log_tipe
  qty          Decimal       @db.Decimal(12, 2)
  stok_sebelum Decimal       @db.Decimal(12, 2)
  stok_sesudah Decimal       @db.Decimal(12, 2)
  referensi    String?       @db.VarChar(50)
  user_id      Int?
  catatan      String?       @db.Text
  created_at   DateTime      @default(now()) @db.DateTime(0)
  stok_batch   stok_batch?   @relation(fields: [batch_id], references: [id], onUpdate: NoAction, map: "stok_log_ibfk_1")
  produk       produk        @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_log_ibfk_2")
  user         user?         @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "stok_log_ibfk_3")

  @@index([batch_id], map: "batch_id")
  @@index([created_at], map: "idx_stoklog_date")
  @@index([produk_id], map: "idx_stoklog_produk")
  @@index([tipe], map: "idx_stoklog_tipe")
  @@index([user_id], map: "user_id")
}

model stok_opname {
  id          Int                @id @default(autoincrement())
  produk_id   Int
  user_id     Int
  stok_sistem Decimal            @db.Decimal(12, 2)
  stok_fisik  Decimal            @db.Decimal(12, 2)
  selisih     Decimal            @db.Decimal(12, 2)
  alasan      String?            @db.VarChar(255)
  status      stok_opname_status @default(draft)
  created_at  DateTime           @default(now()) @db.DateTime(0)
  produk      produk             @relation(fields: [produk_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "stok_opname_ibfk_1")
  user        user               @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "stok_opname_ibfk_2")

  @@index([produk_id], map: "idx_opname_produk")
  @@index([status], map: "idx_opname_status")
  @@index([user_id], map: "idx_opname_user")
}

model supplier {
  id         Int          @id @default(autoincrement())
  nama       String       @db.VarChar(200)
  kontak     String?      @db.VarChar(100)
  nomor_hp   String?      @db.VarChar(20)
  alamat     String?      @db.Text
  hutang     Decimal      @default(0.00) @db.Decimal(15, 2)
  aktif      Int          @default(1) @db.SmallInt
  created_at DateTime     @default(now()) @db.DateTime(0)
  updated_at DateTime     @default(now()) @db.DateTime(0)
  deleted_at DateTime?    @db.DateTime(0)
  produk     produk[]
  stok_batch stok_batch[]

  @@index([nama], map: "idx_pemasok_nama")
}

model transaksi {
  id               Int                @id @default(autoincrement())
  no_transaksi     String             @unique(map: "no_transaksi") @db.VarChar(30)
  shift_id         Int
  user_id          Int
  member_id        Int?
  tanggal          DateTime           @db.Date
  waktu            DateTime           @db.Time(0)
  subtotal         Decimal            @db.Decimal(15, 2)
  diskon_total     Decimal            @default(0.00) @db.Decimal(15, 2)
  diskon_member    Decimal            @default(0.00) @db.Decimal(15, 2)
  pajak            Decimal            @default(0.00) @db.Decimal(15, 2)
  total            Decimal            @db.Decimal(15, 2)
  bayar            Decimal            @default(0.00) @db.Decimal(15, 2)
  kembalian        Decimal            @default(0.00) @db.Decimal(15, 2)
  status           transaksi_status   @default(lunas)
  is_synced        Int                @default(0) @db.SmallInt
  sync_at          DateTime?          @db.DateTime(0)
  local_id         String?            @db.VarChar(50)
  catatan          String?            @db.Text
  created_at       DateTime           @default(now()) @db.DateTime(0)
  deleted_at       DateTime?          @db.DateTime(0)
  bon              bon[]
  pembayaran       pembayaran[]
  member           member?            @relation(fields: [member_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_1")
  shift            shift              @relation(fields: [shift_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_2")
  user             user               @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "transaksi_ibfk_3")
  transaksi_detail transaksi_detail[]
  transaksi_retur  transaksi_retur[]

  @@index([member_id], map: "idx_transaksi_member")
  @@index([no_transaksi], map: "idx_transaksi_no")
  @@index([shift_id], map: "idx_transaksi_shift")
  @@index([tanggal], map: "idx_transaksi_tanggal")
  @@index([user_id], map: "idx_transaksi_user")
}

model transaksi_detail {
  id           Int         @id @default(autoincrement())
  transaksi_id Int
  produk_id    Int
  nama_produk  String      @db.VarChar(200)
  qty          Decimal     @db.Decimal(10, 2)
  satuan       String      @db.VarChar(20)
  harga_satuan Decimal     @db.Decimal(15, 2)
  diskon_item  Decimal     @default(0.00) @db.Decimal(15, 2)
  subtotal     Decimal     @db.Decimal(15, 2)
  diskon_id    Int?
  batch_id     Int?
  created_at   DateTime    @default(now()) @db.DateTime(0)
  stok_batch   stok_batch? @relation(fields: [batch_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_1")
  diskon       diskon?     @relation(fields: [diskon_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_2")
  produk       produk      @relation(fields: [produk_id], references: [id], onUpdate: NoAction, map: "transaksi_detail_ibfk_3")
  transaksi    transaksi   @relation(fields: [transaksi_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "transaksi_detail_ibfk_4")

  @@index([batch_id], map: "batch_id")
  @@index([diskon_id], map: "diskon_id")
  @@index([produk_id], map: "idx_detail_produk")
  @@index([transaksi_id], map: "idx_detail_transaksi")
}

model transaksi_retur {
  id              Int                  @id @default(autoincrement())
  transaksi_id    Int
  no_retur        String               @unique(map: "no_retur") @db.VarChar(30)
  user_id         Int
  produk_id       Int
  qty             Decimal              @db.Decimal(10, 2)
  alasan          String               @db.VarChar(255)
  tipe            transaksi_retur_tipe
  nominal_kembali Decimal              @default(0.00) @db.Decimal(15, 2)
  stok_kembali    Int                  @default(1) @db.SmallInt
  created_at      DateTime             @default(now()) @db.DateTime(0)
  produk          produk               @relation(fields: [produk_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_1")
  transaksi       transaksi            @relation(fields: [transaksi_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_2")
  user            user                 @relation(fields: [user_id], references: [id], onUpdate: NoAction, map: "transaksi_retur_ibfk_3")

  @@index([no_retur], map: "idx_retur_no")
  @@index([produk_id], map: "idx_retur_produk")
  @@index([transaksi_id], map: "idx_retur_transaksi")
  @@index([user_id], map: "user_id")
}

model trash {
  id          Int      @id @default(autoincrement())
  entity_type String   @db.VarChar(50)
  entity_id   Int
  data        String   @db.Text
  deleted_by  Int?
  deleted_at  DateTime @default(now()) @db.DateTime(0)

  @@index([deleted_at], map: "idx_trash_date")
  @@index([entity_type, entity_id], map: "idx_trash_entity")
}

model user {
  id              Int               @id @default(autoincrement())
  nama            String            @db.VarChar(100)
  username        String            @unique(map: "username") @db.VarChar(50)
  password_hash   String            @db.VarChar(255)
  role            user_role
  nomor_hp        String?           @db.VarChar(20)
  foto_url        String?           @db.VarChar(500)
  aktif           Int               @default(1) @db.SmallInt
  created_at      DateTime          @default(now()) @db.DateTime(0)
  updated_at      DateTime          @default(now()) @db.DateTime(0)
  audit_log       audit_log[]
  bon_cicilan     bon_cicilan[]
  notifikasi      notifikasi[]
  shift           shift[]
  stok_log        stok_log[]
  stok_opname     stok_opname[]
  transaksi       transaksi[]
  transaksi_retur transaksi_retur[]

  @@index([username], map: "idx_pengguna_username")
}

model voucher {
  id             Int      @id @default(autoincrement())
  kode           String   @unique(map: "kode") @db.VarChar(50)
  diskon_id      Int
  kuota          Int      @default(1)
  terpakai       Int      @default(0)
  tgl_kadaluarsa DateTime @db.Date
  is_aktif       Int      @default(1) @db.SmallInt
  created_at     DateTime @default(now()) @db.DateTime(0)
  diskon         diskon   @relation(fields: [diskon_id], references: [id], onDelete: Cascade, onUpdate: NoAction, map: "voucher_ibfk_1")

  @@index([diskon_id], map: "idx_voucher_diskon")
  @@index([kode], map: "idx_voucher_kode")
}

enum diskon_tipe {
  per_item_persen
  per_item_nominal
  total_persen
  total_nominal
  bundling
  buy_x_get_y
  member
  flash_sale
}

enum harga_tingkat_tingkat {
  ecer
  grosir
  partai
}

enum notifikasi_tipe {
  stok_rendah
  stok_habis
  expired
  bon_jatuh_tempo
  shift_tutup
  transaksi_void
  info
}

enum pembayaran_metode {
  tunai
  qris
  transfer
  bon
  voucher
}

enum bon_cicilan_metode {
  tunai
  transfer
}

enum stok_log_tipe {
  masuk
  keluar
  opname
  retur
  expired
  adjustment
}

enum user_role {
  admin
  kasir
}

enum bon_status {
  aktif
  lunas
  macet
}

enum stok_opname_status {
  draft
  approved
}

enum transaksi_retur_tipe {
  refund
  exchange
}

enum shift_status {
  buka
  tutup
}

enum transaksi_status {
  lunas
  bon
  void
}