Padrão TISS

8 Comentários

Quem desenvolve aplicações voltadas para clínicas e hospitais que atendem pacientes assistidos por planos de saúde deve conhecer bem o Padrão TISS. Este padrão é “obrigatório para as trocas eletrônicas de dados de atenção à saúde dos beneficiários de planos, entre os agentes da Saúde Suplementar. O objetivo é padronizar as ações administrativas, subsidiar as ações de avaliação e acompanhamento econômico, financeiro e assistencial das operadoras de planos privados de assistência à saúde e compor o Registro Eletrônico de Saúde”.

Não vamos entrar em detalhes sobre a utilização do esquema. Apenas estamos disponibilizando nossa contribuição para os desenvolvedores e usuários. Primeiramente, desenvolvemos uma pequena aplicação para registro das guias de atendimento realizadas no prestador. O objetivo deste registro é gerar um arquivo XML contendo lote de guias no padrão TISS que será enviado a operadora do plano de saúde correspondente para faturamento. O nome da aplicação é RSFatTISS – Faturamento TISS. O padrão adotado nessa aplicação é o TISS 3.00.00. Para saber mais sobre essa aplicação acesse http://reginaldojr.wordpress.com/sistemas-c-codigo-fonte/rsfattiss-faturamento-tiss-3-00-00/. A segunda contribuição é um Validador TISS 3.00.00 de uso gratuito. Se voce tem uma aplicação que gere o arquivo XML do padrão TISS 3.0 e quer saber se seu arquivo está de acordo com o padrão, voce pode utilizar gratuitamente nosso validador. Ele verífica: a) estrutura XML do arquivo, b) o formato dos dados e c) o código hash do arquivo. Acesse o validador em www.reginaldojr.com.

É isso.

Nosso Agradecimento: 100.000 visitantes

Deixe um comentário

Há cinco anos atrás decidimos criar um espaço com o intuito de contribuir e ajudar a outras pessoas no aprendisado e solução de problemas da área de  desenvolvimento de sistemas. Surge, então, o Reginaldo Jr. Weblog. Nesse espaço publicamos material fruto da experiência acumulada ao longo de mais de 20 anos. Aqui nós disponibilizamos textos, links, dicas, projetos com código fonte e tudo que possa ajudar pessoas que desejem trilhar caminhos relacionados a construção de sistemas de informação. A proposta é prestar consultoria e auxiliar aos que necessitem de algum auxílio.

Esta semana atingimos a marca de 100 mil visitantes. Pessoas que nos visitam, pessoas que lêem nossas publicações, pessoas que adquirem nossos produtos, pessoas que registram comentários, pessoas que pedem ajuda e opinião, pessoas que nos encontram pelos diversos buscadores, pessoas que nos ligam, pessoas que nos seguem, pessoas que nos contratam para realização de serviços e, enfim, AMIGOS que, direta ou indiretamente, ajudam a manter este serviço. Nosso muito obrigado a todos. Temos registro, inclusive de visitantes de outros países e isso mostra quão útil esse trabalho tem sido.

Quero deixar também um agradecimento muito especial às pessoas que adquirem nossos produtos, seja pra estudo, seja pra uso. Através da confiança em nós depositada, essas possoas nos enviam contriuições financeiras em troca de nossos produtos sem ao menos saber a situação real do projeto. Mas Graças a Deus, temos tido muito sucesso nisso. Jamais recebemos qualquer reclamação. Isso por que esse nosso trabalho é feito com amor e dedicação. Tudo com muita qualidade de profissionalismo.

Nosso muito obrigado a todos e esperamos que os próximos visitantes também se beneficiem do que já existe e do que estar por vir. Aproveito pra anunciar atualizações em nosso conteúdo. Estaremos publicando novas matérias e disponibilizando novos projetos.

É isso…. Grande abraço a todos.

Busca Incremental em ASP.NET com Javascript

Deixe um comentário

