const mongoose = require('mongoose') const { Schema, Types } = mongoose const dokumen = require('./dokumen.model') const laporan = require('./laporan.model') const user = require('./user.model') const pelanggaran = require('./pelanggaran.model') module.exports = mongoose.model( 'Sanksi', new Schema( { no_sanksi: String, laporan: { type: Types.ObjectId, unique: true, ref: laporan }, user: { type: Types.ObjectId, ref: user }, sanksi: [{ description: String, label: String, level: Number }], pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }], keterangan: String, is_read: Boolean, last_step: String, is_pengajuan_keberatan: Boolean, is_pengajuan_banding: Boolean, tanggal_terima_sanksi: Date, dokumen_terima_sanksi: [{ type: Types.ObjectId, ref: dokumen, }], tanggal_akhir_keberatan: Date, aktif: { type: Boolean, default: true }, berita_acara: { type: Types.ObjectId, ref: dokumen, }, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], masa_berlaku: new Schema({ from_date: Date, to_date: Date, }), batas_waktu: { keberatan: Date, jawaban_keberatan: Date, banding: Date, jawaban_banding: Date, }, jawaban: { keberatan: new Schema( { status: String, keterangan: String, no_keberatan: String, tanggal_terima_keberatan: Date, tanggal_surat_keberatan: Date, dokumen_terima_keberatan: [{ type: Types.ObjectId, ref: dokumen, }], tanggal_akhir_banding: Date, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), banding: new Schema( { no_banding: String, tanggal_terima_banding: Date, tanggal_surat_banding: Date, dokumen_terima_banding: [{ type: Types.ObjectId, ref: dokumen, }], status: String, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), cabut_sanksi: new Schema( { status: String, keterangan: String, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), }, pengajuan: { keberatan: new Schema( { dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), banding: new Schema( { dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), cabut_sanksi: new Schema( { dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), update_tmt: new Schema( { no_surat: String, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), }, riwayat_sanksi: [ new Schema( { no_sanksi: String, laporan: { type: Types.ObjectId, ref: laporan }, user: { type: Types.ObjectId, ref: user }, pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }], keterangan: String, aktif: { type: Boolean, default: true }, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], masa_berlaku: new Schema({ from_date: Date, to_date: Date, }), perbaikan: [ new Schema( { keterangan: String, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), ], }, { timestamps: true } ), ], perbaikan: [ new Schema( { keterangan: String, dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), ], rekomendasi: [ new Schema( { dokumen: [ { type: Types.ObjectId, ref: dokumen, }, ], }, { timestamps: true } ), ], }, { timestamps: true } ), 'sanksi' )