Exemple #1
0
        public string formarCadenaRegla(Regla regla)
        {
            string retorno = "";

            retorno += "SI ";

            string[] antecedentes = regla.listarAntecedentes();
            string[] consecuentes = regla.listarConsecuentes();

            for (int i = 0; i < antecedentes.Length; i++)
            {
                if (i != 0)
                {
                    retorno += " Y ";
                }
                Hecho hecho = base_conocimiento.leerHecho(antecedentes[i]);
                retorno += hecho.hecho;
            }

            retorno += " ENTONCES ";
            for (int i = 0; i < consecuentes.Length; i++)
            {
                if (i != 0)
                {
                    retorno += " Y ";
                }
                Hecho hecho = base_conocimiento.leerHecho(consecuentes[i]);
                retorno += hecho.hecho;
            }
            return(retorno);
        }
Exemple #2
0
        public HechoAdapter(Hecho hecho)
        {
            this.EntHechoCheckun = new EntHechoCheckun
            {
                idTaxonomia             = hecho.Taxonomia,
                idEntidad               = hecho.Entidad.Nombre,
                espaciodeNombresEntidad = hecho.Entidad.Esquema,
                espacioNombresPrincipal = hecho.Taxonomia,
                codigoHashRegistro      = hecho.IdHecho,
                tipoDato           = hecho.Concepto.TipoDato,
                esTipoDatoNumerico = hecho.EsNumerico,
                valor              = hecho.Valor,
                valorRedondeado    = hecho.ValorNumerico.ToString(),
                esValorChunks      = hecho.EsValorChunks,
                decimales          = hecho.Decimales,
                esTipoDatoFraccion = hecho.EsFraccion,
                esValorNil         = hecho.EsValorNil,
                concepto           = new ConceptoAdapter(hecho.Concepto).EntConcepto,
                periodo            = new PeriodoAdapter(hecho.Periodo).EntPeriodo,
                unidades           = new UnidadAdapter(hecho.Unidad).EntUnidades,
                dimension          = AdaptarDimensionesEntity(hecho.MiembrosDimensionales)
            };

            this.EntHechoCheckun.concepto.EspacioNombresTaxonomia = hecho.Taxonomia;
        }
        /// <summary>
        /// Escribe en el reporte la sección de datos generales de la emisora.
        /// </summary>
        /// <param name="sheet">Hoja en la cual se escribirán los datos.</param>
        /// <param name="hechos">Listado de hechos de reporte anual.</param>
        public static void EscribirDatosGeneralesReporteCalculoMaterialidad(ISheet sheet, List <Hecho> hechos, IDictionary <String, object> parametrosReporte, IDictionary <String, object> datosReporte)
        {
            Hecho hechoNombreEmisora   = null;
            Hecho hechoTipoInstrumento = null;

            if (hechos != null)
            {
                hechoNombreEmisora = hechos.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NameOfTheIssuer")) != null?hechos.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NameOfTheIssuer")) : null;

                hechoTipoInstrumento = hechos.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_TypeOfInstrument")) != null?hechos.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_TypeOfInstrument")) : null;
            }

            if (hechoNombreEmisora != null)
            {
                sheet.GetRow(2).GetCell(1).SetCellValue(ReporteUtil.removeTextHTML(hechoNombreEmisora.Valor));
                sheet.GetRow(3).GetCell(1).SetCellValue(hechoNombreEmisora.Entidad.Nombre);
            }
            else
            {
                object claveEmisora       = "";
                object razonSocialEmpresa = "";
                datosReporte.TryGetValue("nombreCompletoEmpresa", out razonSocialEmpresa);
                parametrosReporte.TryGetValue("'Entidad.Nombre'", out claveEmisora);
                sheet.GetRow(2).GetCell(1).SetCellValue(razonSocialEmpresa != null ? razonSocialEmpresa.ToString() : "");
                sheet.GetRow(3).GetCell(1).SetCellValue(claveEmisora != null ? claveEmisora.ToString().Replace("'", "") : "");
            }

            if (hechoTipoInstrumento != null)
            {
                sheet.GetRow(4).GetCell(1).SetCellValue(hechoTipoInstrumento.Valor);
            }
            else
            {
                object tipoDeInstrumento = "";
                datosReporte.TryGetValue("datoTipoDeInstumento", out tipoDeInstrumento);
                sheet.GetRow(4).GetCell(1).SetCellValue(tipoDeInstrumento != null ? tipoDeInstrumento.ToString() : "");
            }

            object noticia          = new object();
            object fecha            = new object();
            object moneda           = new object();
            object montoDeOperacion = new object();
            object tipoDeCambio     = new object();

            datosReporte.TryGetValue("datoNoticia", out noticia);
            datosReporte.TryGetValue("datoFecha", out fecha);
            datosReporte.TryGetValue("datoMoneda", out moneda);
            datosReporte.TryGetValue("datoMontoDeOperacion", out montoDeOperacion);
            datosReporte.TryGetValue("datoTipoDeCambio", out tipoDeCambio);

            sheet.GetRow(6).GetCell(1).SetCellValue(noticia != null ? noticia.ToString() : "");
            sheet.GetRow(9).GetCell(1).SetCellValue(fecha != null ? fecha.ToString() : "");

            sheet.GetRow(11).GetCell(1).SetCellValue(montoDeOperacion != null ? Convert.ToDouble(montoDeOperacion) : double.NaN);
            sheet.GetRow(11).GetCell(2).SetCellValue(moneda != null ? moneda.ToString() : "");
            sheet.GetRow(12).GetCell(1).SetCellValue(tipoDeCambio != null ? Convert.ToDouble(tipoDeCambio) : double.NaN);
        }
        /// <summary>
        /// método que comprueba la integridad de las reglas
        /// </summary>
        /// <returns>Lista de errores encontrados</returns>
        private List <string> comprobarIntegridadReglas()
        {
            List <string> errores_comprobacion = new List <string>();

            string[] reglas = this.manejador_archivos.listarArchivosEnDirectorio(AccesoDatos.REGLA);
            bool     existen_variables_de_inicio_en_los_antecedentes = false;
            bool     existen_variables_objetivo_en_el_consecuente    = false;

            for (int i = 0; i < reglas.Length; i++)
            {
                Regla regla = manejador_archivos.extraerRegla(reglas[i]);
                if (!regla.chequeo_de_consistencia)
                {
                    errores_comprobacion.Add("Regla no chequeada " + regla.id_regla + " : " + regla);
                }
                if (!regla.id_regla.Equals(reglas[i]))
                {
                    errores_comprobacion.Add("Regla corrupta (Eliminada)" + regla.id_regla + " : " + regla);
                    manejador_archivos.eliminarRegla(reglas[i]);
                }
                Hecho hecho_consecuente = manejador_archivos.extraerHecho(regla.id_hecho_consecuente);
                if (hecho_consecuente.hecho_objetivo)
                {
                    existen_variables_objetivo_en_el_consecuente = true;
                }
                if (hecho_consecuente.hecho_preguntable_al_usuario)
                {
                    errores_comprobacion.Add("Regla " + regla.id_regla + "(Consecuente preguntable al usuario) : " + regla);
                    regla.chequeo_de_consistencia = false;
                    manejador_archivos.actualizarRegla(regla);
                }
                if (!existen_variables_de_inicio_en_los_antecedentes)
                {
                    string[] antecedentes = regla.listarAntecedentes();
                    for (int k = 0; k < antecedentes.Length && !existen_variables_de_inicio_en_los_antecedentes; k++)
                    {
                        Hecho hecho_antecedente = manejador_archivos.extraerHecho(antecedentes[k]);
                        if (hecho_antecedente.hecho_preguntable_al_usuario)
                        {
                            existen_variables_de_inicio_en_los_antecedentes = true;
                        }
                    }
                }
            }
            if (leerMetadatos().tipo_de_encadenamiento == MetadatosBaseDeConocimiento.ENCADENAMIENTO_HACIA_ADELANTE &&
                !existen_variables_de_inicio_en_los_antecedentes)
            {
                errores_comprobacion.Add("No existen reglas con variables de inicio en el antecedente");
            }
            if (leerMetadatos().tipo_de_encadenamiento == MetadatosBaseDeConocimiento.ENCADENAMIENTO_HACIA_ATRAS &&
                !existen_variables_objetivo_en_el_consecuente)
            {
                errores_comprobacion.Add("No existen reglas con variables objetivo en su consecuente.");
            }
            return(errores_comprobacion);
        }