Um recurso interessante para pesquisa de dados é a chamada “Busca Incremental”. É uma forma de implementar a pesquisa onde as informações encontradas são exibidas ao mesmo tempo que o dado de filtro é digitado no campo específico. Ou seja, na medida em que a informação procurada é digitada, a cada letra, os resultados vão sendo exibidos e filtrados de acordo com as informações ou letras que já foram digitados. Por exemplo, imagine um banco de dados de uma empresa com um cadastro de funcionários. Deve haver na empresa um sistema para cadastramento dos funcionários e nesse sistema deve ter uma tela ou módulo de pesquisa de funcionário. Uma das formas utilizadas para pesquisa é por nome. Nessa tela deve haver um campo para digitação do nome do funcionário a encontrar.  A Busca Incremental funcionaria assim: se o funcionário pesquisado se chamar ANA MARIA DOS SANTOS, quando digitar a primeira letra, no caso ‘A’, todos os funcionários que comecem com essa letra já são automaticamente exibidos, mesmo sem ter pressionado a tecla ENTER ou um botão de envio. Se em seguida, for digitada a letra ‘N’, o sistema irá exibir apenas os funcionários iniciados pelas letras ‘AN’. Na sequência, se for digitado a letra ‘A’, a nova exibição de dados será apenas os nomes iniciado pelas letras ‘ANA’. O processo segue a cada letra informada até que o resultado da pesquisa mostre apenas o nome procurado.

Em sistemas desktop, ou seja, sistemas executados localmente, esse processo é bem simples de implementar. Utiliza-se um campo texto onde os dados do filtro serão digitados e um grid onde os resultados serão exibidos. No evento OnKeyPress do campo texto (evento que é executado sempre que uma tecla for pressionada) implementa-se um algoritmo que realiza a pesquisa no banco de dados baseado nas letras já digitadas no campo texto e o resultado é, então, mostrado no grid. Sempre que uma nova letra for digitada no campo texto o algoritmo repete a pesquisa com a nova sequência de letras e atualiza o grid com os novos resultados obtidos.

A coisa se complica um pouco em sistemas web. Uma página web funciona mais ou menos assim: o usuário, utilizando um navegador web, envia uma requisição de página ao servidor web que, por sua vez, processa a solicitação e envia uma resposta à solicitação do usuário na forma de página web, de volta ao navegador do usuário. Sempre que o usuário clicar em um botão ou link, uma nova requisição é enviada ao servidor que processará a solicitação e retornará com a página de resposta. O detalhe é que o vai e vem de solicitações e respostas são na forma de página com várias informações. Na busca incremental, a digitação de cada letra no campo de pesquisa deverá enviar uma solicitação ao servidor web que, por sua vez, deve processar a pesquisa no banco de dados e devolver a página de resposta. Esse vai e vem de página inviabiliza o processo. Será preciso utilizar de recursos que minimizem esse e outros problemas. A seguir vamos descrever os problemas e as soluções que utilizamos no processo de implementação de um sistema de busca incremental.

CONTEXTO

Para implementar a busca incremental utilizamos o Cadastro Internacional de Doenças – CID 10 da Tabela Unificada do SUS. Esse cadastro possui aproximadamente 15.000 registros. Na realidade a escolha dos dados não foi o mais importante e sim a quantidade de informações. Isso para testar a eficiência do algoritmo com grande quantidade de dados.

AMBIENTE DE DESENVOLVIMENTO

O ambiente de desenvolvimento web escolhido foi ASP.NET com AJAX Extensions. Utilizamos o Visual Studio 2010 Profissional com o Service Pack 1 instalado. A instalação dessa ferramenta já vem com todos os recursos necessários. O banco de dados foi o SQL Server 2008 Express. A tabela CID foi adicionada ao banco de dados e esta tabela possui a mesma estrutura e dados da Tabela Unificada do SUS.

É importante que o leitor tenha experiência com esse ambiente uma vez que esse material não é apostila nem tutorial. Apenas apresentamos a nossa experiência na construção da solução. Quem desejar pode adquirir a solução completa, com fontes, para maior conhecimento e aprofundamento dos conceitos aqui apresentados. Para saber como, acesse http://reginaldojr.wordpress.com/sistemas-c-codigo-fonte/.

CONSTRUÇÃO DO ALGORITMO

