Expressões C# no S-Works

Expressões C# no S-Works

      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


  • Exemplo 1


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.



  • Exemplo 2


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.


  • Exemplo 3


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.



  • Exemplo 4

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

  • Exemplo 5 (Cálculos de datas)


((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)


  • Exemplo 6 (Formatar CPF com zeros a esquerda)

obj.CPF.ToString().PadLeft(11, '0') == "00112345678"


  • Exemplo 7 para validar um dado em uma lista 

new string[4] { "10", "20", "15", "30" }.Contains((string)obj.Especie)

  • Exemplo 8 Converter string em decimal 

decimal.Parse(obj.Dados[4500].ValorMargemCartao5) >= obj.Valor_RMC

  • Exemplo 9 Truncando um valor para comparação 

(Math.Truncate(100 * obj.ValorParcela) / 100).ToString() == "1235,45"

  • Exemplo 10 arredondando um valor para comparação 

Decimal.Round(Decimal.Parse(obj.TaxaCetAA), 2)

  • Exemplo 11: Converter formato de data  

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 




  • Exemplo 12: Separar conta do digito, usando substring  

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()


Exemplo para ler um Json buscando por um campo e retornando outro.

((IEnumerable<dynamic>)obj.DadosJson[12700].Dados).FirstOrDefault(p => p.contaInativa=="false").dataAberturaConta

Exemplo lendo Json somando um dado de acordo com outro, neste exemplo soma o valor de acordo com a tipo.

 ((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


obj.Socios.ToArray()[0].dataNascimento


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

https://poc.simply.com.br/Sworks.V27/ProcessoDef/ConfigurarWorkflow?codigo_procdef=6244&guid_atividade=4b7d171a-703a-4c97-b664-5445b46636c7


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(",",""))

https://poc.simply.com.br/Sworks.V27/ProcessoDef/ConfigurarWorkflow?codigo_procdef=6218&guid_atividade=06fb91a6-418b-436d-b3f7-6ab3e1a8d19a


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)

Exemplo: obj.DadosJson.ContainsKey(20) && ((IEnumerable<dynamic>)obj.DadosJson[5825].Dados).Count() > 0

Neste exemplo estamos verificando se a tarefa de numero de ordem 20 existe DadosJson.

                              Expressão para verificar se um campo retornou no DadosJson.

Exemplo: obj.DadosJson[9999].aceiteBiometriaFacialProposta != null


                              Expressão para criar um GUID 
Exemplo: Guid.NewGuid()

                              Expressão para verificar quantidade de documentos não tipificados
Exemplo: obj.Documentos["DocNaoTipificado"].Quantidade

                        Converter um número que tenha espaços e letras 
(ex: objeto conta corrente banco do brasil = “0000 66799X”)
(resultado = “667990”)



@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)


Pesquisar um dado em retorno de corpo do documento

obj.Documentos["Contracheque Siape"].Corpo_Discriminacao.Any(item => item.Contains("comissionada"))


Somar campo de objeto relacionamento

Exemplo de procurar um dado em um Json e retornar o conteúdo de outro (chave e valor)
((IEnumerable<dynamic>)obj.DadosJson[10].Objetos[Convert.ToInt32(obj.ContadorPendencias)].DadosEntrada).FirstOrDefault(p => p.Nome=="PendenciaDocumentalAvalista").Valor

    • Related Articles

    • Expressões customizadas

      O S-Works possui a capacidade de interpretar expressões customizadas. Para que o S-Works interprete expressões customizadas (que não utilizem as palavras reservadas "obj." ou "par."), pede-se a inserção do arroba "@" no início da expressão. Para ...
    • O que significa cada cor das Tarefas em Execução na tela de diagnóstico?

      O grid de Tarefas em Execução representa a variedade de tarefas que estão com o status em execução apenas. Qualquer outro status não será exibido. À medida que as tarefas são executadas, a cor do fundo da linha que representa cada tarefa varia ...
    • Expressão para cálculo de idade

      Para cálculo de idade atual, é utilizada a seguinte expressão no S-Works: ((int)((DateTime.Now - Convert.ToDateTime(obj.DATA_NASCIMENTO)).TotalDays / 365)) Desmembrando a expressão: (int) - converte o resultado da divisão para um número inteiro; ...
    • Priorização de Processos no S-Works

      A priorização foi criada para permitir que determinados processos sejam executados antes dos demais. Ou seja, para processos que precisam ser executados com prioridade, é possível realizar uma configuração para que eles sejam executados primeiro. A ...
    • S-Works - Manual de Instalação da Versão 2.0 - v2 2 1

      Versionamento Versão Data Comentários 1.0 23/09/2020 Versão inicial do documento. Atualização do manual para conter etapas de instalação 2.0 20/01/2021 manual do sistema e seus módulos, assim como configuração dos mesmos. 2.1 21/01/2021 Revisão, ...