Public
Authored by Juan Marcelo

Plataforma de Notificaciones electrónicas de Ciudadania Digital - Diagrama de Base de Datos

Diagrama de Base de Datos

Control de Roles (Rolificador)

er_rolificador

Esquemas mongo, gestion de flujo documental

Institucion

let schema = Schema({
  nombre           : { type: String, required: true },
  sigla            : { type: String, required: true },
  descripcion      : { type: String, required: true },
  codigo_portal    : { type: String, required: true },
  email            : { type: String, require: false },
  web              : { type: String, require: false },
  direccion        : { type: String, require: false },
  telefonos        : { type: Array, require: false },
  configuracion    : { type: Object, required: false },
  activo           : { type: Boolean, default: true },
  mae              : { type: String, require: false },
  fecha_nacimiento : { type: String, require: false },
});

Grupo

let Grupo = Schema({
  titulo         : { type: String, required: true },
  descripcion    : { type: String, required: false },
  institucion    : { type: ObjectId, ref: 'institucion', required: true },
  flujoPlantilla : { type: ObjectId, ref: 'flujoPlantilla' },
  activo         : { type: Boolean, default: true }
});

FlujoPlantilla

const permisos = Schema({
  documentoPlantilla       : { type: ObjectId, ref: 'documentoPlantilla', required: true },
  tituloDocumentoPlantilla : { type: String, required: true },
  tipoDocumentoPlantilla   : { type: String, required: true },
  nombreGrupo              : { type: String, default: 'SIN NOMBRE' },
  seleccionado             : { type: ObjectId, ref: 'usuario', required: false },
  grupo                    : { type: ObjectId, ref: 'grupo', required: true, index: true },
  permiso                  : { type: String, required: true },
  primario                 : { type: Boolean },
  principal                : { type: Boolean, index: true }
}, { _id: false });

const permisosArray = Schema({
  paso     : { type: String, required: true },
  permisos : [permisos]
}, { _id: false });

const extras = Schema({
  _id                      : false,
  documentoPlantilla       : { type: ObjectId, ref: 'documentoPlantilla', required: true },
  tituloDocumentoPlantilla : { type: String, required: true },
  tipoDocumentoPlantilla   : { type: String, required: true },
  grupo                    : { type: ObjectId, ref: 'grupo', required: true },
  permiso                  : { type: String, required: true }
}, { _id: false });

const extrasArray = Schema({
  paso     : { type: String, required: true },
  permisos : [extras]
}, { _id: false });

const temporizador = Schema({
  paso      : { type: String, required: true },
  tiempo    : { type: String, required: true },
  paso_ir   : { type: String },
  notificar : { type: Boolean }
}, { _id: false });

const acciones = Schema({
  _id    : false,
  paso   : { type: String, required: true },
  accion : { type: Array, required: true }
}, { _id: false });

const siguientes = Schema({
  paso    : { type: String, required: true },
  derivar : {
    tipo  : { type: String, required: true },
    grupo : { type: ObjectId, ref: 'grupo', required: true }
  },
  documento_titulo: { type: String, required: true }
}, { _id: false });

const observaciones = Schema({
  paso             : { type: String, required: true },
  documento_titulo : { type: String, required: true }
}, { _id: false });

const pasos = Schema({
  paso                   : { type: String, required: true },
  tipoDocumentoPlantilla : { type: String, required: true },
  grupoEnvio             : { type: ObjectId, ref: 'grupo', required: false },
  seleccionado           : { type: ObjectId, ref: 'usuario', required: false },
  sig                    : [siguientes],
  obs                    : [observaciones]
}, { _id: false });

const FlujoPlantilla = Schema({
  titulo                      : { type: String, required: true },
  checksum                    : { type: String },
  descripcion                 : { type: String },
  nombreInstitucion           : { type: String },
  institucion                 : { type: ObjectId, ref: 'institucion', required: true },
  version                     : { type: Number, default: 0, required: true },
  permisos                    : [permisosArray],
  extras                      : [extrasArray],
  temporizador                : [temporizador],
  acciones                    : [acciones],
  pasos                       : [pasos],
  derivar                     : { type: Number, default: 1 },
  template                    : { type: Object },
  decision                    : { type: Array, required: true },
  vigencia                    : { type: Object, required: true },
  activo                      : { type: Boolean, default: false, required: true },
  publicado                   : { type: Boolean, default: false, required: true },
  notificaciones              : { type: Array, required: false },
  generados_desde_iteraciones : { type: Object, required: false },
  accionesConectoras          : { type: Array, required: false }
});

Flujo