Exemple #5
0
 void ventana_selecion_de_objetivo_evento_cambio_en_seleccion_variable(string id_variable)
 {
     ventana_selecion_de_objetivo.limpiarPanelEstados();
     string[] id_hechos = motor_atras.obtenertPosibleHechosObjetivos(id_variable);
     for (int i = 0; i < id_hechos.Length; i++)
     {
         Hecho hecho = base_conocimiento.leerHecho(id_hechos[i]);
         ventana_selecion_de_objetivo.agregarOpcionPanelEstados(hecho.id_hecho, hecho + "");
     }
 }
Exemple #6
0
        private bool escribirLogEnArchivo(List <string> log, ProcesadorLogInferencia procesador, bool guardar_variables, bool guardar_hechos, bool guardar_reglas, string ruta_archivo)
        {
            StringBuilder texto_archivo = new StringBuilder();

            for (int i = 0; i < log.Count; i++)
            {
                string linea_log = procesador.ProcesarLineaDeLoggeo(log[i]);
                if (linea_log != null)
                {
                    texto_archivo.AppendLine(linea_log);
                }
            }
            if (guardar_reglas)
            {
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("-----------------------------------------------------");
                texto_archivo.AppendLine("-----------   Reglas     ----------------------------");
                texto_archivo.AppendLine("-----------------------------------------------------");
                string[] lista_de_reglas = base_conocimiento.listarReglas();
                for (int i = 0; i < lista_de_reglas.Length; i++)
                {
                    Regla regla = base_conocimiento.leerRegla(lista_de_reglas[i]);
                    texto_archivo.AppendLine("ID " + regla.id_regla + " | " + regla);
                }
            }
            if (guardar_hechos)
            {
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("-----------------------------------------------------");
                texto_archivo.AppendLine("-----------  Hechos      ----------------------------");
                texto_archivo.AppendLine("-----------------------------------------------------");
                string[] lista_de_hechos = base_conocimiento.listarHechos();
                for (int i = 0; i < lista_de_hechos.Length; i++)
                {
                    Hecho hecho = base_conocimiento.leerHecho(lista_de_hechos[i]);
                    texto_archivo.AppendLine("ID " + hecho.id_hecho + "  (ID variable " + hecho.id_variable + ") | " + hecho);
                }
            }
            if (guardar_variables)
            {
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("");
                texto_archivo.AppendLine("-----------------------------------------------------");
                texto_archivo.AppendLine("-----------  Variables   ----------------------------");
                texto_archivo.AppendLine("-----------------------------------------------------");
                string[] lista_de_variables = base_conocimiento.listarVariables();
                for (int i = 0; i < lista_de_variables.Length; i++)
                {
                    texto_archivo.AppendLine(extraerDetalleVariable(base_conocimiento.leerVariable(lista_de_variables[i])));
                }
            }
            return(generarArchivoDeTexto(texto_archivo, ruta_archivo));
        }
