示例#1
0
        protected override Indexacao ModificaIndexacaoDoCampoReconhecido(
            Indexacao indexacao,
            ValorReconhecido valorReconhecido,
            IList <PalavraReconhecida> palavras)
        {
            if (this.EhCampoAgenciaOuConta(indexacao) || this.EhCampoPacoteServicos(indexacao))
            {
                if (indexacao.BateCom(this.ObterPrimeiroValor(valorReconhecido, indexacao.Campo)))
                {
                    indexacao.PrimeiroValor                = this.ObterPrimeiroValor(valorReconhecido, indexacao.Campo);
                    indexacao.OcrComplementou              = true;
                    indexacao.DataPrimeiraDigitacao        = DateTime.Now;
                    indexacao.ValorUtilizadoParaValorFinal = ValorUtilizadoParaValorFinal.NaoDefinido;
                }

                return(indexacao);
            }

            indexacao.PrimeiroValor                = this.ObterPrimeiroValor(valorReconhecido, indexacao.Campo);
            indexacao.OcrComplementou              = true;
            indexacao.DataPrimeiraDigitacao        = DateTime.Now;
            indexacao.ValorUtilizadoParaValorFinal = ValorUtilizadoParaValorFinal.NaoDefinido;

            return(indexacao);
        }
 protected override Indexacao ModificaIndexacaoDoCampoReconhecido(
     Indexacao indexacao,
     ValorReconhecido valorReconhecido,
     IList <PalavraReconhecida> palavras)
 {
     return(indexacao);
 }
示例#3
0
        private string ObterPrimeiroValor(
            ValorReconhecido valorReconhecido,
            Campo campoDoDocumento)
        {
            if (Campo.CamposAssinaturaGerenteDaConta.Contains(campoDoDocumento.Id))
            {
                if (valorReconhecido == null)
                {
                    return("NP");
                }

                return(valorReconhecido.Value == "Yes" ? "P" : "NP");
            }

            if (Campo.CamposIndicadorMensalidadeMenor.Contains(campoDoDocumento.Id))
            {
                if (valorReconhecido == null)
                {
                    return("Erro");
                }

                return(valorReconhecido.Value);
            }

            if (valorReconhecido.NaoTemConteudo())
            {
                return(string.Empty);
            }

            if (valorReconhecido.Value.NaoTemConteudo())
            {
                return(string.Empty);
            }

            ////if (Campo.CamposVersaoDaPac.Contains(campoDoDocumento.Id))
            ////{
            ////    return VersaoPacHelper.Converter(valorReconhecido.Value);
            ////}

            ////if (Campo.CamposAgenciaDaPac.Contains(campoDoDocumento.Id))
            ////{
            ////    return AgenciaHelper.Converter(valorReconhecido.Value);
            ////}

            ////if (Campo.CamposContasDaPac.Contains(campoDoDocumento.Id))
            ////{
            ////    return ContaHelper.Converter(valorReconhecido.Value);
            ////}

            if (campoDoDocumento.TipoDado == TipoDado.Bool)
            {
                return(valorReconhecido.Value == "Sim" ? "S" : "N");
            }

            return(valorReconhecido.Value);
        }
        private string TratarCampoNome(ValorReconhecido valorReconhecido)
        {
            if (valorReconhecido == null || string.IsNullOrEmpty(valorReconhecido.Value))
            {
                return(string.Empty);
            }

            if (this.PareceComNomeValido(valorReconhecido.Value))
            {
                return(valorReconhecido.Value.ToUpper().RemoverDiacritico().Trim());
            }

            return(string.Empty);
        }