No Visual Studio, criamos uma aplicação web vazia e adicionamos uma página do tipo WebForm onde realizamos nossos testes. Primeiramente implementamos a forma tradicional de realizar a pesquisa de CID que é colocar um TextBox e ao lado um Button. Logo abaixo, adicionamos um Grid e no evento OnClick do botão implementamos um algoritmo de pesquisa ao banco de dados com o filtro baseado na informação digitada no TextBox. Quando alguma informação for digitada no TextBox e o botão for clicado, a pesquisa é realizada e o resultado é exibido no Grid. Mas não é isso que queremos. Desejamos que o algoritmo de pesquisa ao banco de dados seja disparado a partir da digitação de cada letra ou digito no TextBox, sem a necessidade de se clicar no botão.

  1. Será necessário executar o mesmo algoritmo de pesquisa que foi implementado no botão quando for pressionada uma letra ou digito no campo de pesquisa. Para tanto, teremos que recorrer ao Javascript, no evento onKeyUp do TextBox, e neste evento será necessário executar o algoritmo de pesquisa e exibição do resultado que foi implementado no botão. Em dialeto ASP.NET; deverá ser executado um Postback quando uma tecla for pressionada no TextBox e o evento onClick do botão (que implementa a pesquisa de dados ao banco) deve ser executado no servidor para retorno dos resultados.
  2. Na forma tradicional, um clique no botão provoca uma recarga na página para exibição dos dados de retorno (PostBack). Não é interessante que haja recarga total de página a cada tecla pressionada. Para isso devemos utilizar chamada assíncrona (AJAX). Na página ASP.NET devemos incluir os componentes de chamada AJAX para que o resultado da pesquisa seja exibido sem necessidade de recarga total da página; seja na pesquisa tradicional através do botão, seja na pesquisa disparada pelo pressionar de uma tecla no TextBox.
  3. 3. Na forma de busca incremental, após qualquer pesquisa e exibição do resultado, o cursor deve estar sempre sobre o TextBox e no final da sequência de letras para permitir a digitação de novos dados. A utilização da função Focus() do TextBox coloca o cursor sobre o Textbox mas não o posiciona ao final da sequência de letras. Infelizmente, no ASP.NET não possui (ou não tenho conhecimento de) como fazer este posicionamento no final da sequência após o Focus(). Pra resolver o problema será preciso recorrer ao Javascript para posicionar o cursor ao final da sequência de letras no TextBox sempre que receber o foco da aplicação.
  4. 4. O processo de pesquisa e acesso ao banco é relativamente lento dentro desse processo de busca incremental. Então quanto menos vezes forem realizadas acessos ao banco de dados melhor. A nossa solução consiste em realizar a primeira pesquisa ao banco (quando a primeira letra for digitada no TextBox) e guardar esses resultados em memória. Quando as próximas letras forem digitadas os filtros serão realizados nos dados em memória; uma vez que o resultado da pesquisa realizada a cada letra será sempre um subconjunto dos dados do filtro anterior. Essa realização de filtro com os dados já em memória tem desempenho melhor que acessos constantes ao banco de dados.

AVALIAÇÃO DOS RESULTADOS

O processo é bem interessante e útil. Inclusive o site de busca da Google utiliza essa forma de pesquisa. No nosso contexto o procedimento apresentou desempenho satisfatório. Claro que em ambiente web a velocidade de envio de requisição e recebimento de resposta depende de fatores como: velocidade de conexão, velocidade de processamento no computador do usuário, velocidade de processamento no servidor web, etc. Quando a primeira letra é digitado no TextBox uma requisição relativamente lenta é feita ao banco de dados. A partir da segunda letra o filtro é realizado diretamente em memória e assim, o desempenho é melhor. Por conveniência, a primeira pesquisa ao banco é feita após a digitação de duas letras e dependendo do contexto podem-se utilizar mais letras na primeira pesquisa. As pesquisas realizadas com a massa de dados (15.000 registros) também atendeu a expectativa.

O leitor pode pessoalmente testar os resultados da implementação deste algoritmo. Para tanto, acesse a pesquisa de CID no meu site pessoal, http://www.reginaldojr.com/PesquisarCid.aspx. Se for possível, após a visita ao site, deixe um comentário aqui no blog com sua opinião sobre a pesquisa.

Também, quem desejar ver a implementação completa do algoritmo pode adquirir o Projeto PesqCidWeb com fontes. Para maiores informações acesse http://reginaldojr.wordpress.com/sistemas-c-codigo-fonte/.

Gravar Arquivos em Banco de Dados

2 Comentários

Uma possibilidade interessante para armazenamento de arquivo é a utilização de banco de dados para guardar os arquivos. A primeira vista, esta possibilidade parece complicada quando comparada ao armazenamento tradicional que é utilizando pastas e diretórios; forma utilizada por sistemas operacionais em seu sistema de arquivos. De fato, o armazenamento de arquivos em pastas nos CDs, DVDs, HDs, PenDrive, etc. é muito simples. Basta copiar o arquivo em alguma pasta desses dispositivos e, quando houver a necessidade, o arquivo pode ser resgatado bastando reencontrar o arquivo no local onde foi copiado anteriormente.

