Informações importantes sobre expressões:
Recuperando Status de uma tarefa:
Obj.Status[numerodatarefa]
Exemplo: obj.Status[10]
Recuperando dado de entrada:
Obj.NomeDoDadoEntrada
Exemplo: obj.CPF
Recuperando Dados retornados em dados de uma tarefa:
Obj.Dados[numerodatarefa].NomeDoDado
Exemplo: obj.Dados[10].CPF
Recuperando Dados retornados em dadosJson de uma tarefa:
Obj.DadosJson[numerodatarefa].NomeDoDado
Exemplo: obj.DadosJson[10].CPF
Operadores:
? - Utilizado em perguntas (If e Eles)
|| - utilizado para representar quando um ou outra expressão seja verdadeira
&& - utilizado quando deseja mais de uma expressão verdadeira
Exemplos?
obj.Dados[50].StatusLocalizacao.Contains("teste1") || obj.Dados[50].StatusLocalizacao.Contains("teste2")
obj.Dados[50].StatusLocalizacao.Contains("teste1") && obj.Dados[50].StatusLocalizacao.Contains("teste2")
obj.Dados[50].StatusLocalizacao.Contains("teste1") ? true : false
Obs. Neste caso da pergunta, após a interrogação é o que vai acontecer se o resultado da pergunta for verdadeiro (IF ou Se) e após os dois pontos “:” é quando não for verdadeira o resultado da pergunta (Else ou Se não)
Exemplos Expressões no S-Works
obj.Dados[60].Situacao.ToUpper().Equals("INEXISTENTE")
Neste exemplo duas funções são utilizadas.
A primeira função ToUpper está forçando que o conteúdo do campo “Situacao” seja formatado para caixa alta.
A segunda função Equals está afirmando que o conteúdo do campo “Situacao” é igual a "INEXISTENTE".
Obs: Quando comparamos um campo com um texto é necessário que este texto esteja entre aspas duplas "". Exemplo "INEXISTENTE".
O campo “Situacao” é um campo de retorno de uma tarefa, que é representado pelo algarismo entre colchetes [], que no caso é 60.
obj.Data_Nascimento.ToString("dd/MM/yyyy") == obj.Dados[2645].DataNascimento.Substring(0,10)
Neste exemplo estamos comparando duas datas, sendo que uma está no formato string e a outra date.
obj.Dados[50].StatusLocalizacao.Contains("teste1") || obj.Dados[50].StatusLocalizacao.Contains("teste2") || obj.Dados[50].StatusLocalizacao.Contains("teste3")
Neste exemplo estamos verificando a existência de string dentro de outra string.
Se navegarmos pelo menu: Administração → APIs veremos todas as APIs utilizadas pelo S-Works.
Clicando no sinal de + podemos ver os métodos (Funcionalidades) de cada API. E clicando no botão detalhar podemos visualizar os campos de cada método.
obj.Status[30] == APROVADA
Esta expressão pergunta se o status da tarefa 30 (Consultar Ação) é igual a aprovada.
Seguem abaixo os status possíveis de uma tarefa do S-Works:
Status das Tarefas |
PENDENTE |
PENDENTE_MANUAL |
EM_EXECUCAO |
APROVADA |
REPROVADA |
NAO_EXECUTADA |
AGUARDANDO |
FALHA |
SUSPENSA |
((date1.Year - date2.Year) * 12) + date1.Month - date2.Month
Calcular o número de meses entre duas datas.
(DateTime.Now - obj.DataProp).TotalDays <= 10
Calculo de dias entre datas e comparação.
obj.Dados[11800].DataNascimento.Substring(0, 10) == obj.Data_Nascimento.ToString("yyyy-MM-dd")
Comparar datas em formato diferente (string / date time).
(DateTime.Now - obj.Dados[124000].DataVencimentoPrimeiraParcela).TotalDays >= 30 ? obj.Dados[124000].DataVencimentoPrimeiraParcela : obj.Dados[124000].DataVencimentoPrimeiraParcela.AddMonths(1)
obj.CPF.ToString().PadLeft(11, '0') == "00112345678"
new string[4] { "10", "20", "15", "30" }.Contains((string)obj.Especie)
decimal.Parse(obj.Dados[4500].ValorMargemCartao5) >= obj.Valor_RMC
(Math.Truncate(100 * obj.ValorParcela) / 100).ToString() == "1235,45"
Decimal.Round(Decimal.Parse(obj.TaxaCetAA), 2)
Formato dia/mês/ano | Convert.ToDateTime(obj.Data_Nascimento).ToString("dd/MM/yyyy") |
Formato Ano/mês/dia | Convert.ToDateTime(obj.Data_Nascimento).ToString("yyyy/MM/dd") |
Exemplo: OBS: Atentar para as aspas duplas. " = correta “ = errada |
Conta | obj.ContaComDig.Remove(obj.ContaComDig.Length - 1) |
Digito | obj.ContaComDig.Substring(obj.ContaComDig.Length - 1,1) |
Exemplo: |
Utilizando Expressões Regulares
Para utilizar expressões regulares para localizar determinado dado no OCR de uma imagem, devemos utilizar o método CampoDocumento da API SWorks.Core. No exemplo abaixo estamos pegando a data de admissão no contracheque.
Outros exemplos de expressões regulares:
Admiss.o\s*(\d{2}/\d{2}/\d{4}) -- Pegar após a palavra Admissão a data 99/99/9999
Agencia:.*?(\d{4}) -- Pegar o número da agência após a palavra “Agencia:”, 4 próximos caracteres numéricos.
Banco.*?:(.*?)Agencia: -- Pegar o nome do Banco entre as palavras “Banco”e “Agencia:”
Exemplo de tratamento dados retornados em DadosJson
Se for coleção ... tem que ter o IEnumerable
((IEnumerable<dynamic>)obj.DadosJson[300].erros).Any(m=> m.mensagem == "Nada consta")
Se for um dado normal ... obj.DadosJson[ordemtarefa].nomedo dado
Exemplo lendo Json somando um dado de acordo com outro, neste exemplo soma o valor de acordo com a discriminação.
((IEnumerable<dynamic>)obj.DadosJson[10].DeclaracaoImpostoRenda.DeclaracaoBensEDireitos.BensEDireitos).Where(p => p.Discriminacao?.ToString()?.StartsWith("73") ?? false).Select(p=> double.Parse(p.ValorAtual?.Value?.ToString()?.Replace(".", ""))).Sum(p => (double)p)
Exemplo lendo Json somando um dado de acordo com outro, neste exemplo soma o valor de acordo com a fonte pagadora.
((IEnumerable<dynamic>)(obj.DadosJson[10].DeclaracaoImpostoRenda.RendimentosTributaveisPessoaJuridicaTitular.RendimentosTributaveisTitular)).Where(a => a.FontePagadora == "total").Select(a => (double)Convert.ToDouble(a.ImpostoRetidoFonte.ToString().Trim(), new System.Globalization.CultureInfo("pt-BR"))).Sum()
((IEnumerable<dynamic>)obj.DadosJson[12700].Dados).FirstOrDefault(p => p.contaInativa=="false").dataAberturaConta
((IEnumerable<dynamic>)(obj.DadosJson[10].DeclaracaoImpostoRenda. RendimentosSujeitosTributacaoExclusiva. TiposTributacoes)).FirstOrDefault(x => x.Tipo == "Total")?.Valor
Exemplo para ler dados de objeto relacionamento
Um exemplo:
obj.Socios.ToList()[0].Nome
Socios --> nome do meu relacioinamento
obj.Socios.Count() > 0 ? obj.Socios.ToArray()[0].Nome : string.Empty
Exemplo para somar dados de objeto relacionamento
((IEnumerable<dynamic>)obj.Socios).Sum(p => decimal.Parse((string)p.NotaRiscoSocio))
Regex de CPF e Data de Nascimento para Cartão CPF:
(([0-9]{2}[\.][0-9]{3}[\.][0-9]{3}[\/][0-9]{4}[-][0-9]{2})|([0-9]{3}[\.][0-9]{3}[\.][0-9]{3}[-][0-9]{2}))
GRUPO: 3
([0-9]{2}\/[0-9]{2}\/[0-9]{4})
GRUPO: 1
FaceMatch:
obj.Documentos["Identificação Pessoal"].FaceMatchTexto >= 70
Transformar extração estruturada em números para somar:
decimal.Parse((obj.TotalRendimentosTributaveis).Replace(",","")) + decimal.Parse((obj.ImpostoARestituir).Replace(",",""))
Data Final subtraída da Data de Hoje:
(int)((DateTime.Now - Convert.ToDateTime(obj.DataManutencaoBeneficio)).TotalDays / 30)
Descobrir se é menor idade:
((int)((DateTime.Now - Convert.ToDateTime(obj.DATA)).TotalDays / 360)) < 18
Tirar pontos, traços, espaços, barras etc:
(obj.cpf).Replace(".","").Replace("-","").Replace("/","").Replace(" ","")
Verificar se o dado existe:
obj.Documentos["Identificação Pessoal"].FaceMatchTexto == null ? false : true
Subtrair uma Data de outra para saber a diferença de dias:
((int(( Convert.ToDateTime(obj.DataVencimento) - Convert.ToDateTime(obj.DataPagamento)).TotalDays)) >=0
Buscar toda linha baseada em um index no Template Extração do Atomics
https://poc.simply.com.br/Sworks.V26/Processo?codigo=2408#collapse_documentos
obj.Documentos["Demonstrativo BB"].Tabela_Mes_Valor_Mes[obj.Documentos["Demonstrativo BB"].Tabela_Mes_Verba_Mes.IndexOf("010 VENCIMENTO PADRAO-VP")] ?? "0"
Converter DateTime em String (Data)
obj.Documentos["RG"].ExpedicaoTexto.ToString("dd/MM/yyyy")
REGEX para Atomics
CPF:(?<CPF>.*?)DOCUMENTO
conta \(com DV\): (?<Conta>.*?)Declaro|conta com DV\): (?<Conta2>.*?)Declaro
Verificar se um Dado de Entrada está contido em outro (PROVA DE VIDA):
obj.Documentos["Selfie"].ProvaVidaTexto.Contains(obj.ProvaVida)
Somar duas Strings e depois transformar para número com Ponto e Vírgula:
(decimal.Parse((obj.RendIsentos).Replace(",","").Replace(".","")) + decimal.Parse((obj.RendSujeitoTribExclusiva).Replace(",","").Replace(".","")))
Transformar um número (ex: 655454) em números com Ponto e Vírgula (ex: 6.545,54):
(Convert.ToDouble(obj.IsentoTribExclusiva) / 100).ToString("#,###.00")
Altera campo Expressão:
(obj.DataHoje == null || obj.DataHoje == "")? Convert.ToDateTime(System.DateTime.Now) : Convert.ToDateTime(System.DateTime.Now)
Concatena 2 objetos e remove 2 últimos caracteres
obj.BancoBeneficio + "/" + obj.AgenciaBeneficio.Remove(obj.AgenciaBeneficio.Length - 2)
Remover Zeros a esquerda
(obj.Matricula).TrimStart(new Char[] {'0'})
Arredondar valor em 2 casas decimais
Math.Round(((obj.ValorParcela / obj.ValorBeneficio) * 100), 2) == 2
Converter string para DateTime
DateTime.Parse(obj.DataCadastroStr).ToString("dd/MM/yyyy")
Convert.ToDateTime(obj.Documentos["Identificação Pessoal"].ExpedicaoTexto)
Verifica se um valor de uma String é par ou ímpar
string CPF = "07101981674";
Decimal.Parse(obj.Codigo.Substring(7,1)) % 2 == 0
Validar se são 11 caracteres e somente números
Regex.IsMatch(obj.cpf, @"^\d{11}$")
Expressão para verificar se existe o objeto “DadosJson” antes de verificar o resultado.
obj.DadosJsonContainsKey(numero e ordem da tarefa)
Neste exemplo estamos verificando se a tarefa de numero de ordem 20 existe DadosJson.
Expressão para verificar se um campo retornou no DadosJson.
@Convert.ToDouble(obj.Dados[2500].Valor.Replace(" ", String.Empty).Replace("X", "0")).ToString()
@Convert.ToInt32 - converte o texto para números
@Convert.ToDouble - converte o texto para números mais extensos
.Replace(" ", String.Empty) - substitui os espaços deixando em branco (sem espaços)
.Replace ("X", "0") - substitui o digito X das contas do banco do brasil pra 0
.ToString() - converte pra texto
Verificar qual documento foi tipificado dentro de um grupo
obj.Dados[30].DocumentosEncontrados.Contains("CNH")
Dados -> Pegue da tarefa que utiliza o método “obriga documentos” e especifique o formulário que deseja encontrar com Contains.
Concatenando valores
String.Concat(00416968,DateTime.Now.ToString("yyyyMMddhhmmss"),1)