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, is_finalisasi: { type: Boolean, default: false }, is_cabut_sanksi: Boolean, tanggal_terima_sanksi: Date, dokumen_terima_sanksi: [{ type: Types.ObjectId, ref: dokumen }], tanggal_akhir_keberatan: Date, aktif: { type: Boolean, default: true }, step: [{ type: String, enum: ['keberatan', 'banding', 'cabut_sanksi', 'dokumen_perbaikan'] }], tuntas: { keterangan: String, dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, berita_acara: { type: Types.ObjectId, ref: dokumen }, dokumen: [ { type: Types.ObjectId, ref: dokumen } ], masa_berlaku: new Schema({ from_date: Date, to_date: Date, berakhir: Boolean }), 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( { index: { type: Number, default: 0 }, 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 }), index_perbaikan: { type: Number, default: 0 }, perbaikan: [ new Schema( { keterangan: String, index: { type: Number, default: 0 }, dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, { timestamps: true } ) ] }, { timestamps: true } ) ], riwayat_pengajuan_cabut_sanksi: [ new Schema( { index: { default: 0, type: Number }, dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, { timestamps: true } ) ], riwayat_jawaban_cabut_sanksi: [ new Schema( { index: { default: 0, type: Number }, status: String, keterangan: String, dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, { timestamps: true } ) ], index_perbaikan: { type: Number, default: 0 }, perbaikan: [ new Schema( { keterangan: String, index: { type: Number, default: 0 }, dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, { timestamps: true } ) ], rekomendasi: [ new Schema( { dokumen: [ { type: Types.ObjectId, ref: dokumen } ] }, { timestamps: true } ) ], bypass_cabut_sanksi: Boolean }, { timestamps: true } ), 'sanksi' )