O problema começa quanto existe centenas ou milhares de arquivos a serem armazenados, por exemplo, as diversas monografias geradas pelos alunos de uma universidade. Armazenar é fácil. Basta copiar o arquivo gerado em uma pasta de um CD, por exemplo e guardar este CD em local seguro. Se existe milhares de arquivos espalhados em vários CDs, a dificuldade aparece quando se deseja encontrar um arquivo específico que pode estar em qualquer dos CDs. Possivelmente todos os CDs precisarão ser investigados para localização de um arquivo específico. A complexidade aumenta se a necessidade for por encontrar um arquivo que possua um certo conteúdo. Cada CD será investigado e, ainda, cada arquivo presente no CD precisará ser aberto e lido na tentativa de se identificar o assunto ou conteúdo tratado no arquivo.

Seria muito pertinente se houvesse um sistema indexador desses arquivos, ou seja, um sistema que fosse possível armazenar a localização e identificação de cada CD, bem como os arquivos que o compõe. Além disso, um resumo dos dados do arquivo poderia ser armazenado para facilitar a identificação do seu conteúdo. O sistema poderia, também, realizar pesquisas ou filtros para identificar quais arquivos satisfazem às condições passadas.

A utilização de um sistema indexador como apresentado acima já resolveria o problema de pesquisa de arquivo, aumentando a velocidade de localização. Uma vez realizada a pesquisa e localizado o arquivo procurado, basta identificar o CD onde o arquivo está e ir até ele para copiar o arquivo procurado. A questão agora é ter que ir ao CD ou qualquer outro dispositivo de armazenamento para acessar o arquivo. Poderia ser interessante que o sistema citado acima pudesse armazenar uma cópia desse arquivo. Assim não haveria necessidade de recorrer a nenhum meio físico para cópia e resgate do arquivo. Note como isso abre várias possibilidades de uso: os arquivos podem ser criados a partir de documentos, ou seja, documentos em papel podem ser transformados em arquivos digitais e serem armazenados no sistema. Esse procedimento poderia ser muito útil em escolas para armazenamento de trabalhos de alunos, fóruns judiciários para controle de processos, hospitais para armazenamento de prontuários ou qualquer lugar que gere documento que necessite de guarda prolongada. Assim o arquivo físico poderia está guardado em local seguro e o arquivo digital poderia está no sistema para leitura e impressão quando necessário. Recorrer ao arquivo físico, só quando necessário. Associado a tudo isso poderia-se utilizar algum tipo de certificação digital para garantir a validade legal do arquivo digital, mas isso é uma outra história.

De fato, um sistema capaz de armazenar arquivos é muito útil para várias aplicações. Já deve estar claro que o sistema estará fazendo o armazenamento dos arquivos e informações em um banco de dados e, assim, todos os conceitos e recursos relacionados a SGBD (Sistema Gerenciador de Banco de Dados) estão disponíveis e envolvidos no sistema. Uma grande vantagem dessa abordagem é a realização de cópia de segurança para evitar perdas; os backup’s. Passa a ser uma responsabilidade do SGBD garantir a segurança da informação e evitar perda de dados ou dos arquivos armazenados.  Quando for feito o backup do banco de dados, diretamente está sendo feito o backup dos arquivos armazenados nesse banco. A periodicidade desses backups e o local armazenado são fatores importantes que podem garantir a recuperação de dados quando ocorrer alguma falha de hardware.

Para demonstrar essa ideia, desenvolvemos o ARQDOC – Armazenamento de Documentos em Banco de Dados. Este sistema permite guardar em banco de dados arquivos diversos. O próprio usuário pode categorizar seus arquivos, associar, se for o caso, a um documento físico armazenado em uma sala e importar o arquivo digital correspondente para o banco de dados do sistema. Posteriormente o usuário pode usar o SGBD para realização de backups que estarão salvando seus dados de forma segura. O resgate de arquivos no ARQDOC também é muito simples: basta realizar pesquisa por nome do arquivo, resumo, autor, conteúdo textual de alguns tipos de arquivos, etc. Para maiores informações acesse http://reginaldojr.wordpress.com/sistemas-c-codigo-fonte/arquivamento-de-documentos-em-banco-de-dados/.

