sanksi.model.js 6.9 KB

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