/// <summary> /// Importa los datos de un hecho de otro documento de instancia. /// Busca unidad o contexto que sea equivalente, de otra forma crea unidades y contextos asociados /// </summary> /// <param name="hechoImportar">Hecho a importar</param> /// <param name="instancia">Documento de instancia orgien del hecho</param> /// <returns>ID del hecho importado en le documento de instancia</returns> public String ImportarHecho(HechoDto hechoImportar, DocumentoInstanciaXbrlDto instancia) { String nuevoId = null; if (this.Taxonomia.ConceptosPorId.ContainsKey(hechoImportar.IdConcepto)) { nuevoId = "I" + Guid.NewGuid().ToString(); String idContexto = null; String idUnidad = null; if (hechoImportar.IdUnidad != null) { UnidadDto unidadOrigen = instancia.UnidadesPorId[hechoImportar.IdUnidad]; var uniadesNuevoHecho = BuscarUnidades(unidadOrigen.Tipo, Unit.Medida == unidadOrigen.Tipo ?unidadOrigen.Medidas :unidadOrigen.MedidasNumerador, unidadOrigen.MedidasDenominador); if (uniadesNuevoHecho != null && uniadesNuevoHecho.Count > 0) { idUnidad = uniadesNuevoHecho[0].Id; } else { var unidadDestino = new UnidadDto() { Id = "UI" + Guid.NewGuid().ToString(), Tipo = unidadOrigen.Tipo, Medidas = unidadOrigen.Medidas, MedidasNumerador = unidadOrigen.MedidasNumerador, MedidasDenominador = unidadOrigen.MedidasDenominador }; UnidadesPorId.Add(unidadDestino.Id, unidadDestino); idUnidad = unidadDestino.Id; } } if (hechoImportar.IdContexto != null) { ContextoDto contextoOrigen = instancia.ContextosPorId[hechoImportar.IdContexto]; var valoresDim = new List <DimensionInfoDto>(); if (contextoOrigen.Entidad.ValoresDimension != null) { valoresDim.AddRange(contextoOrigen.Entidad.ValoresDimension); } if (contextoOrigen.ValoresDimension != null) { valoresDim.AddRange(contextoOrigen.ValoresDimension); } var contextos = BuscarContexto(contextoOrigen.Entidad.EsquemaId + ":" + contextoOrigen.Entidad.Id, contextoOrigen.Periodo.Tipo, contextoOrigen.Periodo.Tipo == Period.Instante? contextoOrigen.Periodo.FechaInstante:contextoOrigen.Periodo.FechaInicio, contextoOrigen.Periodo.Tipo == Period.Instante? contextoOrigen.Periodo.FechaInstante:contextoOrigen.Periodo.FechaFin, valoresDim ); if (contextos != null && contextos.Count > 0) { idContexto = contextos[0].Id; //LogUtil.Info("{contextoOrigen.Entidad.Id: [" + contextoOrigen.Entidad.Id + "], contextoDocumento.Entidad.Id:[" + contextos[0].Entidad.Id + "]}"); } else { var contextoDestino = new ContextoDto() { Entidad = new EntidadDto() { ContieneInformacionDimensional = contextoOrigen.Entidad.ContieneInformacionDimensional, EsquemaId = contextoOrigen.Entidad.EsquemaId, Id = contextoOrigen.Entidad.Id }, ContieneInformacionDimensional = contextoOrigen.ContieneInformacionDimensional, Periodo = new PeriodoDto() { Tipo = contextoOrigen.Periodo.Tipo, FechaInicio = contextoOrigen.Periodo.FechaInicio, FechaFin = contextoOrigen.Periodo.FechaFin, FechaInstante = contextoOrigen.Periodo.FechaInstante }, ValoresDimension = contextoOrigen.ValoresDimension, Id = "CI" + Guid.NewGuid().ToString() }; ContextosPorId[contextoDestino.Id] = contextoDestino; idContexto = contextoDestino.Id; } } var hechoNuevo = CrearHecho(hechoImportar.IdConcepto, idUnidad, idContexto, nuevoId); hechoNuevo.Valor = hechoImportar.Valor; hechoNuevo.ValorNumerico = hechoImportar.ValorNumerico; HechosPorId[nuevoId] = hechoNuevo; if (!HechosPorIdConcepto.ContainsKey(hechoNuevo.IdConcepto)) { HechosPorIdConcepto[hechoNuevo.IdConcepto] = new List <String>(); } HechosPorIdConcepto[hechoNuevo.IdConcepto].Add(nuevoId); } return(nuevoId); }