const expediente = Schema({
  documento                : { type: ObjectId, ref: 'documento', required: true },
  documentoPlantilla       : { type: ObjectId, ref: 'documentoPlantilla', required: true },
  tituloDocumentoPlantilla : { type: String, required: true },
  tipoDocumentoPlantilla   : { type: String }
}, { _id: false });

const historial = Schema({
  paso       : { type: String, required: true, index: true },
  seleccion  : { type: String, required: true, index: true },
  grupo      : { type: String },
  firmado    : { type: Boolean },
  tituloPaso : { type: String },
  profile    : { type: Object, required: true },
  documento  : { type: ObjectId, ref: 'documento', required: true },
  estado     : { type: String, required: true },
  motivo     : { type: String },
  fechaEnvio : { type: Date, default: Date.now, required: true }
}, { _id: false });

let Flujo = extend(FlujoPlantilla.schemaBase, {
  solicitante         : { type: String, required: true, index: true },
  idInstancia         : { type: String, required: true, index: true },
  codigoInstancia     : { type: String, index: true },
  nombreFlujo         : { type: String, index: true },
  entity              : { type: String, required: true },
  flujoPlantilla      : { type: ObjectId, ref: 'flujoPlantilla', required: true, index: true },
  paso_actual         : { type: String, default: 'p0', required: true,  index: true },
  accion_actual       : { type: String, default: 'inicio', index: true },
  motivo_finalizacion : { type: String },
  seleccion           : { type: String, default: '', index: true },
  creador             : { type: String, default: '', index: true },
  reporte             : { type: Object, index: true },
  datosBaja           : { type: Object, index: true },
  fecha_finalizacion  : { type: Date },
  fecha_paso_actual   : { type: Date },
  historial           : [historial],
  idMasivo            : { type: String, index: true },
  observacion         : {
    descripcion : { type: String },
    tipo        : { type: String },
    paso        : { type: String }
  },
  expediente : [expediente],
  tareas     : { type: Array, required: false },
  estado     : {
    migrado : { type: Boolean, required: false, index: true, default: false },
    flujo   : {
      creacion : { type: Boolean, default: false, required: true, index: true },
      alta     : { type: Boolean, default: false, required: true, index: true },
      baja     : { type: Boolean, default: false, required: true, index: true }
    },
    instancia: {
      creacion : { type: Boolean, required: false, index: true },
      alta     : { type: Boolean, required: false, index: true },
      baja     : { type: Boolean, required: false, index: true }
    }
  },
  notificaciones             : { type: Array, required: false },
  generado_desde_iteraciones : { type: Object, required: false }
});

DocumentoPlantilla

let DocumentoPlantilla = Schema({
  titulo          : { type: String, required: true },
  checksum        : { type: String },
  version         : { type: Number, default: 0, required: true },
  tipo            : { type: String, default: 'F', required: true }, // Formulario, Interoperabilidad, Pagos, Derivacion
  comportamiento  : { type: String, default: 'N', required: true }, // Formulario, Interoperabilidad, Pagos, Derivacion
  recuperacion    : { type: String, default: 'ultimo' }, // Formulario, Interoperabilidad, Pagos, Derivacion
  vigencia        : { type: Object },
  tipoComponentes : { type: String, default: 'D', required: true }, // puede tomar los valores de R, D.
  uso             : { type: Boolean, default: false, required: true }, // indica cuando un documentoPlantilla de tipo R ya fue usado o no.
  cite            : {
    gestion     : { type: String, default: (new Date()).getFullYear(), required: true },
    correlativo : { type: String, default: 0, required: true },
    codigo      : { type: String, default: 'AGETIC/CODIGO', required: true }
  },
  body        : { type: Object, required: true },                // Cuando no aplique ni componentes, ni validacion, ni posicion
  publicado   : { type: Boolean, default: false, required: true },
  institucion : { type: ObjectId, ref: 'institucion', required: true },
  metadata    : { type: Object },
  tags        : { type: Array, index: true }
});

Documento

