quinta-feira, 18 de março de 2021

PostgreSQL - XML Pretty Function

PostgreSQL - XML Pretty Function


create extension if not exists xml2;

drop function if exists fnc_xml_pretty(pXML xml) cascade;

create or replace function fnc_xml_pretty(pXML xml) returns xml as
$body$
declare
  vRetorno xml;
begin

  vRetorno := xslt_process(pXML::text, '
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:strip-space elements="*" />
      <xsl:output method="xml" indent="yes" />
      <xsl:template match="node() | @*">
        <xsl:copy>
          <xsl:apply-templates select="node() | @*" />   
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    ');

  return vRetorno;

end;
$body$
language 'plpgsql' immutable strict;

--select fnc_xml_pretty('<root><a><b>some text</b></a></root>');

--Reference: https://postgres.cz/wiki/PostgreSQL_SQL_Tricks#Pretty_xml_formating

sábado, 9 de janeiro de 2021

React Hooks personalizado para formulário com múltiplos inputs


  • Utilizando o hook useState (tradicional)

Arquivo: form.js

import React, { useState } from 'react';

const Form = () => {
  const [nomesetNome] = useState('');
  const [sobrenomesetSobreome] = useState('');

  const submitHandler = e => {
    e.preventDefault();
    alert(`Nome completo: ${nome} ${sobrenome}`);
setNome('');
setSobreome('');
  };

  return (
    <div>
      <form onSubmit={submitHandler}>
        <div>
          <label>Nome:</label>
          <input value={nome} onChange={e => setNome(e.target.value)} />
        </div>
        <div>
          <label>Sobrenome:</label>
          <input value={sobrenome} onChange={e => setSobreome(e.target.value)} />
        </div>
        <button type="submit">Submit</button>
      </form>
    </div>
  );
};

export default Form;

  • Utilizando o hook useForm (personalizado/custom)

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