Exemple #7
0
        int[] motor_inferencia_evento_confimar_hecho(string id_hecho, string id_regla)
        {
            Regla    regla    = base_conocimiento.leerRegla(id_regla);
            Hecho    hecho    = base_conocimiento.leerHecho(id_hecho);
            Variable variable = base_conocimiento.leerVariable(hecho.id_variable);

            string[] lista_de_antecedentes = regla.listarAntecedentes();
            Hecho[]  hechos_antecedente    = new Hecho[lista_de_antecedentes.Length];
            for (int i = 0; i < lista_de_antecedentes.Length; i++)
            {
                hechos_antecedente[i] = base_conocimiento.leerHecho(lista_de_antecedentes[i]);
            }



            dialogo              = new FormDialogoPanel(ventana_validar_hecho);
            dialogo.FormClosing += dialogo_FormClosing;
            ventana_validar_hecho.evento_respuesta_lista += evento_ventana_respuesta_lista;
            ventana_validar_hecho.inciarConsultaHecho(id_regla, hecho, hechos_antecedente, variable.ruta_texto_descriptivo);
            dialogo.ShowDialog(ventana_padre);
            if (terminar_inferencia)
            {
                return(null);
            }
            int[] respuestas = new int[3];
            if (ventana_validar_hecho.hecho_validado)
            {
                respuestas[0] = ConstantesShell.HECHO_CONFIRMADO;
            }
            else
            {
                respuestas[0] = ConstantesShell.HECHO_DESCARTADO;
            }

            if (ventana_validar_hecho.se_soluciono_el_problema)
            {
                respuestas[1] = ConstantesShell.PROBLEMA_SOLUCIONADO;
            }
            else
            {
                respuestas[1] = ConstantesShell.PROBLEMA_NO_SOLUCIONADO;
            }

            if (ventana_validar_hecho.continuar_inferencia)
            {
                respuestas[2] = ConstantesShell.CONTINUAR_PROCESO;
            }
            else
            {
                respuestas[2] = ConstantesShell.DETENER_PROCESO;
            }
            return(respuestas);
        }
Exemple #8
0
 public void inicializarTextBox()
 {
     string[] lista_de_hechos = base_conocimiento.listarHechos();
     for (int i = 0; i < lista_de_hechos.Length; i++)
     {
         Hecho hecho = base_conocimiento.leerHecho(lista_de_hechos[i]);
         listBox_hechos.Items.Add(new ElementosListBox()
         {
             id   = hecho.id_hecho,
             info = hecho.hecho
         });
     }
 }
 public void listarHechos()
 {
     listBox_hechos.Items.Clear();
     string[] ids_hechos = base_conocimiento.listarHechos();
     for (int i = 0; i < ids_hechos.Length; i++)
     {
         Hecho           hecho    = base_conocimiento.leerHecho(ids_hechos[i]);
         ElementoListBox elemento = new ElementoListBox()
         {
             id     = hecho.id_hecho,
             nombre = hecho + ""
         };
         listBox_hechos.Items.Add(elemento);
     }
     listBox_hechos.Refresh();
 }