Google Maps com Javascript

4 Comentários

Em post anterior comentei sobre um componente que insere o recurso Google Maps em página ASP.NET. Este componente pode se integrar ao Visual Studio e isso facilita o seu gerenciamento. Clique aqui e leia mais. Neste post vamos utilizar o Google Maps e configurá-lo através de sua API. Isso é feito inserindo comandos Javascript em nossa página.

Separei três recursos interessantes que podem ser utilizados para enriquecer os sites e facilitar a vida dos usuários:

  1. Recurso para localização de uma localidade no mapa: se você tem um site na Internet que divulga serviços e/ou produtos, seria interessante facilitar o acesso dos usuários ao estabelecimento. Se a empresa recebe ligações de pessoas solicitando o ponto de referência para facilitar o acesso, que tal exibir um mapa no seu site apontando a localização do estabelecimento?
  2. Recurso para exibir uma possível rota entre duas localidades: como complemento ao posicionamento do estabelecimento no mapa, pode-se mostrar um caminho para o estabelecimento. O site pode mostrar a localização do estabelecimento, solicitar a localização atual do cliente e traçar uma rota no mapa.
  3. Recurso para cálculo de distância entre duas localidades e tempo de viagem: para quem trabalha com viagens pode ser interessante calcular, por exemplo, a distância entre duas cidades e tempo aproximado numa possível viagem entre elas. Além disso, utilizar essa distância para cálculos de diárias, reembolsos, etc.

Esses e outros recursos podem ser adicionados a qualquer site utilizando a API do Google Maps.  Claro que não é tudo tão simples assim. Por exemplo, no terceiro recurso sugerido, mostrar pelo Google Maps a distância entre duas localidades não é complicado. Mas, extrair essa distância para manipulação ou, por exemplo, armazená-la em um banco de dados, isso é mais complicado. A seguir, vamos mostrar como adicionar em um site os recursos citados acima utilizando a API Google Maps em Javascript.

Sugerimos utilizar o Visual Studio para realização dos experimentos. Porém, com as devidas adaptações, a maioria deles podem ser implementados em qualquer editor web. Não iremos tratar dos recursos e conceitos de desenvolvimento web e no Visual Studio. Deixamos a cargo de leitor pesquisar sobre o assunto: Visual Studio, desenvolvimento Web, HTML, CSS, Javascript, ASP.NET, Servidor WEB, etc. Vamos ao trabalho…

Na sua aplicação, crie uma página onde serão implementados os recursos do Google Maps. Para realização dos experimentos insira no corpo (entre as tags HTML <body> e </body>) da página as seguintes tags:

<script src=’http://maps.google.com/maps?file=api&v=2.x&amp;key=‘ type=’text/javascript’></script>
<div id=”mapa” style=”width: 70%; height: 480px; float:left; border: 1px solid black;”></div>
<div id=”rota” style=”width: 25%; height:480px; float:right;”></div>

Note que na primeira linha tem o parâmetro KEY. Se você for utilizar esse recurso em um servidor WEB real, deverá primeiro registrar este servidor no site da Google e receber uma chave que permitirá que seu site exiba os mapas. A chave pode ser adquirida aqui.

Localização de uma Localidade no Mapa

Após as linhas inseridas anteriormente adicione o seguinte script:

<script type=”text/javascript”>
var map;
function initialize() {
map = new GMap2(document.getElementById(“mapa”));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng( -12.977753,-38.507779), 15);
var textHtml = ‘<center><strong>Minha Marca</strong></center>';
var textHint = ‘Minha Marca‘;
var marker1 = new GMarker(new GLatLng(-12.977753,-38.507779), { draggable: false, title: textHint });
marker1.openInfoWindowHtml(textHtml);
GEvent.addListener(marker1, “click”, function () {
marker1.openInfoWindowHtml(textHtml);
});
map.addOverlay(marker1);
}
initialize();
</script>

Este script irá utilizar a DIV ‘mapa’ para mostrar um mapa e colocar uma marca em um ponto específico. Note que em vermelho tem as informações de latitude e longitude correspondente à alguma localidade. Existe várias formas de se descobrir essas coordenadas correspondente à localidade. Leia este post e os comentários que foram colocados. Nele o autor sugere uma forma de descoberta das coordenadas de uma localização e os leitores comentam essa forma ao mesmo tempo que sugere outras formas para identificar essas coordenadas. Voce de ler e escolher a forma que ache mais conveniente para você. Uma vez encontrada essas coordenadas faça a substituição no local específico do nosso script. No texto em azul você pode inserir um texto identicador para a marca inserida. A figura abaixo mostra o resultado esperado.

