sanksi.model.js 5.6 KB

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