Exemple #10
0
        public string AgregarHechoProcesoVerbalAbreviado(CnpHechoDTO _cnpHechosDto)
        {
            Hecho cnpHechos = new Hecho();

            cnpHechos.Fecha           = _cnpHechosDto.Fecha;
            cnpHechos.MunicipioId     = _cnpHechosDto.MunicipioId;
            cnpHechos.BarrioId        = _cnpHechosDto.BarrioId;
            cnpHechos.LocalidadId     = _cnpHechosDto.LocalidadId;
            cnpHechos.DireccionHechos = _cnpHechosDto.DireccionHechos;
            //cnpHechos.IdComportamiento = _cnpHechosDto.IdComportamiento;
            cnpHechos.Apelacion    = _cnpHechosDto.Apelacion;
            cnpHechos.RelatoHechos = _cnpHechosDto.RelatoHechos;
            cnpHechos.Mop          = _cnpHechosDto.Mop;
            cnpHechos.Mrs          = _cnpHechosDto.Mrs;
            cnpHechos.Minc         = _cnpHechosDto.Minc;
            cnpHechos.Mtpp         = _cnpHechosDto.Mtpp;
            //cnpHechos.Msia = _cnpHechosDto.Msia;
            //cnpHechos.Mtppp = _cnpHechosDto.Mtppp;
            //cnpHechos.Minicoe = _cnpHechosDto.Minicoe;
            //cnpHechos.Minisoe = _cnpHechosDto.Minisoe;
            //cnpHechos.CnpArt = _cnpHechosDto.CnpArt;
            //cnpHechos.CnpNum = _cnpHechosDto.CnpNum;
            //cnpHechos.CnpLit = _cnpHechosDto.CnpLit;
            cnpHechos.Latitud  = _cnpHechosDto.Latitud;
            cnpHechos.Longitud = _cnpHechosDto.Longitud;
            //cnpHechos.IdTipoLugar = _cnpHechosDto.IdTipoLugar;
            cnpHechos.Descargos  = _cnpHechosDto.Descargos;
            cnpHechos.HoraHechos = _cnpHechosDto.HoraHechos;

            cnpHechos.AtiendeApelacion = _cnpHechosDto.AtiendeApelacion;
            //cnpHechos.IdEntidadeRemiteApelac = _cnpHechosDto.IdEntidadeRemiteApelac;
            //cnpHechos.Fuente = 1;
            //cnpHechos.IdTipoTransp = _cnpHechosDto.IdTipoTransp;

            cnpHechos.Vigente         = true;
            cnpHechos.UsuarioCreacion = HttpContext.Current.User.Identity.Name;
            cnpHechos.MaquinaCreacion = HttpContext.Current.Request.UserHostAddress;
            cnpHechos.FechaCreacion   = DateTime.Now;

            using (ContextCnp db = new ContextCnp())
            {
                cnpHechos.HechoId = Guid.NewGuid().ToString();
                db.Hecho.Add(cnpHechos);
                db.SaveChanges();
                return(cnpHechos.HechoId);
            }
        }
Exemple #11
0
        private void agregarAntecedentes(Hecho hecho)
        {
            TextBox textBox_aux = new TextBox();

            textBox_aux.Font     = new System.Drawing.Font("Microsoft Sans Serif", 12F);
            textBox_aux.Location = new System.Drawing.Point(x_inicial, ultimo_y);
            textBox_aux.Name     = "textBox";
            textBox_aux.ReadOnly = true;
            textBox_aux.Size     = new System.Drawing.Size(390, 26);
            textBox_aux.TabIndex = 16;
            textBox_aux.Text     = "" + hecho;
            ultimo_y            += espacio_control;
            lista_de_antecedentes.Add(textBox_aux);
            this.panel_antecedentes_int.Controls.Add(textBox_aux);
            this.panel_antecedentes_int.Size = new System.Drawing.Size(400, ultimo_y);
            /**/
        }