示例#5
0
        public void Executar(Pagina pagina, ResultadoReconhecimento resultadoReconhecimento)
        {
            if (resultadoReconhecimento == null)
            {
                return;
            }

            var valoresReconhecidos = this.obtemValoresReconhecidosPaginaServico.Obter(
                pagina,
                resultadoReconhecimento);

            foreach (var valorReconhecido in valoresReconhecidos)
            {
                this.valorReconhecidoRepositorio.Salvar(valorReconhecido);
            }

            var tripaTexto = string.Empty;

            foreach (var palavra in resultadoReconhecimento.Palavras)
            {
                var palavraReconhecida = new PalavraReconhecida
                {
                    Texto    = palavra.Texto,
                    Altura   = palavra.Localizacao.Height,
                    Direita  = palavra.Localizacao.Right,
                    Esquerda = palavra.Localizacao.Left,
                    Largura  = palavra.Localizacao.Width,
                    Topo     = palavra.Localizacao.Top,
                    Pagina   = pagina
                };

                this.palavraRepositorio.Salvar(palavraReconhecida);
                tripaTexto += palavra.Texto + " ";
            }

            //// gravando parte das palavras reconhecidas na recvalue também, para facilitar comparações na POC.
            if (tripaTexto.Trim().Length > 2)
            {
                if (tripaTexto.Length > 200)
                {
                    tripaTexto = tripaTexto.Substring(0, 199) + "(...)";
                }

                var recValueFull = new ValorReconhecido()
                {
                    TemplateName = "fulltextbsb", CampoTemplate = "fulltextbsb", Pagina = pagina, Value = tripaTexto
                };
                this.valorReconhecidoRepositorio.Salvar(recValueFull);
            }
        }
        private string TratarCampoCodigoNumerico(ValorReconhecido valorReconhecido)
        {
            if (valorReconhecido == null || string.IsNullOrEmpty(valorReconhecido.Value))
            {
                return(string.Empty);
            }

            var numeros = valorReconhecido.Value.ObterInteiros();

            if (numeros.Length >= 5 && numeros.Length <= 12)
            {
                return(numeros);
            }

            return(string.Empty);
        }
示例#7
0
        protected override Indexacao AdicionaNovaIndexacaoParaCampoReconhecido(
            Documento documento,
            ValorReconhecido valorReconhecido,
            Campo campoDoDocumento)
        {
            var indexacao = new Indexacao
            {
                Campo                 = campoDoDocumento,
                Documento             = documento,
                DataPrimeiraDigitacao = DateTime.Now,
                OcrComplementou       = true,
                PrimeiroValor         = this.ObterPrimeiroValor(valorReconhecido, campoDoDocumento)
            };

            documento.Indexacao.Add(indexacao);

            return(indexacao);
        }
示例#8
0
        public Indexacao AlterarIndexacao(
            Documento documento,
            ValorReconhecido valorReconhecido,
            Campo campoDoDocumento,
            Indexacao indexacao,
            IList <PalavraReconhecida> palavras)
        {
            if (this.PodeInserirCampoReconhecido(campoDoDocumento, indexacao))
            {
                indexacao = this.AdicionaNovaIndexacaoParaCampoReconhecido(
                    documento,
                    valorReconhecido,
                    campoDoDocumento);

                this.gravaLogDocumentoServico.Executar(
                    LogDocumento.AcaoDocumentoOcr,
                    documento.Id,
                    string.Format("Campo [{0}] inserido pelo ocr.", campoDoDocumento.Description));
            }
            else
            {
                if (indexacao == null)
                {
                    return(null);
                }

                if (indexacao.ValorFinal.NaoTemConteudo() == false)
                {
                    return(indexacao);
                }

                indexacao = this.ModificaIndexacaoDoCampoReconhecido(
                    indexacao,
                    valorReconhecido,
                    palavras);

                this.gravaLogDocumentoServico.Executar(
                    LogDocumento.AcaoDocumentoOcr,
                    documento.Id,
                    string.Format("Campo [{0}] atualizado pelo ocr.", campoDoDocumento.Description));
            }

            return(indexacao);
        }
        public List <ValorReconhecido> Criar(Pagina pagina, List <Tuple <string, string> > campos)
        {
            var retornoLista = new List <ValorReconhecido>();

            foreach (var tupla in campos)
            {
                var valorAtual = new ValorReconhecido()
                {
                    Pagina        = pagina,
                    CampoTemplate = tupla.Item1,
                    Value         = tupla.Item2,
                    TemplateName  = "ocr"
                };

                retornoLista.Add(valorAtual);
            }

            return(retornoLista);
        }
        public string TratarCampoDataNascimento(ValorReconhecido valorReconhecido, string valorJaCadastrado)
        {
            if (valorReconhecido == null || string.IsNullOrEmpty(valorReconhecido.Value))
            {
                return(string.Empty);
            }

            var match = Regex.Match(valorReconhecido.Value, @"[0-9]{1,2}[ \/-][0-9]{1,2}[ \/-][0-9]{2,4}");

            if (!match.Success)
            {
                match = Regex.Match(valorReconhecido.Value.ToUpper(), @"[0-9]{1,2}[ \/-]{0,1}(JAN|FEV|MAR|ABR|MAI|JUN|JUL|AGO|SET|OUT|NOV|DEZ)[ \/-]{0,1}[0-9]{2,4}");
            }

            if (match.Success)
            {
                if (match.Value.Length <= 4 || match.Value.Length > 11)
                {
                    return(string.Empty);
                }

                var      resultado = string.Empty;
                DateTime dataConvertida;
                if (!DateTime.TryParse(match.Value, out dataConvertida))
                {
                    return(string.Empty);
                }

                resultado = dataConvertida.ToString("dd") + dataConvertida.ToString("MM") + dataConvertida.ToString("yyyy");
                if (string.IsNullOrEmpty(valorJaCadastrado))
                {
                    return(resultado);
                }

                if (dataConvertida < DateTime.ParseExact(valorJaCadastrado, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture))
                {
                    return(resultado);
                }
            }

            return(string.Empty);
        }
        private string TratarCampoCpf(ValorReconhecido valorReconhecido)
        {
            if (valorReconhecido == null || string.IsNullOrEmpty(valorReconhecido.Value))
            {
                return(string.Empty);
            }

            var match = Regex.Match(valorReconhecido.Value, @"[0-9]{3}[ ./\-]{0,1}[0-9]{3}[ ./\-]{0,1}[0-9]{3}[ ./\-]{0,1}[0-9]{2}");

            if (match.Success)
            {
                var validaCpf = new CpfValidation();
                if (validaCpf.IsValid(match.Value.ObterInteiros()))
                {
                    return(match.Value.ObterInteiros());
                }
            }

            return(string.Empty);
        }
示例#12
0
        public void ExecutarValorReconhecido(Indexacao indexacao, ValorReconhecido valorReconhecido)
        {
            new TaskFactory().StartNew(() =>
            {
                try
                {
                    var logBatimento = new LogBatimento
                    {
                        Indexacao        = indexacao,
                        CampoEngine      = valorReconhecido.CampoTemplate,
                        ValorReconhecido = valorReconhecido.Value,
                    };

                    this.unitOfWork.Transacionar(() => this.logBatimentoRepositorio.Salvar(logBatimento));
                }
                catch (Exception exception)
                {
                    Log.Application.Error(exception);
                }
            });
        }
        private void InserirValorReconhecido(ImagemConta imagem, Pagina pagina)
        {
            try
            {
                var valorReconhecido = new ValorReconhecido
                {
                    Pagina        = pagina,
                    TemplateName  = "fulltext",
                    CampoTemplate = "fulltext",
                    Value         = imagem.Ocr
                };

                this.valorReconhecidoRepositorio.Salvar(valorReconhecido);
            }
            catch (Exception exception)
            {
                Log.Application.Error(
                    "Erro ao processar arquivo(s) de OCR.",
                    exception);
            }
        }
示例#14
0
        public List <ValorReconhecido> Obter(Pagina pagina, ResultadoReconhecimento resultadoReconhecimento)
        {
            //// TODO: fortalecer teste. está fraco
            var mapeamentos         = this.mapeamentoCampos.ObterTodosExcetoPac();
            var valoresReconhecidos = new List <ValorReconhecido>();

            foreach (var campoReconhecidoEngine in resultadoReconhecimento.Campos)
            {
                var valorReconhecido = new ValorReconhecido();

                if (campoReconhecidoEngine.Value.EhReconhecivel)
                {
                    valorReconhecido.Value = campoReconhecidoEngine.Value.Texto;
                }

                valorReconhecido.SetarCampo(mapeamentos, campoReconhecidoEngine.Value);
                valorReconhecido.SetarCampoReconhecidoDoEngine(campoReconhecidoEngine.Value);
                valorReconhecido.Pagina = pagina;

                valoresReconhecidos.Add(valorReconhecido);
            }

            return(valoresReconhecidos);
        }
        protected override Indexacao AdicionaNovaIndexacaoParaCampoReconhecido(
            Documento documento,
            ValorReconhecido valorReconhecido,
            Campo campoDoDocumento)
        {
            var indexacao = new Indexacao
            {
                Campo = campoDoDocumento,
                DataPrimeiraDigitacao = DateTime.Now
            };

            documento.AdicionaIndexacao(indexacao);

            if (campoDoDocumento.Id != Campo.CampoDtEmissaoNumerica &&
                campoDoDocumento.Id != Campo.CampoDtNascimentoNumerica)
            {
                return(indexacao);
            }

            //// so deve inserir para campos CampoDt*******Numerica se tiver
            ////  reconhecido o conteúdo do respectivo campo original
            Indexacao indexacaoCampoOriginal = null;

            if (campoDoDocumento.Id == Campo.CampoDtEmissaoNumerica)
            {
                indexacaoCampoOriginal = this.indexacaoRepositorio
                                         .ObterPorCampoDeUmDocumento(Campo.CampoDataEmissao, documento);
            }

            if (campoDoDocumento.Id == Campo.CampoDtNascimentoNumerica)
            {
                indexacaoCampoOriginal = this.indexacaoRepositorio
                                         .ObterPorCampoDeUmDocumento(Campo.CampoDataNascimento, documento);
            }

            if (this.CampoOriginalFoiReconhecido(indexacaoCampoOriginal) == false)
            {
                indexacao.PrimeiroValor   = string.Empty;
                indexacao.ValorFinal      = string.Empty;
                indexacao.OcrComplementou = false;

                return(indexacao);
            }

            try
            {
                var campoMesEhNumero = this.validaDadosReconhecidosCampoData
                                       .PossuiMesNumerico(indexacaoCampoOriginal);

                if (campoMesEhNumero)
                {
                    indexacao.PrimeiroValor   = "S";
                    indexacao.ValorFinal      = "S";
                    indexacao.OcrComplementou = true;
                }

                return(indexacao);
            }
            catch (Exception exception)
            {
                Log.Application.Info(exception.Message);
            }

            if (valorReconhecido.NaoTemConteudo() || valorReconhecido.Value == "E")
            {
                indexacao.PrimeiroValor   = string.Empty;
                indexacao.ValorFinal      = string.Empty;
                indexacao.OcrComplementou = false;

                return(indexacao);
            }

            indexacao.PrimeiroValor   = valorReconhecido.Value;
            indexacao.ValorFinal      = valorReconhecido.Value;
            indexacao.OcrComplementou = true;

            return(indexacao);
        }
        private bool ConteudoEncontradoValido(ref Indexacao indexacao, Campo campoAtual, ValorReconhecido valorReconhecido)
        {
            if (indexacao == null)
            {
                indexacao = new Indexacao()
                {
                    PrimeiroValor        = string.Empty,
                    Campo                = campoAtual,
                    OcrComplementou      = true,
                    UsuarioPrimeiroValor = -2
                };
            }

            var defineTipo   = this.AvaliarConteudoCampo(campoAtual);
            var valorTratado = string.Empty;

            switch (defineTipo)
            {
            case TipoCampoAnalisado.DataNascimento:
                valorTratado = this.TratarCampoDataNascimento(valorReconhecido, indexacao.PrimeiroValor);
                break;

            case TipoCampoAnalisado.Nome:
                valorTratado = this.TratarCampoNome(valorReconhecido);
                break;

            case TipoCampoAnalisado.CodigoNumerico:
                valorTratado = this.TratarCampoCodigoNumerico(valorReconhecido);
                break;

            case TipoCampoAnalisado.Cpf:
                valorTratado = this.TratarCampoCpf(valorReconhecido);
                break;

            case TipoCampoAnalisado.Indefinido:
                valorTratado = string.Empty;
                return(false);

            default:
                valorTratado = string.Empty;
                return(false);
            }

            if (!string.IsNullOrEmpty(valorTratado))
            {
                indexacao.PrimeiroValor = valorTratado;
                return(true);
            }

            return(false);
        }
示例#17
0
 protected abstract Indexacao AdicionaNovaIndexacaoParaCampoReconhecido(Documento documento, ValorReconhecido valorReconhecido, Campo campoDoDocumento);
示例#18
0
 protected abstract Indexacao ModificaIndexacaoDoCampoReconhecido(Indexacao indexacao, ValorReconhecido valorReconhecido, IList <PalavraReconhecida> palavras);