sanksi.model.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. tanggal_terima_sanksi: Date,
  22. dokumen_terima_sanksi: [{
  23. type: Types.ObjectId,
  24. ref: dokumen,
  25. }],
  26. tanggal_akhir_keberatan: Date,
  27. aktif: { type: Boolean, default: true },
  28. step: [{ type: String, enum: ['keberatan', 'banding', 'cabut_sanksi', 'dokumen_perbaikan'] }],
  29. tuntas: {
  30. keterangan: String,
  31. dokumen: [
  32. {
  33. type: Types.ObjectId,
  34. ref: dokumen,
  35. },
  36. ],
  37. },
  38. berita_acara:
  39. {
  40. type: Types.ObjectId,
  41. ref: dokumen,
  42. },
  43. dokumen: [
  44. {
  45. type: Types.ObjectId,
  46. ref: dokumen,
  47. },
  48. ],
  49. masa_berlaku: new Schema({
  50. from_date: Date,
  51. to_date: Date,
  52. berakhir: Boolean,
  53. }),
  54. batas_waktu: {
  55. keberatan: Date,
  56. jawaban_keberatan: Date,
  57. banding: Date,
  58. jawaban_banding: Date,
  59. },
  60. jawaban: {
  61. keberatan: new Schema(
  62. {
  63. status: String,
  64. keterangan: String,
  65. no_keberatan: String,
  66. tanggal_terima_keberatan: Date,
  67. tanggal_surat_keberatan: Date,
  68. dokumen_terima_keberatan: [{
  69. type: Types.ObjectId,
  70. ref: dokumen,
  71. }],
  72. tanggal_akhir_banding: Date,
  73. dokumen: [
  74. {
  75. type: Types.ObjectId,
  76. ref: dokumen,
  77. },
  78. ],
  79. },
  80. { timestamps: true }
  81. ),
  82. banding: new Schema(
  83. {
  84. no_banding: String,
  85. tanggal_terima_banding: Date,
  86. tanggal_surat_banding: Date,
  87. dokumen_terima_banding: [{
  88. type: Types.ObjectId,
  89. ref: dokumen,
  90. }],
  91. status: String,
  92. dokumen: [
  93. {
  94. type: Types.ObjectId,
  95. ref: dokumen,
  96. },
  97. ],
  98. },
  99. { timestamps: true }
  100. ),
  101. cabut_sanksi: new Schema(
  102. {
  103. status: String,
  104. keterangan: String,
  105. dokumen: [
  106. {
  107. type: Types.ObjectId,
  108. ref: dokumen,
  109. },
  110. ],
  111. },
  112. { timestamps: true }
  113. ),
  114. },
  115. pengajuan: {
  116. keberatan: new Schema(
  117. {
  118. dokumen: [
  119. {
  120. type: Types.ObjectId,
  121. ref: dokumen,
  122. },
  123. ],
  124. },
  125. { timestamps: true }
  126. ),
  127. banding: new Schema(
  128. {
  129. dokumen: [
  130. {
  131. type: Types.ObjectId,
  132. ref: dokumen,
  133. },
  134. ],
  135. },
  136. { timestamps: true }
  137. ),
  138. cabut_sanksi: new Schema(
  139. {
  140. dokumen: [
  141. {
  142. type: Types.ObjectId,
  143. ref: dokumen,
  144. },
  145. ],
  146. },
  147. { timestamps: true }
  148. ),
  149. update_tmt: new Schema(
  150. {
  151. no_surat: String,
  152. dokumen: [
  153. {
  154. type: Types.ObjectId,
  155. ref: dokumen,
  156. },
  157. ],
  158. },
  159. { timestamps: true }
  160. ),
  161. },
  162. riwayat_sanksi: [
  163. new Schema(
  164. {
  165. no_sanksi: String,
  166. laporan: { type: Types.ObjectId, ref: laporan },
  167. user: { type: Types.ObjectId, ref: user },
  168. pelanggaran: [{ type: Types.ObjectId, ref: pelanggaran }],
  169. keterangan: String,
  170. aktif: { type: Boolean, default: true },
  171. dokumen: [
  172. {
  173. type: Types.ObjectId,
  174. ref: dokumen,
  175. },
  176. ],
  177. masa_berlaku: new Schema({
  178. from_date: Date,
  179. to_date: Date,
  180. }),
  181. perbaikan: [
  182. new Schema(
  183. {
  184. keterangan: String,
  185. dokumen: [
  186. {
  187. type: Types.ObjectId,
  188. ref: dokumen,
  189. },
  190. ],
  191. },
  192. { timestamps: true }
  193. ),
  194. ],
  195. },
  196. { timestamps: true }
  197. ),
  198. ],
  199. perbaikan: [
  200. new Schema(
  201. {
  202. keterangan: String,
  203. dokumen: [
  204. {
  205. type: Types.ObjectId,
  206. ref: dokumen,
  207. },
  208. ],
  209. },
  210. { timestamps: true }
  211. ),
  212. ],
  213. rekomendasi: [
  214. new Schema(
  215. {
  216. dokumen: [
  217. {
  218. type: Types.ObjectId,
  219. ref: dokumen,
  220. },
  221. ],
  222. },
  223. { timestamps: true }
  224. ),
  225. ],
  226. bypass_cabut_sanksi: Boolean,
  227. },
  228. { timestamps: true }
  229. ),
  230. 'sanksi'
  231. )