Exemple #12
0
 /// <summary>
 /// Método que inicia la consulta para comprobar un hecho
 /// </summary>
 /// <param name="hecho_a_validar">Hecho a comprobar</param>
 /// <param name="ruta_rtf_descripcion">ruta de rtf a mostrar en pantalla, (Rtf correspondiente a la varaible del hecho)</param>
 public void inciarConsultaHecho(string id_regla, Hecho hecho_a_validar, Hecho[] antecedentes, string ruta_rtf_descripcion)
 {
     limpiarControl();
     this.id_regla             = id_regla;
     this.ruta_rtf_descriptivo = ruta_rtf_descripcion;
     if (ruta_rtf_descriptivo != null && !ruta_rtf_descriptivo.Equals(""))
     {
         mostrarRTFDescripcion(ruta_rtf_descriptivo);
     }
     titulo = hecho_a_validar.nombre_variable;
     for (int i = 0; i < antecedentes.Length; i++)
     {
         agregarAntecedentes(antecedentes[i]);
     }
     this.hecho_a_validar      = hecho_a_validar + "";
     button_validar_si.Enabled = true;
     button_validar_no.Enabled = true;
 }
        /// <summary>
        /// Escribe los valores en la tabla calculos.
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="envio"></param>
        /// <param name="listaHechosIFRS"></param>
        public static void EscribirValoresCalculo(ISheet sheet, Envio envio, List <Hecho> listaHechosIFRS)
        {
            int renglon = 17;
            int columna = 1;

            if (envio != null)
            {
                DateTime fechaCierreTrimestreActual  = new DateTime((envio.Periodo.Ejercicio - 1), 12, 31);
                DateTime fechaCierreAcumuladoActual  = new DateTime(envio.Periodo.Ejercicio, 12, 31);
                DateTime inicioCierreAcumuladoActual = new DateTime(envio.Periodo.Ejercicio, 01, 01);

                Hecho activos = listaHechosIFRS.Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Assets") && hecho.Periodo.TipoPeriodo == 1 && hecho.Periodo.FechaInstante.Equals(fechaCierreTrimestreActual));
                Hecho pasivos = listaHechosIFRS.Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Liabilities") && hecho.Periodo.TipoPeriodo == 1 && hecho.Periodo.FechaInstante.Equals(fechaCierreTrimestreActual));
                Hecho capital = listaHechosIFRS.Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Equity") && hecho.Periodo.TipoPeriodo == 1 && hecho.Periodo.FechaInstante.Equals(fechaCierreTrimestreActual));
                Hecho ventas  = listaHechosIFRS.Find(hecho => hecho.Concepto.IdConcepto.Equals("ifrs-full_Revenue") && hecho.Periodo.TipoPeriodo == 2 && hecho.Periodo.FechaInicio.Equals(inicioCierreAcumuladoActual) && hecho.Periodo.FechaFin.Equals(fechaCierreAcumuladoActual));

                sheet.GetRow(renglon++).GetCell(columna).SetCellValue(activos != null ? Convert.ToDouble(activos.Valor) : double.NaN);
                sheet.GetRow(renglon++).GetCell(columna).SetCellValue(pasivos != null ? Convert.ToDouble(pasivos.Valor) : double.NaN);
                sheet.GetRow(renglon++).GetCell(columna).SetCellValue(capital != null ? Convert.ToDouble(capital.Valor) : double.NaN);
                sheet.GetRow(renglon).GetCell(columna).SetCellValue(ventas != null ? Convert.ToDouble(ventas.Valor) : double.NaN);
            }
        }
        /// <summary>
        /// Método que comprueba la ambiguedad recursiva de las reglas
        /// </summary>
        /// <returns></returns>
        private List <string> comprobarAmbiguedadRecursivaEnReglas()
        {
            List <string>       errores_comprobacion = new List <string>();
            List <InfoVariable> info_variables       = new List <InfoVariable>();

            //Inicio rellenado inicial info_variables
            string[] reglas = this.manejador_archivos.listarArchivosEnDirectorio(AccesoDatos.REGLA);
            for (int i = 0; i < reglas.Length; i++)
            {
                Regla regla             = manejador_archivos.extraerRegla(reglas[i]);
                Hecho hecho_consecuente = manejador_archivos.extraerHecho(regla.id_hecho_consecuente);
                bool  variable_encontrada_en_info_variables = false;
                for (int j = 0; j < info_variables.Count; j++)
                {
                    InfoVariable info_actual           = info_variables[j];
                    string[]     antecedentes          = regla.listarAntecedentes();
                    string       variable_consecuente  = hecho_consecuente.id_variable;
                    string[]     variables_antecedente = new string[antecedentes.Length];
                    for (int h = 0; h < antecedentes.Length; h++)//completamos la ids de las variables antecedente
                    {
                        Hecho hecho_antecedente = manejador_archivos.extraerHecho(antecedentes[h]);
                        variables_antecedente[h] = hecho_antecedente.id_variable;
                    }
                    if (info_actual.id_variable.Equals(variable_consecuente))//si variable asociada al consecuente ya se encuentra en el analisis, agregamos las variables antecedentes a variable asociada
                    {
                        //info_actual.reglas_relacionadas.Add(regla.id_regla);
                        info_actual.agregarElementoAReglasRelacionadas(regla.id_regla);
                        variable_encontrada_en_info_variables = true;
                        for (int k = 0; k < variables_antecedente.Length; k++)
                        {
                            if (!info_actual.buscarEnVariablesAsociadas(variables_antecedente[k]))//si no esta la variable la agregamos a las variables asociadas
                            {
                                info_actual.variables_asociadas.Add(variables_antecedente[k]);
                            }
                        }
                    }
                    else//Si el consecuente no esta en la variable principal, la buscamos en las asociadas
                    {
                        if (info_actual.buscarEnVariablesAsociadas(variable_consecuente))
                        {
                            //info_actual.reglas_relacionadas.Add(regla.id_regla);
                            info_actual.agregarElementoAReglasRelacionadas(regla.id_regla);
                            bool conflicto_regla = false;
                            for (int k = 0; k < variables_antecedente.Length; k++)//Comprobamos que el antecedente de la regla no contega la variable - lo cual provocaria ambiguedad
                            {
                                if (variables_antecedente[k].Equals(info_actual.id_variable))
                                {
                                    conflicto_regla = true;
                                    info_actual.agregarElementoAReglasEnConflicto(regla.id_regla);
                                    //info_actual.reglas_en_conflicto.Add(regla.id_regla);
                                }
                            }
                            if (!conflicto_regla) //si no hubo conflicto de reglas agregamos las variables no repetidas a las variables asociadas
                            {
                                for (int k = 0; k < variables_antecedente.Length; k++)
                                {
                                    if (!info_actual.buscarEnVariablesAsociadas(variables_antecedente[k]))//si no esta la variable la agregamos a las variables asociadas
                                    {
                                        info_actual.variables_asociadas.Add(variables_antecedente[k]);
                                    }
                                }
                            }
                        }
                    }
                    info_variables[j] = info_actual;
                }//end analisis info variables
                if (!variable_encontrada_en_info_variables)
                {
                    Variable     variable = manejador_archivos.extraerVariable(hecho_consecuente.id_variable);
                    InfoVariable info     = new InfoVariable();
                    info.id_variable         = variable.id_variable;
                    info.nombre_variable     = variable.nombre_variable;
                    info.variables_asociadas = new List <string>();
                    string[] antecedentes = regla.listarAntecedentes();
                    for (int x = 0; x < antecedentes.Length; x++)
                    {
                        Hecho h = manejador_archivos.extraerHecho(antecedentes[x]);
                        info.variables_asociadas.Add(h.id_variable);
                    }
                    info.reglas_relacionadas = new List <string>();  //Variables que se relacionan directa o recursivamente con la variable
                    info.reglas_relacionadas.Add(regla.id_regla);
                    info.reglas_en_conflicto = new List <string>();; //Reglas con problema de ambiguedad con la variable
                    info_variables.Add(info);
                }
            }//end analisis de reglas

            //end rellenado inicial info_variables

            //Proceso iterativo para que todas la variables se comparen con todas
            bool flag_cambios = true;

            while (flag_cambios)
            {
                flag_cambios = false;
                for (int i = 0; i < info_variables.Count; i++)
                {
                    for (int j = 0; j < info_variables.Count; j++)
                    {
                        if (i != j)
                        {
                            InfoVariable info_a = info_variables[i];
                            InfoVariable info_b = info_variables[j];

                            if (info_a.buscarEnVariablesAsociadas(info_b.id_variable))//si la variable b esta en las variables asociadas agregamos y analizamos las que falten
                            {
                                bool conflicto_regla = false;
                                for (int k = 0; k < info_b.variables_asociadas.Count; k++)//Comprobamos que el antecedente de la regla no contega la variable - lo cual provocaria ambiguedad
                                {
                                    if (info_b.variables_asociadas[k].Equals(info_a.id_variable))
                                    {
                                        conflicto_regla = true;
                                    }
                                }
                                if (!conflicto_regla) //si no hubo conflicto de reglas agregamos las variables no repetidas a las variables asociadas
                                {
                                    for (int k = 0; k < info_b.variables_asociadas.Count; k++)
                                    {
                                        if (!info_a.buscarEnVariablesAsociadas(info_b.variables_asociadas[k]))//si no esta la variable la agregamos a las variables asociadas
                                        {
                                            info_a.variables_asociadas.Add(info_b.variables_asociadas[k]);
                                            flag_cambios = true;
                                        }
                                    }
                                }
                                else//si hubo conflicto de reglas
                                {
                                    info_a.agregarElementoAReglasEnConflicto(info_b.reglas_relacionadas);
                                    info_a.agregarElementoAReglasRelacionadas(info_b.reglas_relacionadas);
                                }
                            }
                            info_variables[i] = info_a;
                            info_variables[j] = info_b;
                        }
                    }
                }
            }

            //Rellenando reglas con errores
            foreach (InfoVariable info in info_variables)
            {
                if (info.reglas_en_conflicto.Count > 0)
                {
                    Variable variable = manejador_archivos.extraerVariable(info.id_variable);
                    string   error    = "";
                    error = "Variable " + variable.id_variable + " (" + variable.nombre_variable + ") Conflicto de ambiguedad \n\tReglas con conflicto : ";
                    for (int q = 0; q < info.reglas_en_conflicto.Count; q++)
                    {
                        if (q != 0)
                        {
                            error += "|";
                        }
                        error += info.reglas_en_conflicto[q];
                    }
                    error += "\n\t reglas relacionadas : ";
                    for (int q = 0; q < info.reglas_relacionadas.Count; q++)
                    {
                        if (q != 0)
                        {
                            error += "|";
                        }
                        error += info.reglas_relacionadas[q];
                    }
                    errores_comprobacion.Add(error);
                }
            }
            return(errores_comprobacion);
        }
