Apresentacao CBIS 2010

Post on 25-Jul-2015

176 views 0 download

Transcript of Apresentacao CBIS 2010

Projeto de Identificação de Pacientes do Cartão SUS do estado de São Paulo

Secretaria Estadual de Saúde de São Paulo - SESSP

Laboratório de Sistemas Integráveis e Tecnológico - LSITEC

Organização Pan-Americana da Saúde - OPAS

Laboratório de Sistemas Integráveis – LSI EP/USP

Emerson Moretto

Contexto

Estatísticas erradas Consultas incertas Registros homônimos ou são a mesma pessoa? Informações não confiáveis!

Os problemas

Banco de dados com pacientes replicados• Paciente cria um novo Cartão SUS a cada atendimento...• Mais de uma fonte de dados• Erros de digitação

O desafio

Identificar e remover pacientes duplicados em uma base com

~30 milhões de pacientes

Como resolver?

Mas...

Nenhum campo é 100% significativo

Comparação de nomes não é tão simples

Erros de digitação

Erros de fonética

Maior parte dos registros não possuem documentos

preenchidos

Comparando os registros entre si!

Comparar todos com todos?

30 mi comparando todos com todos:

449.999.985.000.000 comparações!

Computacionalmente falando*:

~ 2 anos* considerando que cada comparação de pacientes leva 1 ms

A solução

Criar conjuntos! (divisão e conquista)

ou seja,

Agrupar os possíveis pacientes duplicados

e depois,

Comparar todos com todos, porém somente

dentro do conjunto

Agrupamento

Cintia F Souza = CTASZ

Cintia Ferreira Sousa = CTASZCinthia F Souza = CTASZ

Sintia Sousa = CTASZ

Basta criarmos um Hash significativo para cada pacienteusando fonética e considerações sobre erros de digitação

Juliano Moraes = JLNMREGiuliano Moraes = JLNMREGiuliano Morais = JLNMRE

CTASZJLNMRE

Cintia Ferreira SousaMãe: Maria Sousa

Primeiro nome fonético + último nome fonético+ Primeiro nome da mãe fonético + último nome da mãe fonético

Hash significativo = CTASZMRSZ

Ex:

Comparando

Com os grupos de candidatos formados...

Realizamos as comparações entre os candidatos do mesmo grupo apenas

1 x 21 x 31 x 42 x 32 x 43 x 4

1. Cintia F Souza = CTASZ

3. Cintia Ferreira Sousa = CTASZ

2. Cinthia F Souza = CTASZ

4. Sintia Sousa = CTASZ

Grupo CTASZ

Progressãoaritmética

A comparação

É feita uma comparação estatística que gera um percentual de similaridade entre 2 pacientes

Para os nomes, usamos algoritmos de distância de caracteres considerando fonemas e erros de digitação Algoritmo Levenshtein (bastante modificado) Ex: Cinthya F Souza x Cintia Ferreira Sousa ~= 92,3%

Para as datas, algoritmos de consideração de erros de digitação baseados em erros comuns e na disposição do teclado Ex: 21/09/1982 e 12/09/1982 ~= 89% de similaridade

A comparação

nome Cinthya Fereira Souza x Cintia Ferreira Sousa

92,3% * peso (0.29)

nome da mãe Maria Souza x Maria Sousa

98,1% * peso (0.26)

nome do pai Paulo Oliveira Souza x Paulo Oliveira Souza

100% * peso (0.20)

data de nascimento 20/09/1982 x 21/09/1982

86% * peso (0.25)

Percentual de similaridade: 93,76 %

A comparação

if percentual de similaridade >= 68% {

Comparação é considerada candidata e vai para uma base de dados de comparação

O usuário analisa as comparações candidatas através de uma interface que acessa esta base

}

Demonstração

Tela de listagem

Tela de comparação

ArquiteturaBase de dados

Cartão SUSOracle 10g

Banco de dadosem árvore

desenvolvido pelo LSI

Thread de comparação Thread de

comparação

Thread de comparação

Distribuidor

ETL

Escalável sobreTCP/IP

Banco de comparaçõesPostgreSQL 8.4

Comparação>= 68%Interface do

usuárioFlex 3.4

Decisão dousuário

Algumas informações técnicas

Feito em Java 6 Multi-thread assíncrono sobre TCP/IP Interface do usuário em Adobe Flex 3.4 Desenvolvido e executando em Linux (CentOS) “Magic numbers” foram encontrados por análise

estatística Para processar os 30 milhões ~= 3 dias Atualização diária de novos registros

(~5.000 pacientes) leva 40s Tempo médio de cada comparação: 0,12 ms

Obrigado!

Emerson Moretto

emoretto@lsi.usp.brFinanciamento

Desenvolvimento