let Documento = Schema({
  flujo           : { type: ObjectId, ref: 'flujo' },
  tipo            : { type: String },
  estadoDocumento : {
    creacion : { type: Boolean, default: false, required: true, index: true },
    alta     : { type: Boolean, default: false, required: true, index: true },
    baja     : { type: Boolean, default: false, required: true, index: true }
  },
  observaciones              : { type: Array, default: [] },
  idInstancia                : { type: String, index: true },
  codigoInstancia            : { type: String, index: true },
  estado                     : { type: String, default: 'CREATED', required: true, index: true },
  modificacion               : { type: Object, default: [] },
  tituloDocumento            : { type: String },
  tipoComponentes            : { type: String },
  solicitante                : { type: String, index: true, default: '' },
  entity                     : { type: String, default: '' },
  creador                    : { type: String, index: true, default: '' },
  vigencia                   : { type: Object },
  codigoDocumento            : { type: String, index: true },
  cite                       : { type: String, index: true },
  datosBaja                  : { type: Object, index: true },
  documentoPlantilla         : { type: ObjectId, ref: 'documentoPlantilla' },
  firmado                    : { type: Boolean, default: false, required: true },
  documento_firmado          : { type: String },
  extras                     : { type: Array, required: true },
  valores                    : { type: Object, required: true },
  layout_fixed               : { type: Object, required: true },
  signed                     : { type: Boolean, default: false, required: true },
  filename                   : { type: String },
  historial                  : { type: Object },
  uuidBlockchain             : { type: String },
  generado_desde_iteraciones : { type: Boolean, required: false },
  timestamp                  : { type: String }
});

Plugins

let Plugins = Schema({
  nombre          : { type: String, required: true },
  descripcion     : { type: String, default: '' },
  avatar          : { type: String, default: '' },
  version         : { type: String, required: true, default: '1.0' },
  html            : { type: String, required: true, default: '/' },
  pdf             : { type: String, required: true, default: '/' },
  data            : { type: String, required: true, default: '/' },
  configuraciones : { type: Schema.Types.Mixed },
  urlValidacion   : { type: String, default: null },
  urlGuardado     : { type: String, default: null },
  urlBase         : { type: String, default: null },
  headers         : { type: Schema.Types.Mixed },
  tipo            : { type: String, default: 'simple' },
  author          : { type: String, default: '' },
  validacion      : { type: String, default: 'simple' },
  estado          : { type: String, required: true, default: 'ACTIVO' },
  component       : { type: Schema.Types.Mixed },
  institucion     : [{ type: ObjectId, ref: 'institucion', required: true }]
});

Permisos (Vista)

let Permisos = Schema({
  paso                     : { type: String, required: true },
  paso_actual              : { type: String, required: true },
  flujo                    : { type: ObjectId, ref: 'flujo' },
  flujoPlantilla           : { type: ObjectId, ref: 'flujoPlantilla' },
  seleccionado             : { type: ObjectId, ref: 'usuario' },
  grupo                    : { type: ObjectId, ref: 'grupo' },
  documentoPlantilla       : { type: ObjectId, ref: 'documentoPlantilla' },
  tituloDocumentoPlantilla : { type: String, required: true },
  tipoDocumentoPlantilla   : { type: String, required: true },
  observacion              : { type: Object },
  createAt                 : { type: Date },
  updateAt                 : { type: Date },
  permiso                  : { type: String },
  nombreGrupo              : { type: String },
  nombreFlujo              : { type: String },
  primario                 : { type: Boolean },
  solicitante              : { type: String },
  entity                   : { type: String },
  seleccion                : { type: String },
  accion_actual            : { type: String },
  lectura                  : { type: String },
  escritura                : { type: String },
  anulacion                : { type: String },
  principal                : { type: Boolean },
  titulo                   : { type: String },
  deleted                  : { type: Boolean, default: false }
});

Acciones (Vista)

let Acciones = Schema({
  titulo                 : { type: String },
  accion_actual          : { type: String, required: true },
  seleccion              : { type: String, required: true },
  paso_actual            : { type: String, required: true },
  tipoDocumentoPlantilla : { type: String, required: true },
  principal              : { type: ObjectId, ref: 'grupo' },
  lista_acciones         : { type: Array, required: true },
  accion                 : { type: Object, required: true },
  deleted                : { type: Boolean, default: false }
});

Pasos (Vista)

const siguientes = Schema({
  derivar: {
    tipo  : { type: String },
    grupo : { type: ObjectId, ref: 'grupo' }
  },
  _id              : false,
  paso             : { type: String },
  documento_titulo : { type: String }
}, { _id: false });

const observaciones = Schema({
  _id              : false,
  paso             : { type: String },
  documento_titulo : { type: String }
}, { _id: false });

let Pasos = Schema({
  seleccion              : { type: String },
  tipoDocumentoPlantilla : { type: String },
  paso_actual            : { type: String },
  deleted                : { type: Boolean, default: false },
  siguientes             : [siguientes],
  observacion            : [observaciones],
  grupo_envio            : { type: ObjectId, ref: 'grupo' }
});
Edited
1 Byte
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment