terça-feira, 1 de outubro de 2019

Habilitar o Python no PostgreSQL


  • Cenário

Windows 10
PostgreSQL 9.5 (instalado em C:\Program Files\PostgreSQL\9.5)
Python 3.7.4 - Windows x86-64 executable installer (python-3.7.4-amd64.exe - instalado em C:\Python\Python37)

  • Problema 1

Ao executar o comando:

create extension plpython3u;

Ocorre o erro:

ERROR:  could not load library "C:/Program Files/PostgreSQL/9.5/lib/plpython3.dll": unknown error 126

segunda-feira, 4 de março de 2019

Função para validação do CNS (Cartão Nacional de Saúde)


drop function if exists fnc_valida_cns_aux(pNumero text);

create or replace function fnc_valida_cns_aux(pNumero text) returns int as 
$body$
declare
  vArray char[];
  vSoma int;
  vNum int;
  vNum2 int;
begin

  vArray := regexp_split_to_array(pNumero, '');
  vSoma := 0;
  
  for i in array_lower(vArray, 1) .. array_length(vArray, 1) loop  
    vNum := vArray[i];
    vNum2 := 15 - i + 1;
    vSoma := vSoma + (vNum * vNum2);    
  end loop;        

  return vSoma;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns_def(pCNS text); 

create or replace function fnc_valida_cns_def(pCNS text) returns boolean as 
$body$
declare
  vPIS text;
  vSoma int;
  vResto int;
  vDV int;
  vResultado text;
  vRetorno boolean;  
begin

  vPIS := substring(pCNS, 1, 11);
  vSoma := fnc_valida_cns_aux(vPIS);
  vResto := mod(vSoma, 11);  
  vDV := 11 - vResto;
  
  if vDV = 11 then
    vDV := 0;
  end if;
  
  if vDV = 10 then
    vSoma := fnc_valida_cns_aux(vPIS) + 2;
    vResto := mod(vSoma, 11);  
    vDV := 11 - vResto;  
    vResultado := vPIS || '001' || cast(vDV as text);
  else
    vResultado := vPIS || '000' || cast(vDV as text);
  end if;
  
  vRetorno := pCNS = vResultado; 
  return vRetorno;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns_prov(pCNS text); 

create or replace function fnc_valida_cns_prov(pCNS text) returns boolean as 
$body$
declare
  vSoma int;
  vResto int;
  vRetorno boolean;  
begin

  vSoma := fnc_valida_cns_aux(pCNS);
  vResto := mod(vSoma, 11);
  
  vRetorno := vResto = 0; 
  return vRetorno;

end;
$body$
language 'plpgsql';

drop function if exists fnc_valida_cns(pCNS text); 

create or replace function fnc_valida_cns(pCNS text) returns boolean as 
$body$
declare
  vRetorno boolean;
  vCNS text;
begin

  vRetorno := false;
  
  vCNS := substring(regexp_replace(pCNS, '[^0-9]+', '', 'g'), 1, 15);
 
  if length(vCNS) = 15 then
  
    if substring(vCNS, 1, 1) in ('1', '2') then
      vRetorno := fnc_valida_cns_def(vCNS);
    elsif substring(vCNS, 1, 1) in ('7', '8', '9') then
      vRetorno := fnc_valida_cns_prov(vCNS);
    end if;
  
  end if;

  return vRetorno;

end;
$body$
language 'plpgsql';


Referências:

http://esusab.github.io/integracao/ledi/regras/algoritmo_CNS.html
http://www.yanaga.com.br/2012/06/validacao-do-cns-cartao-nacional-de.html

terça-feira, 21 de fevereiro de 2017

CashFlow - Fluxo de Caixa

O sistema CashFlow é uma ferramenta de BI para visualização dos dados financeiros do sistema Microsiga Protheus de forma interativa, simplificando as análises gerencias e as tomadas de decisões. 

Com uma interface visual muito simples e ao mesmo tempo poderosa para análise dos dados, a sua forma de apresentação dos dados em um "cubo" possibilita a modificação do modo de visualização e a aplicação de filtros em tempo real. 


Observação: Inicialmente desenvolvido para funcionar de forma integrada com os dados do Microsiga o sistema pode ser também adaptado para funcionar com os dados de outros sistemas.

terça-feira, 29 de março de 2016

Haralick: Descritor de Textura

Venho aqui compartilhar o artigo e a apresentação do trabalho sobre Descritores de Textura de Haralick apresentado em um seminário da disciplina de Processamento de Imagens Digitais no mestrado.

Textura


Textura é uma das importantes características usadas na identificação de objetos ou regiões de interesse em uma imagem. A textura é uma característica que pode ajudar a segmentar as imagens e classificar regiões de interesse. Existem diversas definições de textura, dentre as quais se podem citar:


  • Característica diretamente relacionada com as propriedades físicas que a superfície de um objeto representa. Descreve o padrão de variação de tons de cinza ou cor de uma determinada região de interesse (BACKES; BRUNO, 2006);
  • Um conjunto de determinados padrões existentes nas superfícies físicas, perceptíveis ao olho humano, e que trazem grande quantidade de informações sobre a natureza da superfície, como suavidade, rugosidade (GONZALEZ; WOODS, 2002);
  • Propriedade inata de praticamente todas as superfícies – o grão de madeira, a trama de um tecido, o padrão de culturas em um campo, etc. Contém informações importantes sobre o arranjo estrutural das superfícies e sua relação com o ambiente circundante (HARALICK; SHANMUGAM; DISTEIN, 1973);
  • Conjunto de determinados padrões existentes nas superfícies físicas, perceptíveis ao olho humano e que trazem grande quantidade de informação sobre a natureza da superfície, como suavidade, rugosidade e regularidade (LUZ ALVES; ARAÚJO; LIBRANTZ, 2006);
  • Variações locais em valores de pixel que se repetem de maneira regular ou aleatória ao longo do objeto de uma imagem (SCHWARTZ; PEDRINI, 2003);
  • Propriedade local de imagem, uma medida de intensidade de cinza entre os pixels e sua vizinhança (SCHOWENGERDT, 1983);
  • Textura é o que constitui uma região macroscópica. Sua estrutura é atribuída a padrões repetitivos no quais elementos ou primitivas são arranjadas de acordo com uma regra de posicionamento (Tamura, Mori e Yamawaki, 1978);

Implementação de um software para apoio logístico com estudo de localização geográfica

Venho aqui compartilhar o documento e a apresentação do trabalho de conclusão de curso sobre "Implementação de um software para apoio logístico com estudo de localização geográfica" apresentado na conclusão da graduação em Sistemas de Informação.





Implementação de um software para apoio logístico com estudo de localização geográfica


terça-feira, 15 de março de 2016

Função Slug PostgreSQL

Hoje irei dar um exemplo de criação de função de slug no PostgreSQL:

--select fnc_slug('Minha URL utilizando a função slug')
CREATE OR REPLACE FUNCTION promocoes.fnc_slug(pTexto varchar) RETURNS varchar AS
$body$
declare
  vSlug varchar;
begin
  vSlug := pTexto;

  /*
  vSlug := replace(vSlug , 'æ', 'ae');
  vSlug := replace(vSlug , 'œ', 'oe');
  vSlug := replace(vSlug , '€', 'euros');
  vSlug := replace(vSlug , '$', 'dollars');
  vSlug := replace(vSlug , '£', 'pound');
  vSlug := replace(vSlug , '¥', 'yen');

  vSlug := replace(vSlug, 'U$', 'dolares');
  vSlug := replace(vSlug, 'R$', 'reais');
  */

  vSlug := regexp_replace(translate(replace(lower(vSlug), ' ', '-'),
            'áàâãäå???ÁÂÃÄÅ???èééêë????????É??ìíîïì???ÌÍÎÏÌ???óôõö???ÒÓÔÕÖ???ùúûü????ÙÚÛÜ????çÇÿ&,.ñÑ',
            'aaaaaaaaaaaaaaaaaeeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuuccy_--nn'), E'[^\\w -]', '', 'g');

  while position('--' in vSlug) > 0 loop
    vSlug := replace(vSlug , '--', '-');
  end loop;

  return vSlug;

end;
$body$
LANGUAGE 'plpgsql'

quarta-feira, 16 de dezembro de 2015

Exemplo: SAP - RFC (Remote Function Call) com Delphi

Este é um pequeno exemplo em Delphi de como chamar no SAP uma RFC (Remote Function Call).

  • Preparação Delphi

Para este exemplo será necessário importar no Delphi os ActiveX Controls SAP Logon Control e SAP Remote Function Call Control, conforme as imagens abaixo: