private async Task <OperacionDto <RegistroEmpresaDto> > ObtenerEmpresa(RestClient client, PeticionSunatDto peticion)
        {
            var html = ObtenerHtmlGeneral(client, peticion);

            if (string.IsNullOrWhiteSpace(html))
            {
                return(new OperacionDto <RegistroEmpresaDto>(CodigosOperacionDto.NoExiste, "No existe ruc"));
            }


            var dto = new RegistroEmpresaDto()
            {
                Ruc = peticion.Ruc
            };

            await LlenarDtoDeHtml(dto, html);


            if (!string.IsNullOrEmpty(dto.FechaInscripcion))
            {
                peticion.RazonSocial = dto.Nombre;

                var htmlCantidadTrabajadores = ObtenerHtmlCantidadTrabajadores(client, peticion);
                //var htmlInformacionHistorica = ObtenerHtmlInformacionHistorica(client, peticion);
                var htmlRepresentantesLegales = ObtenerHtmlRepresentantesLegales(client, peticion);

                dto.CantidadTrabajadores = ObtenerCantidadTrabajadoresDeHtml(htmlCantidadTrabajadores);
                dto.Representantes       = ObtenerRepresentantesLegales(htmlRepresentantesLegales);
            }

            return(new OperacionDto <RegistroEmpresaDto>(dto));
        }
        private async Task LlenarDatosUbigeoDeDireccion(RegistroEmpresaDto dto)
        {
            await Task.Delay(100);

            if (dto == null || string.IsNullOrWhiteSpace(dto.DireccionDomicilioFiscal))
            {
                return;
            }

            var partes = dto.DireccionDomicilioFiscal.Split(new string[] { "-" }, StringSplitOptions.None);

            if (partes.Length < 3)
            {
                return;
            }

            var distrito  = !string.IsNullOrWhiteSpace(partes[partes.Length - 1]) ? partes[partes.Length - 1].Trim() : "";
            var provincia = !string.IsNullOrWhiteSpace(partes[partes.Length - 2]) ? partes[partes.Length - 2].Trim() : "";
            var departamentoPorProcesar = !string.IsNullOrWhiteSpace(partes[partes.Length - 3]) ? partes[partes.Length - 3].Trim() : "";

            if (provincia.ToLower().Contains("callao"))
            {
                dto.DistritoDomicilioFiscal     = distrito;
                dto.ProvinciaDomicilioFiscal    = "CALLAO";
                dto.DepartamentoDomicilioFiscal = "CALLAO";
                return;
            }

            dto.DistritoDomicilioFiscal  = distrito;
            dto.ProvinciaDomicilioFiscal = provincia;


            if (string.IsNullOrWhiteSpace(departamentoPorProcesar))
            {
                return;
            }

            var depas = departamentoPorProcesar.Split(new string[] { " " }, StringSplitOptions.None);

            if (partes.Length < 1)
            {
                return;
            }

            var departamento = !string.IsNullOrWhiteSpace(depas[depas.Length - 1]) ? depas[depas.Length - 1].Trim() : "";

            if ("dios".Equals(departamento, StringComparison.OrdinalIgnoreCase))
            {
                departamento = "Madre De Dios";
            }

            if ("libertad".Equals(departamento, StringComparison.OrdinalIgnoreCase))
            {
                departamento = "La Libertad";
            }

            if ("martin".Equals(departamento, StringComparison.OrdinalIgnoreCase))
            {
                departamento = "San Martin";
            }

            dto.DepartamentoDomicilioFiscal = departamento;


            //var ubigeos = await _ubigeoIneiRepositorio.BuscarPorDistritoYProvincia(distrito, provincia);
            //if (ubigeos.Count > 0)
            //{
            //    dto.DepartamentoDomicilioFiscal = ubigeos[0].Departamento?.ToUpper();
            //}
        }
        private async Task LlenarDtoDeHtml(RegistroEmpresaDto dto, string html)
        {
            var doc = new HtmlDocument();

            doc.LoadHtml(html);

            var tablas = doc.DocumentNode.Descendants("table").ToList();

            if (tablas.Count < 1)
            {
                return;
            }

            var tabla = tablas.FirstOrDefault();

            var trList = tabla.Descendants().Where(e => e.Name == "tr");

            if (trList == null || trList.Count() == 0)
            {
                return;
            }

            var contador = 0;

            foreach (var tr in trList)
            {
                switch (contador)
                {
                case 0:
                    var rucPlus = ObtenerResultadoSimpleDeTd(tr, 1);
                    if (!string.IsNullOrWhiteSpace(rucPlus))
                    {
                        var partes = rucPlus.Split(new string[] { "-" }, StringSplitOptions.None);
                        if (partes.Length > 1)
                        {
                            dto.Nombre = !string.IsNullOrWhiteSpace(partes[1]) ? partes[1].Trim() : null;
                        }
                    }
                    break;

                case 1:
                    dto.TipoContribuyente = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 2:
                    dto.NombreComercial = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 3:
                    dto.FechaInscripcion       = ObtenerResultadoSimpleDeTd(tr, 1);
                    dto.FechaInicioActividades = ObtenerResultadoSimpleDeTd(tr, 3);
                    break;

                case 4:
                    dto.EstadoContribuyente = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 5:
                    dto.CondicionContribuyente = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 6:
                    dto.DireccionDomicilioFiscal = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 7:
                    dto.SistemaEmisionComprobante = ObtenerResultadoSimpleDeTd(tr, 1);
                    dto.ActividadComercioExterior = ObtenerResultadoSimpleDeTd(tr, 3);
                    break;

                case 8:
                    dto.SistemaDeContabilidad = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 9:
                    var listaActividadesEconomicas = ObtenerListaDeSimpleDeTd(tr, 1);
                    dto.ActividadesEconomicas = listaActividadesEconomicas;
                    break;

                case 10:
                    var listaComprobantesPago = ObtenerListaDeSimpleDeTd(tr, 1);
                    dto.ComprobantesDePago = listaComprobantesPago;
                    break;

                case 11:
                    var listaSistemasDeEmisionElectronica = ObtenerListaDeSimpleDeTd(tr, 1);
                    dto.SistemasDeEmisionElectronica = listaSistemasDeEmisionElectronica;
                    break;

                case 12:
                    dto.EmisorElectronicoDesde = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 13:
                    var comprobantes = ObtenerResultadoSimpleDeTd(tr, 1);
                    if (!string.IsNullOrWhiteSpace(comprobantes))
                    {
                        var partes = comprobantes.Split(new string[] { "," }, StringSplitOptions.None);
                        dto.ComprobantesElectronicos.AddRange(partes);
                    }
                    break;

                case 14:
                    dto.AfiliadoPLEDesde = ObtenerResultadoSimpleDeTd(tr, 1);
                    break;

                case 15:
                    var listaPadrones = ObtenerListaDeSimpleDeTd(tr, 1);
                    dto.Padrones = listaPadrones;
                    break;
                }

                contador++;
            }

            await LlenarDatosUbigeoDeDireccion(dto);
        }