/// <summary>
        /// Imprime el contenido de la celda con firma.
        /// </summary>
        /// <param name="miembro">Miembro a pintar.</param>
        /// <param name="docBuilder">Constructor del documento.</param>
        /// <param name="widthPercent">Porcentaje en ancho.</param>
        private void ImprimeCeldaFirmas(PersonaResponsableMiembro431000DTO miembro, DocumentBuilder docBuilder, double widthPercent)
        {
            docBuilder.InsertCell();
            docBuilder.CellFormat.PreferredWidth             = PreferredWidth.FromPercent(widthPercent);
            docBuilder.ParagraphFormat.Alignment             = ParagraphAlignment.Center;
            docBuilder.ParagraphFormat.Borders.Top.Color     = Color.Black;
            docBuilder.ParagraphFormat.Borders.Top.LineStyle = LineStyle.Single;
            docBuilder.ParagraphFormat.Borders.Top.LineWidth = 1;

            docBuilder.Font.Bold = true;
            docBuilder.Writeln(miembro.Nombre);
            docBuilder.Font.Bold = false;
            docBuilder.Writeln(miembro.Cargo);
        }
        /// <summary>
        /// Genera un diccionaro con la información de las personas responsables.
        /// </summary>
        /// <param name="estructuraReporte">Estructura del reporte.</param>
        /// <returns>Diccionario con la información de las personas responsables.</returns>
        private IDictionary <String, IList <PersonaResponsable431000DTO> > GeneraDiccionarioPersonasResponsables(ReporteXBRLDTO estructuraReporte)
        {
            var documentoInstancia = estructuraReporte.Instancia;
            var consultaUtil       = new ConsultaDocumentoInstanciaUtil(documentoInstancia, estructuraReporte.Plantilla);
            var diccionario        = new Dictionary <String, IList <PersonaResponsable431000DTO> >();
            var filtroHechos       = new FiltroHechosDto()
            {
                IdConcepto = new List <String>()
                {
                    "ar_pros_ResponsiblePersonName",
                    "ar_pros_ResponsiblePersonPosition",
                    "ar_pros_ResponsiblePersonInstitution",
                    "ar_pros_ResponsiblePersonLegend",
                    "ar_pros_SignIssuanceUnderArt13OfTheCUE",
                    "ar_pros_ResponsiblePersonInstitutionExternalAuditor",
                    "ar_pros_OtherInstitutionExternalAuditor",
                    "ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws",
                    "ar_pros_OtherInstitutionBacherlorOfLaws",
                }
            };
            var diccionarioPersonasResponsables = new Dictionary <String, IList <PersonaResponsable431000DTO> >();
            var idsHechosConceptos            = consultaUtil.BuscaHechosPorFiltro(filtroHechos);
            var idsContextos                  = consultaUtil.ObtenIdsContextosHechos(idsHechosConceptos);
            var contextosPorFiguraResponsable = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:TypeOfResponsibleFigureAxis", idsContextos);

            foreach (var idItemMiembroFiguraResponsable in contextosPorFiguraResponsable.Keys)
            {
                var listaContextosPorFiguraResponsable = contextosPorFiguraResponsable[idItemMiembroFiguraResponsable];
                var contextosPorEntidad = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:ResponsiblePersonsInstitutionSequenceTypedAxis", listaContextosPorFiguraResponsable);
                IList <PersonaResponsable431000DTO> listaPersonasResponsablesMiembro;
                if (!diccionario.TryGetValue(idItemMiembroFiguraResponsable, out listaPersonasResponsablesMiembro))
                {
                    listaPersonasResponsablesMiembro = new List <PersonaResponsable431000DTO>();
                    diccionario.Add(idItemMiembroFiguraResponsable, listaPersonasResponsablesMiembro);
                }
                foreach (var miembroTipificadoInstitucion in contextosPorEntidad.Keys)
                {
                    var personaResponsableDto = new PersonaResponsable431000DTO()
                    {
                        Miembros = new List <PersonaResponsableMiembro431000DTO>()
                    };
                    listaPersonasResponsablesMiembro.Add(personaResponsableDto);

                    var listaContextosPorInstitucion = contextosPorEntidad[miembroTipificadoInstitucion];
                    var listaIdsHechosInstitucion    = consultaUtil.BuscaHechosPorFiltro(new FiltroHechosDto()
                    {
                        IdConcepto = new List <String>()
                        {
                            "ar_pros_ResponsiblePersonInstitution",
                            "ar_pros_ResponsiblePersonLegend",
                            "ar_pros_ResponsiblePersonInstitutionExternalAuditor",
                            "ar_pros_OtherInstitutionExternalAuditor",
                            "ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws",
                            "ar_pros_OtherInstitutionBacherlorOfLaws"
                        },
                        IdContexto = listaContextosPorInstitucion
                    });
                    String otraInstitucion = String.Empty;
                    foreach (var idHechoInstitucion in listaIdsHechosInstitucion)
                    {
                        HechoDto hechoInsititucionLeyenda;
                        if (documentoInstancia.HechosPorId.TryGetValue(idHechoInstitucion, out hechoInsititucionLeyenda))
                        {
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitution"))
                            {
                                personaResponsableDto.Institucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitutionExternalAuditor") ||
                                hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonInstitutionBacherlorOfLaws"))
                            {
                                personaResponsableDto.Institucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_OtherInstitutionExternalAuditor") ||
                                hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_OtherInstitutionBacherlorOfLaws"))
                            {
                                otraInstitucion = hechoInsititucionLeyenda.Valor;
                            }
                            if (hechoInsititucionLeyenda.IdConcepto.Equals("ar_pros_ResponsiblePersonLegend"))
                            {
                                personaResponsableDto.Leyenda = hechoInsititucionLeyenda.Valor;
                            }
                        }
                    }
                    if (!String.IsNullOrEmpty(otraInstitucion) && personaResponsableDto.Institucion.Equals("Otro"))
                    {
                        personaResponsableDto.Institucion = otraInstitucion;
                    }
                    var diccionarioMiembrosPersonasResponsables = consultaUtil.AgrupaContextosPorMiembro("http://www.cnbv.gob.mx/2016-08-22/ar_prospectus:ResponsiblePersonsSequenceTypedAxis", listaContextosPorInstitucion);
                    foreach (var idMiembroResponsable in diccionarioMiembrosPersonasResponsables.Keys)
                    {
                        var            listaContextosPersonaResponsable = diccionarioMiembrosPersonasResponsables[idMiembroResponsable];
                        var            idPrimerContexto = listaContextosPersonaResponsable.First();
                        IList <String> listaIdsHechosPersonaResponsable;
                        if (documentoInstancia.HechosPorIdContexto.TryGetValue(idPrimerContexto, out listaIdsHechosPersonaResponsable))
                        {
                            var miembroPresonaResponsable = new PersonaResponsableMiembro431000DTO();
                            for (var indexHechoPresona = 0; indexHechoPresona < listaIdsHechosPersonaResponsable.Count; indexHechoPresona++)
                            {
                                var      idHechoPersona = listaIdsHechosPersonaResponsable[indexHechoPresona];
                                HechoDto hechoPersonaResponsable;
                                if (documentoInstancia.HechosPorId.TryGetValue(idHechoPersona, out hechoPersonaResponsable))
                                {
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_ResponsiblePersonName"))
                                    {
                                        miembroPresonaResponsable.Nombre = hechoPersonaResponsable.Valor;
                                    }
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_ResponsiblePersonPosition"))
                                    {
                                        miembroPresonaResponsable.Cargo = hechoPersonaResponsable.Valor;
                                    }
                                    if (hechoPersonaResponsable.IdConcepto.Equals("ar_pros_SignIssuanceUnderArt13OfTheCUE"))
                                    {
                                        miembroPresonaResponsable.FirmaArticulo13 = hechoPersonaResponsable.Valor.Equals("SI");
                                        if (miembroPresonaResponsable.FirmaArticulo13)
                                        {
                                            personaResponsableDto.ContieneFirmasLeyendaArt13 = true;
                                        }
                                    }
                                }
                            }
                            if (!String.IsNullOrEmpty(miembroPresonaResponsable.Nombre))
                            {
                                personaResponsableDto.Miembros.Add(miembroPresonaResponsable);
                            }
                        }
                    }
                }
            }

            return(diccionario);
        }