sanksi.model.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. const mongoose = require('mongoose')
  2. const { Schema, Types } = mongoose
  3. const dokumen = require('./dokumen.model')
  4. const laporan = require('./laporan.model')
  5. const user = require('./user.model')
  6. const pelanggaran = require('./pelanggaran.model')
  7. module.exports = mongoose.model(
  8. 'Sanksi',
  9. new Schema(
  10. {
  11. no_sanksi: String,
  12. laporan: { type: Types.ObjectId, unique: true, ref: laporan },
  13. user: { type: Types.ObjectId, ref: user },
  14. sanksi: [{ description: String, label: String, level: Number }],
  15. pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
  16. keterangan: String,
  17. is_read: Boolean,
  18. last_step: String,
  19. levelSanksi: Number,
  20. is_pengajuan_keberatan: Boolean,
  21. is_pengajuan_banding: Boolean,
  22. is_finalisasi: { type: Boolean, default: false },
  23. is_cabut_sanksi: Boolean,
  24. tanggal_terima_sanksi: Date,
  25. dokumen_terima_sanksi: [{
  26. type: Types.ObjectId,
  27. ref: dokumen
  28. }],
  29. tanggal_akhir_keberatan: Date,
  30. aktif: { type: Boolean, default: true },
  31. step: [{ type: String, enum: ['keberatan', 'banding', 'cabut_sanksi', 'dokumen_perbaikan'] }],
  32. tuntas: {
  33. keterangan: String,
  34. dokumen: [
  35. {
  36. type: Types.ObjectId,
  37. ref: dokumen
  38. }
  39. ]
  40. },
  41. berita_acara:
  42. {
  43. type: Types.ObjectId,
  44. ref: dokumen
  45. },
  46. dokumen: [
  47. {
  48. type: Types.ObjectId,
  49. ref: dokumen
  50. }
  51. ],
  52. masa_berlaku: new Schema({
  53. from_date: Date,
  54. to_date: Date,
  55. berakhir: Boolean
  56. }),
  57. batas_waktu: {
  58. keberatan: Date,
  59. jawaban_keberatan: Date,
  60. banding: Date,
  61. jawaban_banding: Date
  62. },
  63. jawaban: {
  64. keberatan: new Schema(
  65. {
  66. status: String,
  67. keterangan: String,
  68. no_keberatan: String,
  69. tanggal_terima_keberatan: Date,
  70. tanggal_surat_keberatan: Date,
  71. dokumen_terima_keberatan: [{
  72. type: Types.ObjectId,
  73. ref: dokumen
  74. }],
  75. tanggal_akhir_banding: Date,
  76. dokumen: [
  77. {
  78. type: Types.ObjectId,
  79. ref: dokumen
  80. }
  81. ]
  82. },
  83. { timestamps: true }
  84. ),
  85. banding: new Schema(
  86. {
  87. no_banding: String,
  88. tanggal_terima_banding: Date,
  89. tanggal_surat_banding: Date,
  90. dokumen_terima_banding: [{
  91. type: Types.ObjectId,
  92. ref: dokumen
  93. }],
  94. status: String,
  95. dokumen: [
  96. {
  97. type: Types.ObjectId,
  98. ref: dokumen
  99. }
  100. ]
  101. },
  102. { timestamps: true }
  103. ),
  104. cabut_sanksi: new Schema(
  105. {
  106. index: {
  107. type: Number,
  108. default: 0
  109. },
  110. status: String,
  111. keterangan: String,
  112. dokumen: [
  113. {
  114. type: Types.ObjectId,
  115. ref: dokumen
  116. }
  117. ]
  118. },
  119. { timestamps: true }
  120. )
  121. },
  122. pengajuan: {
  123. keberatan: new Schema(
  124. {
  125. dokumen: [
  126. {
  127. type: Types.ObjectId,
  128. ref: dokumen
  129. }
  130. ]
  131. },
  132. { timestamps: true }
  133. ),
  134. banding: new Schema(
  135. {
  136. dokumen: [
  137. {
  138. type: Types.ObjectId,
  139. ref: dokumen
  140. }
  141. ]
  142. },
  143. { timestamps: true }
  144. ),
  145. cabut_sanksi: new Schema(
  146. {
  147. dokumen_rekomendasi: [
  148. {
  149. type: Types.ObjectId,
  150. ref: dokumen
  151. }
  152. ],
  153. dokumen: [
  154. {
  155. type: Types.ObjectId,
  156. ref: dokumen
  157. }
  158. ]
  159. },
  160. { timestamps: true }
  161. ),
  162. update_tmt: new Schema(
  163. {
  164. no_surat: String,
  165. dokumen: [
  166. {
  167. type: Types.ObjectId,
  168. ref: dokumen
  169. }
  170. ]
  171. },
  172. { timestamps: true }
  173. )
  174. },
  175. riwayat_sanksi: [
  176. new Schema(
  177. {
  178. no_sanksi: String,
  179. laporan: { type: Types.ObjectId, ref: laporan },
  180. user: { type: Types.ObjectId, ref: user },
  181. pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
  182. keterangan: String,
  183. aktif: { type: Boolean, default: true },
  184. dokumen: [
  185. {
  186. type: Types.ObjectId,
  187. ref: dokumen
  188. }
  189. ],
  190. masa_berlaku: new Schema({
  191. from_date: Date,
  192. to_date: Date
  193. }),
  194. index_perbaikan: {
  195. type: Number,
  196. default: 0
  197. },
  198. perbaikan: [
  199. new Schema(
  200. {
  201. keterangan: String,
  202. index: {
  203. type: Number,
  204. default: 0
  205. },
  206. dokumen: [
  207. {
  208. type: Types.ObjectId,
  209. ref: dokumen
  210. }
  211. ]
  212. },
  213. { timestamps: true }
  214. )
  215. ]
  216. },
  217. { timestamps: true }
  218. )
  219. ],
  220. riwayat_pengajuan_cabut_sanksi: [
  221. new Schema(
  222. {
  223. index: {
  224. default: 0,
  225. type: Number
  226. },
  227. dokumen: [
  228. {
  229. type: Types.ObjectId,
  230. ref: dokumen
  231. }
  232. ]
  233. },
  234. { timestamps: true }
  235. )
  236. ],
  237. riwayat_jawaban_cabut_sanksi: [
  238. new Schema(
  239. {
  240. index: {
  241. default: 0,
  242. type: Number
  243. },
  244. status: String,
  245. keterangan: String,
  246. dokumen: [
  247. {
  248. type: Types.ObjectId,
  249. ref: dokumen
  250. }
  251. ]
  252. },
  253. { timestamps: true }
  254. )
  255. ],
  256. index_perbaikan: {
  257. type: Number,
  258. default: 0
  259. },
  260. perbaikan: [
  261. new Schema(
  262. {
  263. keterangan: String,
  264. index: {
  265. type: Number,
  266. default: 0
  267. },
  268. dokumen: [
  269. {
  270. type: Types.ObjectId,
  271. ref: dokumen
  272. }
  273. ]
  274. },
  275. { timestamps: true }
  276. )
  277. ],
  278. rekomendasi: [
  279. new Schema(
  280. {
  281. dokumen: [
  282. {
  283. type: Types.ObjectId,
  284. ref: dokumen
  285. }
  286. ]
  287. },
  288. { timestamps: true }
  289. )
  290. ],
  291. bypass_cabut_sanksi: Boolean
  292. },
  293. { timestamps: true }
  294. ),
  295. 'sanksi'
  296. )