Introdução
As hospitalizações por condições sensíveis à atenção primária (CSAP) são um indicador indireto da efetividade da atenção primária à saúde (APS).1,2 No Brasil, seu estudo é facilitado pelos seguintes fatores: (i) disponibilização dos "arquivos reduzidos" das bases de dados do Sistema de Informações Hospitalares do Sistema Único de Saúde (BD-SIH/SUS), pelo Departamento de Informática do SUS (Datasus); (ii) publicação da Portaria do Ministério da Saúde (MS/GM no 221, de 17 de abril de 2008) com a Lista Brasileira de CSAP;3,4 e (iii) disponibilização de tabelas de conversão/arquivos .CNV, com suas correspondentes linhas nos arquivos de definição/arquivos .DEF, para a tabulação dessas internações pelo TabWin.5
O TabWin, programa criado pelo Datasus para a tabulação das bases de dados de diversos sistemas de informações em saúde existentes no Brasil, tem entre seus atrativos a (i) eficiência na tabulação de grande quantidade de dados, (ii) uma ampla gama de scripts pré-definidos para a tabulação das BD-SIH/SUS (entre outros sistemas de informações), a (iii) geração de mapas das unidades territoriais e administrativas de saúde brasileiras, a (iv) capacidade de ler os arquivos comprimidos (extensão .DBC, criada pelo Ministério da Saúde) da Autorização de Internação Hospitalar (AIH) e de (v) criar novos arquivos de bases de dados a partir da junção de arquivos .DBC com seleção de casos e variáveis, além da (vi) integração com o programa R,6 permitindo a exportação da tabela gerada para aquele programa.
O R é uma linguagem de computação voltada ao manejo e análise estatística avançada de dados, facilmente extensível mediante funções e pacotes criados pelo próprio usuário, para necessidades específicas. Trata-se de um software livre, apropriado a esse tipo de iniciativas, como os ‘esquemas de análise’: uma série de scripts disponibilizados pelo Datasus em seu portal, para a análise de dados em R. Infelizmente, a última atualização da página - bastante antiga - aconteceu em julho de 2005 (http://www2.datasus.gov.br/DATASUS/tabwin/rx/ListaRX.htm).
Uma tabela, muitas vezes, é inadequada à análise de interesse. Isto é menos frequente nos chamados estudos ecológicos mas, virtualmente, é o caso de todas as pesquisas que têm indivíduos como unidades de análise, a exemplo dos inquéritos hospitalares.7 Em tal situação, obriga-se à análise do banco de dados não tabulado, com uma das variáveis indicando se a causa da internação é ou não uma CSAP. Deve-se evitar a seleção causa por causa, para garantir a reprodutibilidade e minimizar a chance de erros na seleção dos casos. Sendo assim, o pesquisador terá de utilizar um programa de manejo ou análise de dados e finalmente, escrever a sintaxe de classificação das causas de internação para criar a variável.
A construção de um script para essa classificação é trabalhosa e bastante sujeita a erros, o que impõe alguns cuidados sobre determinados fatores: (i) deve-se conhecer as regras de sintaxe do programa e estar habituado a elas; (ii) os códigos da Classificação Estatística Internacional de Doenças e Problemas Relacionados à Saúde - Décima Revisão (CID-10) são alfanuméricos, e nem todos têm a mesma extensão (podem ter 3 ou 4 dígitos); e (iii) é grande a quantidade de códigos considerados CSAP, distribuídos entre 19 grupos de causas. Portanto, ferramentas que permitam a automação dessa etapa são oportunas.
Com o propósito de contribuir para o preenchimento dessa lacuna, este trabalho apresenta um pacote do programa R - que inclui uma função homônima - com o objetivo de automatizar a classificação de códigos da CID-10 segundo a Lista Brasileira de Condições Sensíveis à Atenção Primária e, principalmente, facilitar o trabalho com os arquivos descompactados da AIH (rd*.dbf), permitindo, também, operar qualquer vetor do R contendo códigos da CID-10. Este artigo apresenta o pacote e a função csapAIH, seu modo de instalação e uso, além de exemplos de suas funcionalidades.
Desenvolvimento do pacote csapAIH
O R funciona com objetos em um espaço de trabalho. Entre seus objetos mais simples estão os vetores, que combinam diferentes observações sobre uma variável; por exemplo, os códigos da CID-10 registrados como diagnóstico principal em uma série de internações hospitalares. Entre os objetos mais complexos do programa R estão os bancos de dados (data frames). Um vetor pode ser anexado como variável a um banco de dados.
Uma função no R é um comando, normalmente dirigido a um objeto, para a execução de uma série de cálculos ou transformações, e retorna um resultado, geralmente possível de ser convertido em um novo objeto. As funções têm seus argumentos, ou opções de execução. Os argumentos podem ser obrigatórios ou não, e ter um padrão de resposta estabelecido (default) ou não.
Para a construção da função csapAIH, consideraram-se as seguintes premissas:
Seu foco principal é o manejo dos arquivos da AIH, e assim a função deve ter por padrão opções voltadas à leitura e manejo dessas bases.
Para análises da proporção de CSAP entre as internações, é frequente o usuário interessar-se em excluir as internações que não são devidas a doença ou lesão, como os partos e curetagens por abortamento, e a função deve, portanto, ter uma opção (argumento) que, por padrão, exclua esses registros mas permita o contrário.
As AIH de longa permanência (AIH tipo 5: continuidade) são novas AIH geradas para a mesma internação,8 e devem ser excluídas para que uma mesma internação não seja considerada mais de uma vez na análise, embora o usuário possa se interessar em manter esses registros; logo, a função deve ter um argumento que, por padrão, exclua esses registros, mas permita o contrário.
Os arquivos da AIH têm uma série de variáveis (113, atualmente), muitas de interesse específico e pouco utilizadas na maioria dos estudos; ao trabalhar com esses arquivos, a função deve retornar um banco de dados com um conjunto mínimo - não demasiado extenso - de variáveis sobre o paciente e sua internação.
O usuário pode se interessar pela análise de outras bases de dados, ou simplesmente tabular uma série de diagnósticos; logo, a função deve ser capaz de classificar qualquer lista de códigos da CID-10.
Ainda que as BD-SIH/SUS registrem a data de nascimento do paciente (campo NASC), o registro da idade em anos completos deve ser feito por um algoritmo combinando os campos IDADE e COD_IDADE; convém que a função automatize esse processo.
A função está organizada em três momentos:
1o Leitura dos dados e, para os arquivos da AIH, seleção de registros e criação das variáveis idade (idade civil, segundo o algoritmo recomendado8) e faixa etária (detalhada, com 33 categorias; e quinquenal, com 17 categorias); utilizam-se as funções grepl do pacote base, read.dbf do pacote foreign9 e read.csv do pacote utils;
2o Classificação do código CID-10 do diagnóstico da internação em CSAP, como variável dicotômica, e em seus 19 grupos de causa, como variável politômica; e
3o Formatação do resultado retornado, se um banco de dados ou um vetor de classe fator, isto é, uma variável categórica, que pode permanecer como objeto isolado ou ser endereçada a um banco de dados existente no espaço de trabalho do R.
A função tem a seguinte estrutura:
Onde:
x é o alvo da função, sobre o qual serão aplicados os demais argumentos; ele pode ser:
a) um arquivo em formato .DBF ou .CSV, com uma base de dados contendo um conjunto mínimo das variáveis das BD-SIH/SUS:
b) um objeto da classe data.frame, com o mesmo conjunto mínimo das variáveis das BD-SIH/SUS, presente no espaço de trabalho;
c) um objeto da classe fator presente no espaço de trabalho - note-se que um fator pode ser tanto um objeto isolado quanto tomado isoladamente de uma base de dados, como em "base$variavel";
grupos: argumento lógico; se TRUE (padrão), será criada uma variável com a classificação da internação segundo o grupo de causa CSAP;
sihsus: argumento lógico; TRUE (padrão) indica que o alvo da função tem a estrutura mínima da BD-SIH/SUS citada anteriormente;
x.procobst: argumento lógico; TRUE (padrão) exclui as internações pelos procedimentos obstétricos citados na Tabela 1; ignorado se o alvo for um fator, se sihsus=FALSE ou se a base de dados incluir códigos da versão anterior da Tabela de Procedimentos do SIH/SUS;
longa: argumento lógico; FALSE (padrão) exclui as internações de longa permanência (AIH tipo 5);
cep: argumento lógico; TRUE (padrão) indica que o alvo da função é uma BD-SIH/SUS e que, além do conjunto mínimo de variáveis, tem o código de endereçamento postal (CEP) do indivíduo; o CEP será incluído no resultado da função; ignorado, se o alvo for um fator ou sihsus=FALSE;
cnes: argumento lógico; TRUE (padrão) indica que o alvo da função é uma BD-SIH/SUS e que, além do conjunto mínimo de variáveis, dispõe o número do Cadastro Nacional de Estabelecimentos de Saúde (CNES) do hospital em que ocorreu a internação; o número do CNES será incluído no resultado da função; essa variável foi incluída nos arquivos da AIH em agosto de 2003; para datas anteriores, o argumento deve ser definido como FALSE; ignorado, se o alvo for um fator ou sihsus=FALSE;
arquivo: argumento lógico; obrigatório, porém definido automaticamente pela função quando necessário; deve ser definido pelo usuário como FALSE apenas quando x contiver, em seu nome, as sequências dbf ou csv sem que isso seja a extensão de um arquivo; apenas arquivos com a estrutura citada acima podem ser lidos;
sep: permite a leitura de arquivos da AIH em formato CSV; pode ser ";" ou ",".
A exclusão das internações por causas obstétricas é realizada pelos códigos da Tabela de Procedimentos, Medicamentos, Órteses, Próteses e Materiais Especiais (OPM) do SUS. Essa tabela, instituída em 2007,10 unifica e substitui (desde 2008) as anteriores Tabelas de Procedimentos Ambulatoriais e Hospitalares do SIH/SUS. Assim, o argumento x.procobst só é válido para tabela unificada, sendo ignorado se os códigos forem incompatíveis com os listados na Tabela 1.
Fonte: Tabela de Procedimentos, Medicamentos, Órteses, Próteses e Materiais Especiais (OPM) do Sistema Único de Saúde (SUS) 9
Para facilitar a distribuição, instalação e carregamento da função no R, e permitir o uso de arquivos de ajuda integrados à sessão de trabalho, foi criado um pacote com o mesmo nome da função: csapAIH. Como foi escrito em português, não passa por todos os testes para submissão ao Comprehensive R Archive Network (CRAN),11 o repositório oficial de pacotes do R. Entretanto, em uma sessão do R com conexão à internet, o pacote csapAIH pode ser instalado desde seu repositório no portal GitHub (https://github.com/fulvionedel/csapAIH.git), por meio do pacote devtools, nas plataformas Linux, Mac OS X e Windows. Sua instalação, carregamento e utilização serão demonstrados na sessão seguinte. Maiores informações encontram-se no manual do pacote.12
Os arquivos reduzidos da AIH (RD*.dbf) utilizados como exemplos nos arquivos de ajuda e manual do programa, assim como neste artigo, não permitem a identificação do indivíduo e estão disponíveis, para acesso público, no portal do Datasus: Transferência de Arquivos >> SIH/SUS.13 Nos exemplos apresentados neste relato, o número da AIH foi substituído pelo número de ordem do registro na base de dados.
O script para a classificação das CSAP segundo a Lista Brasileira3 foi publicado, originalmente, em tese de Doutoramento.14 O repositório no GitHub é público, o que significa que está aberto a contribuições, sempre bem-vindas.
Instalação do pacote csapAIH
O pacote pode ser instalado a partir de arquivos locais ("csapAIH_0.0.1.zip" ou "csapAIH_0.0.1.tar.gz" - download em https://sourceforge.net/projects/csapaih/), pelo menu de instalação de pacotes da front-end/GUI utilizada (própria do R, RStudio, RKward...), ou a partir de seu repositório no GitHub. Com o pacote devtools previamente instalado, o comando devtools::install_github ("fulvionedel/csapAIH") instala o pacote:
Exemplos de uso
A seguir, são apresentados alguns exemplos de uso da função.
1. Um arquivo reduzido da AIH descompactado (RD*.DBF), armazenado no diretório da sessão de trabalho
Trabalhando com as opções-padrão da função, o usuário deve apenas digitar o nome do arquivo entre aspas (" ") e com a extensão. A função retorna um banco de dados com 16 variáveis (Tabela 2), sem os registros das AIH de longa permanência (repetidas) e das internações por procedimentos obstétricos. O número e a proporção desses casos são informados em uma mensagem ao final do processo. Como em qualquer ação análoga no R, o resultado deve ser direcionado a um objeto para que permaneça na sessão de trabalho ativa.
a) AIH: autorização de internação hospitalar
b) CSAP: condições sensíveis à atenção primária
c) CID-10: Classificação Estatística Internacional de Doenças e Problemas Relacionados à Saúde - Décima Revisão
d) CEP: código de endereçamento postal
e) CNES: Cadastro Nacional de Estabelecimentos de Saúde
O exemplo a seguir, com o arquivo da AIH para o estado de Santa Catarina em janeiro de 2015, apresenta o comando e os primeiros três registros do banco de dados criado:
Os primeiros três registros do banco de dados criado:
Os arquivos reduzidos da AIH compactados (extensão .DBC), disponibilizados para download no portal do Datasus, são organizados por Unidade da Federação (UF) e mês de referência (mês de faturamento) da AIH, com cada arquivo contendo o conjunto de dados para uma UF e mês de referência. Ao expandir esses arquivos para .DBF no TabWin, o usuário tem a opção de unificar a informação referente a um ano - exemplo: todos os meses de 2015 para os arquivos de Santa Catarina - ou a um ano e região - exemplo: todas as internações do Brasil em 2015 - em um único arquivo .DBF. A função pode ser utilizada com esses arquivos da mesma forma, sem mudar em nada seu comportamento.
2. Um arquivo da AIH como data.frame no espaço de trabalho
Se o arquivo da AIH já tiver sido lido e estiver presente no espaço de trabalho como um objeto da classe data.frame, essa situação é identificada pela função, e a sintaxe se modifica porque um objeto no espaço de trabalho é chamado sem estar entre aspas. No exemplo a seguir, o arquivo da AIH, primeiramente, é carregado como objeto no espaço de trabalho (pela função read.dbf, do pacote foreign) e, posteriormente, aplicada a função csapAIH sobre o objeto. Nota-se que a sintaxe de uso da função csapAIH difere do exemplo anterior apenas por não usar aspas:
Os primeiros três registros do banco de dados criado:
3. Arquivos da AIH sem as variáveis CNES ou CEP
A ausência das variáveis CNES ou CEP no arquivo da AIH resulta em erro quando a função é aplicada com seus argumentos-padrão, logo definidos como FALSE. O exemplo a seguir mostra o erro e a sintaxe adequada ao trabalho com um arquivo da AIH anterior a agosto de 2003, portanto sem a variável CNES (trabalha-se com o arquivo de dados de Santa Catarina referentes a janeiro de 2003):
Como versões anteriores das BD-SIH/SUS usavam outra codificação para os procedimentos, mesmo com o argumento x.procobst=TRUE (padrão da função, portanto não precisa ser anunciado), não foi excluído nenhum procedimento obstétrico.
4. Uma lista de códigos isolada ou como variável em um banco de dados sem a estrutura do SIH/SUS
Se o usuário estiver trabalhando com uma lista de códigos da CID-10 como objeto isolado no espaço de trabalho, deve-se definir o argumento arquivo=FALSE e então, a função retorna um banco de dados com as variáveis CID, CSAP e GRUPO. Se o objeto for definido como um fator, é desnecessário o argumento arquivo=FALSE porque a função o define internamente, como no exemplo a seguir:
Da mesma forma, pode-se trabalhar com uma base de dados sem o formato das BD-SIH/SUS. Aplica-se a função csapAIH sobre a variável com os códigos da CID-10 e, se for de interesse do usuário agregar as variáveis criadas ao banco de dados original, isto pode ser feito com a função cbind, como no exemplo abaixo, em que se aplica a função sobre uma base de dados de um inquérito hospitalar:7
O processo pode ser executado em um único passo:
Finalmente, se for de interesse do usuário criar apenas uma variável dicotômica sobre a classificação CSAP, define-se o argumento grupos como FALSE:
O mesmo procedimento pode ser aplicado quando o usuário quiser manter todas as variáveis do arquivo da AIH e apenas acrescentar a classificação CSAP. Por exemplo, o objeto bd foi criado anteriormente, com a leitura do arquivo da AIH para Santa Catarina em janeiro de 2015 (RDSC1501.DBF). Para acrescentar a classificação CSAP mantendo-se as demais variáveis da base, pode-se executar o seguinte comando:
A validade do algoritmo pode ser verificada comparando-se os resultados da função com os que é possível tabular pelo TabWin para um mesmo período. Escolheu-se um mês para São Paulo (arquivo RDSP1301.dbc/dbf) por este estado ser o mais populoso e portanto com maior probabilidade que outros estados de se observar as causas mais raras de internação.
A Tabela 3 mostra os resultados da tabulação das internações por CSAP entre os residentes do estado de São Paulo no mês de competência de janeiro de 2013, realizada pela função csapAIH sobre o arquivo RDSP1301.DBF. A Figura 1 apresenta os resultados da mesma tabulação, embora realizada pelo TabWin, utilizando-se os arquivos de conversão do Datasus sobre o arquivo comprimido RDSP1301.DBC. O número de registros processados, o total de CSAP e a frequência observada em cada grupo são os mesmos:
Considerações finais
O pacote e a função csapAIH apresentam-se como uma ferramenta adicional ao estudo das CSAP no Brasil. Eles foram desenvolvidos para suprir a falta de uma rotina computacional que (i) automatizasse o trabalho de classificação em nível individual da internação e (ii) facilitasse o manejo dos arquivos da AIH.
A função read.dbf não consegue ler arquivos .DBF com variáveis em que todos os registros são missings. Como a função csapAIH utiliza read.dbf para a leitura desses arquivos, ela sofre a mesma limitação. Nesses casos, antes da leitura no R, tais arquivos devem ser abertos em programa próprio e as variáveis excluídas. Destaca-se como principal limitação do pacote csapAIH a impossibilidade de ler os arquivos comprimidos da AIH (extensão .DBC), o que, além de evitar a necessidade de prévia expansão dos arquivos, reduz - em muito - o espaço ocupado em disco, já que o arquivo DBF resultante é muito maior que seu correspondente .DBC. Entretanto, como foi dito anteriormente, o projeto é público e colaboradores são bem-vindos.
A criação de um pacote no R para a classificação das CSAP e outras funcionalidades para o manejo dos arquivos da AIH oferece aos pesquisadores garantia de maior rapidez e validade nesse processo, e às Secretarias Estaduais e Municipais de Saúde, a possibilidade de gerar relatórios automatizados para o monitoramento das CSAP.
A função csapAIH automatiza o trabalho com os arquivos da AIH e permite o exercício com outras bases de dados ou uma lista de códigos CID-10 isolada. Sua utilização é simples e, para os usuários não habituados ao R, o resultado pode ser guardado em um arquivo de dados apto a leitura por outros pacotes estatísticos.