Exemple #15
0
        /// <summary>
        /// Crea un Hecho a partir de su representación en el modelo de instancia
        /// </summary>
        /// <param name="instanciaDb"></param>
        /// <param name="hechoDto"></param>
        /// <param name="listaTiposDato"></param>
        /// <returns></returns>
        public static Hecho CrearHechoDb(DocumentoInstancia instanciaDb, HechoDto hechoDto, List <TipoDato> listaTiposDato, DocumentoInstanciaXbrlDto documentoInstancia)
        {
            var hechoDb = new Hecho
            {
                IdConcepto     = hechoDto.IdConcepto,
                Concepto       = hechoDto.NombreConcepto,
                EspacioNombres = hechoDto.EspacioNombres,
                IdRef          = hechoDto.Id,
                EsTupla        = hechoDto.EsTupla,
                IdInterno      = hechoDto.Consecutivo
            };
            //Si el hecho DTO no tiene espacio de nombres y concepto, entonces intentar buscarlo de la taxonomía:
            var tipoDatoXbrl = hechoDto.TipoDatoXbrl;
            var tipoDato     = hechoDto.TipoDato;

            if ((String.IsNullOrEmpty(hechoDto.NombreConcepto) || String.IsNullOrEmpty(hechoDto.EspacioNombres)) && documentoInstancia.Taxonomia != null)
            {
                if (documentoInstancia.Taxonomia.ConceptosPorId.ContainsKey(hechoDto.IdConcepto))
                {
                    hechoDb.Concepto       = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].Nombre;
                    hechoDb.EspacioNombres = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].EspacioNombres;
                    if (String.IsNullOrEmpty(tipoDatoXbrl) || String.IsNullOrEmpty(tipoDato))
                    {
                        tipoDatoXbrl = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].TipoDatoXbrl;
                        tipoDato     = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].TipoDato;
                    }
                }
                else
                {
                    return(null);
                }
            }
            if ((String.IsNullOrWhiteSpace(tipoDatoXbrl) || String.IsNullOrWhiteSpace(tipoDato)) && documentoInstancia.Taxonomia != null)
            {
                if (documentoInstancia.Taxonomia.ConceptosPorId.ContainsKey(hechoDto.IdConcepto))
                {
                    tipoDatoXbrl = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].TipoDatoXbrl;
                    tipoDato     = documentoInstancia.Taxonomia.ConceptosPorId[hechoDto.IdConcepto].TipoDato;
                }
            }
            if (hechoDto.TuplaPadre != null)
            {
                hechoDb.IdInternoTuplaPadre = hechoDto.TuplaPadre.Consecutivo;
            }

            if (!hechoDto.EsTupla)
            {
                hechoDb.Valor = hechoDto.Valor;
                if (hechoDto.EsFraccion)
                {
                    //TODO: agregar 2 campos mas a la tabla
                }


                //Buscar el contexto
                var ctxDb = instanciaDb.Contexto.FirstOrDefault(x => x.Nombre.Equals(hechoDto.IdContexto));
                if (ctxDb != null)
                {
                    hechoDb.IdContexto = ctxDb.IdContexto;
                }

                //Buscar unidad
                var unidadDb = instanciaDb.Unidad.FirstOrDefault(x => x.IdRef.Equals(hechoDto.IdUnidad));
                if (unidadDb != null)
                {
                    hechoDb.IdUnidad = unidadDb.IdUnidad;
                }
                if (!hechoDto.DecimalesEstablecidos && !hechoDto.PrecisionEstablecida)
                {
                    hechoDto.Decimales = ConstantesGenerales.VALOR_DECIMALES_DEFAULT;
                }
                if (hechoDto.DecimalesEstablecidos)
                {
                    hechoDb.Precision = null;
                    hechoDb.Decimales = hechoDto.Decimales;
                }
                if (hechoDto.PrecisionEstablecida)
                {
                    hechoDb.Decimales = null;
                    hechoDb.Precision = hechoDto.Precision;
                }
                //Buscar el tipo de dato

                var tipoDatoCatalogo = listaTiposDato.FirstOrDefault(x => x.Nombre.Equals(tipoDato));
                if (tipoDatoCatalogo != null)
                {
                    hechoDb.IdTipoDato = tipoDatoCatalogo.IdTipoDato;
                }
                else
                {
                    tipoDatoCatalogo = listaTiposDato.FirstOrDefault(x => x.Nombre.Equals(tipoDatoXbrl));
                    if (tipoDatoCatalogo != null)
                    {
                        hechoDb.IdTipoDato = tipoDatoCatalogo.IdTipoDato;
                    }
                }
            }

            hechoDb.IdDocumentoInstancia = instanciaDb.IdDocumentoInstancia;

            return(hechoDb);
        }
        public ResultadoOperacionDto GenerarFichaAdministrativaEmisora(IDictionary <string, string> parametrosReporte)
        {
            ResultadoOperacionDto resultado = new ResultadoOperacionDto();

            parametrosReporte.TryGetValue("ticker", out var claveCotizacion);
            parametrosReporte.TryGetValue("anio", out var anio);
            var taxonomia = taxonomiaAnexoN;

            if (claveCotizacion != null && anio != null)
            {
                var parametros = "{ 'Entidad.Nombre': '" + claveCotizacion + "'," +
                                 "'Periodo.Ejercicio': " + anio + "," +
                                 "Taxonomia: '" + taxonomia + "'," +
                                 "EsVersionActual: true }";

                List <Envio> envios = AbaxXBRLCellStoreMongo.ConsultaElementos <Envio>("Envio", parametros).ToList();
                Envio        envio  = null;

                if (envios.Count > 0)
                {
                    envio = envios.ElementAt(0);
                }

                List <Hecho> hechosAProcesar = new List <Hecho>();

                if (envio != null)
                {
                    parametros      = "{IdEnvio: '" + envio.IdEnvio + "', 'Concepto.IdConcepto': {$in : [" + conceptos + "] }}";
                    hechosAProcesar = AbaxXBRLCellStoreMongo.ConsultaElementos <Hecho>("Hecho", parametros).ToList();
                }

                Hecho tipoInstrumento = hechosAProcesar.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_TypeOfInstrument"));

                List <AdministradorDTO> listaHechosConsejoAdministracion      = ObtenerListadoHechosPorComite(hechosAProcesar, null);
                List <AdministradorDTO> listaHechosComiteAuditoria            = ObtenerListadoHechosPorComite(hechosAProcesar, "ar_pros_AdministratorParticipateInCommitteesAudit");
                List <AdministradorDTO> listaHechosComitePracticasSocietarias = ObtenerListadoHechosPorComite(hechosAProcesar, "ar_pros_AdministratorParticipateInCommitteesCorporatePractices");
                List <String[]>         accionistas             = ObtenerAccionistas(hechosAProcesar);
                List <String[]>         principalesFuncionarios = ObtenerPrincipalesFuncionarios(hechosAProcesar);

                XSSFWorkbook workBookExportar = new XSSFWorkbook();
                var          hoja             = workBookExportar.CreateSheet("Ficha Emisora");
                hoja.DisplayGridlines = false;

                var denominacion = hechosAProcesar.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NameOfTheIssuer")) != null?ReporteUtil.removeTextHTML(hechosAProcesar.Find(hecho => hecho.Concepto.IdConcepto.Equals("ar_pros_NameOfTheIssuer")).Valor) : "";

                EscribirSeccionDatosGenerales(hoja, null, claveCotizacion, denominacion, (tipoInstrumento != null ? tipoInstrumento.Valor: ""));
                EscribirSeccionConsejoAdministracion(hoja, listaHechosConsejoAdministracion);
                EscribirSeccionPrincipalesFuncionarios(hoja, principalesFuncionarios);
                EscribirSeccionAccionistas(hoja, accionistas);
                EscribirSeccionComiteAuditoria(hoja, listaHechosComiteAuditoria);
                EscribirSeccionComitePracticasSocietarias(hoja, listaHechosComitePracticasSocietarias);

                var memoryStreamNew = new MemoryStream();
                var currentCulture  = Thread.CurrentThread.CurrentCulture;
                Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
                workBookExportar.Write(memoryStreamNew);
                Thread.CurrentThread.CurrentCulture = currentCulture;
                resultado.InformacionExtra          = memoryStreamNew.ToArray();
                resultado.Resultado = true;
            }
            else
            {
                resultado.Resultado = false;
                resultado.Mensaje   = "No se localizó ningún envío de la emisora:" + claveCotizacion + " para el año:" + anio;
            }

            return(resultado);
        }