Exemple #1
0
        /// <summary>
        /// Valida que la taxonomía a la que pertenece el documento de instancia sea una taxonía válida y conocida
        /// de acuerdo al catálog de taxonomías
        /// </summary>
        /// <param name="documentoXbrl">Documento XBRL a validar</param>
        /// <param name="parametros">Parametros utilizados durante la validación</param>
        /// <param name="resultadoValidacion">Objeto de resultado de la validación</param>
        private void ValidarTaxonomiaConocida(DocumentoInstanciaXbrlDto documentoXbrl, IDictionary <string, string> parametros, ResultadoValidacionDocumentoXBRLDto resultadoValidacion)
        {
            long   idEmpresa  = 0;
            string cveEmpresa = null;

            if (parametros.ContainsKey("cveFideicomitente") && !string.IsNullOrEmpty(parametros["cveFideicomitente"]))
            {
                cveEmpresa = parametros["cveFideicomitente"];
            }
            if (cveEmpresa == null && parametros.ContainsKey("cvePizarra"))
            {
                cveEmpresa = parametros["cvePizarra"];
            }
            string esProspectoParam = String.Empty;

            parametros.TryGetValue("esProspecto", out esProspectoParam);
            bool esProspecto = !String.IsNullOrEmpty(esProspectoParam) && esProspectoParam.ToLower().Trim().Equals("true");

            LogUtil.Info("esProspectoParam: [" + esProspectoParam + "]");

            if (cveEmpresa == null)
            {
                AgregarErrorFatal(resultadoValidacion, null, null, null, "Faltan parámetros de invocación: cvePizarra o cveFideicomitente");
                return;
            }
            var emp = EmpresaRepository.GetQueryable().Where(x => x.NombreCorto == cveEmpresa).FirstOrDefault();

            if (emp == null)
            {
                //Buscar por alias
                emp = EmpresaRepository.GetQueryable().Where(x => x.AliasClaveCotizacion == cveEmpresa).FirstOrDefault();
            }
            if (emp != null)
            {
                if (documentoXbrl.DtsDocumentoInstancia != null && documentoXbrl.DtsDocumentoInstancia.Count > 0)
                {
                    var href = documentoXbrl.DtsDocumentoInstancia[0].HRef ?? String.Empty;
                    href = href.ToLower().Trim();
                    if (esProspecto && !ValidaTaxonomiaProspecto(href))
                    {
                        AgregarErrorFatal(resultadoValidacion, null, null, null, "Para este tramite se debe utilizar una taxonomías de prospecto.");
                        LogUtil.Error("Se intento envíar un documento de tipo prospecto para una taxonomía no asignada {IdEmpresa:[" + emp.IdEmpresa + "], cveEmpresa:[" + cveEmpresa + "] Href:[" + href + "]}");
                    }
                    if (!esProspecto && ValidaTaxonomiaProspecto(href))
                    {
                        AgregarErrorFatal(resultadoValidacion, null, null, null, "Las taxonomías de prospecto deben reportarse desde el tramite correspondiente de Stiv.");
                        LogUtil.Error("Se intento envíar un documento de tipo prospecto no indicado como prospecto {IdEmpresa:[" + emp.IdEmpresa + "], cveEmpresa:[" + cveEmpresa + "] Href:[" + href + "]}");
                    }
                    if (!EmpresaRepository.ExisteTaxonomiaParaTipoEmpresaDeEmpresa(emp.IdEmpresa, href))
                    {
                        AgregarErrorFatal(resultadoValidacion, null, null, null, "La taxonomía del archivo de instancia no es la correcta para el tipo de envío.");
                        LogUtil.Error("Se intento envíar un documento de una taxonomía no asignada {IdEmpresa:[" + emp.IdEmpresa + "], cveEmpresa:[" + cveEmpresa + "] Href:[" + href + "]}");
                    }
                }
                else
                {
                    AgregarErrorFatal(resultadoValidacion, null, null, null, "La taxonomía del archivo de instancia no es la correcta para el tipo de envío. (No existe schemaRef)");
                }
            }
            else
            {
                AgregarErrorFatal(resultadoValidacion, null, null, null, "No se encontró empresa con clave:" + cveEmpresa);
            }
        }