Como você pode ver, podemos inserir scripts em Javascript para trabalhar com a API do Google Mapas e manipular a exibição de marcas dentro do nosso mapa. Para demonstrar, adicionei o recurso ao meu site. Lá, é feita uma pesquisa por logradouro ou cep ao site dos Correios e os resultados encontrados são posicionados no mapa. Não deixe de ver. Acesse http://www.reginaldojr.com/BuscaCep.aspx.

Exibir uma Possível Rota entre Duas Localidades

Para inserir uma rota no mapa, substitua o script anterior pelo mostrado abaixo:

<script type=”text/javascript”>
var map;
var directionsPanel;
var directions;

function initialize() {
map = new GMap2(document.getElementById(“mapa”));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
directionsPanel = document.getElementById(“rota”);
directions = new GDirections(map, directionsPanel);
directions.load(“from: Rua do Carro, Salvador – Bahia, Brasil to: rua jardim santo antonio, salvador bahia“);
}
initialize();
</script>

Em vermelho estão a localização de origem e destino. Se nessas informações, possuir alguma inconsistência ou erro de digitação o mapa não será mostrado. Por isso é importante acessar o site do Google Maps para fazer testes com a origem e destino e, assim, identificar a melhor grafia para origem e destino da rota. A figura abaixo mostra uma rota traçada. Inclusive, no meu site pessoal também inseri o recurso para mostrar a rota e o mapa entre dois municípos brasileiros selecionados em caixas de seleção. Visite http://www.reginaldojr.com/RotasGoogleMaps.aspx e veja como ficou.

Distância entre Duas Localidades e Tempo de Viagem

No item anterior mostramos como exibir uma rota no mapa e um detalhamento dos caminhos que podem ser utilizados para sair do ponto A e chegar ao ponto B. O resultado exibe ainda outras informações: a distância total entre a origem e o destino,  o tempo médio para percorrer os dois pontos e a distância entre os trechos intermediários no caminho entre a origem e o destino. Pode-se, também, na origem e destino informar nomes de cidades. O Google Maps irá calcular a distância entre as cidades e o tempo estimado do percurso. Para realizar operações com estes valores basta transcrevê-los para um sistema especifico e efetuar os devidos cálculos. Assim, a princípio, a questão de cálculo da distância entre duas localidades e o tempo estimado de transporte está resolvido.

Mesmo funcionando bem, o procedimento de copiar da tela do Google Maps para o sistema específico não me parece muito elegante. Primeiro que, por ser um procedimento com interferência humana, podem ocorrer erros na transcrição. Seria interessante que o próprio sistema se conectasse ao Google Maps e extraísse os valores necessários. Pesquisando na documentação da API do Google Maps não consegui identificar uma forma automática de fazer essa leitura dos dados. Se alguém souber como, por favor, deixe seu comentário para ajudar a nós, pobres mortais. Para tentar resolver esse problema tive que apelar para um processo não muito ortodoxo. A inspiração veio desse post. O autor utiliza o conceito de raspagem de dados, ou data scrapping, que é uma forma de extrair informações diretamente da tela do computador. Leia mais sobre isso aqui. Para o nosso caso fizemos uma “raspagem de HTML” que consiste em receber dentro de um sistema o HTML gerado pelo Google Maps e pesquisar na sequência de tags e caracteres onde está nossa informação; no nosso caso, a distância entre os duas localidades e o tempo aproximado de viagem. Essa pesquisa nas tags HTML pode ser de forma sequêncial, randômica ou utilizando Expressões Regulares para fazer o casamento de expressão. Nossa opção foi pelas Expressões Regulares por parecer ter uma melhor performance. Como desejamos manipular a informação em sistema específico não faz sentido utilizar o Javascript para obter o resultado. Por isso utilizamos a linguagem C# na plataforma .NET para realizar o processo de raspagem. Quem tiver alguma observação ou proposta diferente da nossa, favor deixar um comentário.

Acompanhe o próximo post onde estaremos modelando uma aplicação que utiliza este procedimento: Cálculo de Distância e Tempo de Viagem entre Cidades Brasileiras.

