Plataforma de Notificaciones electrónicas de Ciudadania Digital - Diagrama de Base de Datos
Diagrama de Base de Datos
Control de Roles (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' }
});
Please register or sign in to comment