/// <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); } }