Sistema de Registro de Visitantes

Deixe um comentário

Estamos disponibilizando mais esse programa. O objetivo  é controlar o acesso de pessoas que visitam estabelecimentos privativos. Através deste sistema pode-se registrar o número do documento de identificação, o destino e a imagem do visitante para posterior consultas. A imagem do visitante é capturada pela Webcam instalada no computador.

O programa foi desenvolvido em C# e .NET. O banco de dados utilizado é o Firebird. Contudo, o sistema pode ser modificado para utilização com qualquer banco de dados comercial.  A ferramenta de desenvolvimento da solução foi Visual Studio Profissional e pode ser aberta no VC# Express.

A solução foi desenvolvida em camadas e é composta de 5 projetos: um em Windows Forms, um para regras de negócios (BO), um para acesso a dados (DAO),  um para as interfaces e outro para mapeamento objeto-relacional. O projeto utiliza o NHibernate para persistência de dados.

Quem se interessar pode me mandar email ou acessar a página da aplicação para obter maiores informações.

EDWS – Sistema de Gerenciamento de Conteúdo

Deixe um comentário

Em certa oportunidade um usuário me pediu para construir um site para o estabelecimento onde trabalha. Eu perguntei qual o objetivo do site. Ele simplesmente respondeu que a chefia dele quem solicitou e ele não sabia nem por onde começar. Ele não tinha a menor idéia do que ia colocar no site. Fiz algumas sugestões de conteúdos e disse que ele deveria, primeiro, conversar com os setores do estabelecimento e colher informações para alimentar o site com notícias, fotos, informações, artigos, textos, etc.

Mas surgiu um problema: quem iria dar manutenção no site? EU? Sem chances!!!!!!! Foi aí que surgiu a idéia de construir um sistema gerenciador de conteúdo onde ele mesmo pudesse criar e gerenciar as páginas do site. A criação das páginas deveria ser bem simples, como se fosse um editor de textos. Procurei na Internet sistemas de CMS (Content Management System ou Sistema Gerenciador de Conteúdo) prontos que pudessem ajudar nessa tarefa e achei alguns: Blogs gratuitos, EVA (100% brasileiro), XOOPS, etc. Todos muito bons porém, para usuários com pouca ou nenhuma experiência, são exageradamente cheio de recuros. É bom que se diga, bons recursos. Mas para o meu problema, possivelmente eu tivesse que “dar um curso” de alguma dessas ferramentas para o usuário e o pior: ficar tirando dúvidas, etc. Sem falar nos problemas com a instalação do banco de dados.

Decidi construi algo mais simples, levando em consideração que o usuário só queria ter um local na Internet para divulgar informações. Construi o EDWS – Edição Dinâmica de WebSite. Esta primeira versão era bem limitada. Uma versão light. Tinha uns 3 layouts prontos, menu superior e lateral e dois recursos pré-formatados: uma página “Fale conosco” e uma outra para localização do estabelecimento no Google Maps. Adicionei também um contador de visita além de uns links para alguns serviços últeis: consulta de CEP e previsão do tempo. A edição das páginas era feita utilizando o FCK Editor. Já falei dele em posts anteriores. Documentação sobre este editor pode ser facilmente encontrado na Internet.

O fato é que o usuário ficou satisfeito e eu também. Ele fez o site e está no ar até hoje. Eu também gostei do resultado e decidi desenvolver outra versão para o EDWS. Nasce, então, o EDWS – Sistema de Gerenciamento de Conteúdo. Adicionei inúmeros outros recursos pré-formatados: blog, álbum, notícias, novos layouts, YouTube, etc.

Além de tudo, decidi disponibilizá-lo para quem desejar utilizar em seus trabalhos. Acho que o maior diferencial deste sistema é a simplicidade e facilidade de uso. Quem desejar conhecer mais sobre este sistema e baixá-lo pode acessar o blog que criei especialmente para este projeto: http://reginaldojr.wordpress.com/sistemas-c-codigo-fonte/edws/. Não há necessidade de adiquirir licença para utilizar a versão gratuita. Porém quem desejar suporte ou os fontes do programa poderá entrar em contato comigo para fazer-mos alguma negociação. A única limitação dessa versão gratuita é a exibição de um link para o blog do EDWS. Ah! O site da RS Consultoria & Sistemas foi feito com esta ferramenta.

É isso!

Older Entries

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.