sanksi.model.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  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. index_perpanjangan: {
  199. type: Number,
  200. default: 0
  201. },
  202. perbaikan: [
  203. new Schema(
  204. {
  205. keterangan: String,
  206. index: {
  207. type: Number,
  208. default: 0
  209. },
  210. dokumen: [
  211. {
  212. type: Types.ObjectId,
  213. ref: dokumen
  214. }
  215. ]
  216. },
  217. { timestamps: true }
  218. )
  219. ]
  220. },
  221. { timestamps: true }
  222. )
  223. ],
  224. riwayat_perpanjangan_sanksi: [
  225. new Schema(
  226. {
  227. masa_berlaku: new Schema({
  228. from_date: Date,
  229. to_date: Date
  230. }),
  231. index: {
  232. type: Number,
  233. default: 0
  234. },
  235. dokumen: [
  236. {
  237. type: Types.ObjectId,
  238. ref: dokumen
  239. }
  240. ]
  241. },
  242. { timestamps: true }
  243. )
  244. ],
  245. riwayat_pengajuan_cabut_sanksi: [
  246. new Schema(
  247. {
  248. index: {
  249. default: 0,
  250. type: Number
  251. },
  252. dokumen: [
  253. {
  254. type: Types.ObjectId,
  255. ref: dokumen
  256. }
  257. ]
  258. },
  259. { timestamps: true }
  260. )
  261. ],
  262. riwayat_jawaban_cabut_sanksi: [
  263. new Schema(
  264. {
  265. index: {
  266. default: 0,
  267. type: Number
  268. },
  269. status: String,
  270. keterangan: String,
  271. dokumen: [
  272. {
  273. type: Types.ObjectId,
  274. ref: dokumen
  275. }
  276. ]
  277. },
  278. { timestamps: true }
  279. )
  280. ],
  281. index_perbaikan: {
  282. type: Number,
  283. default: 0
  284. },
  285. perbaikan: [
  286. new Schema(
  287. {
  288. keterangan: String,
  289. index: {
  290. type: Number,
  291. default: 0
  292. },
  293. dokumen: [
  294. {
  295. type: Types.ObjectId,
  296. ref: dokumen
  297. }
  298. ]
  299. },
  300. { timestamps: true }
  301. )
  302. ],
  303. rekomendasi: [
  304. new Schema(
  305. {
  306. dokumen: [
  307. {
  308. type: Types.ObjectId,
  309. ref: dokumen
  310. }
  311. ]
  312. },
  313. { timestamps: true }
  314. )
  315. ],
  316. bypass_cabut_sanksi: Boolean
  317. },
  318. { timestamps: true }
  319. ),
  320. 'sanksi'
  321. )