Tabelas de Conversão de Códigos

Os dados dos arquivos que constituem os sistemas de informações do SUS estão normalmente codificados em números que representam códigos constantes de tabelas padronizadas, como Classificação Internacional de Doenças (CID), Tabela de Procedimentos de AIHs ou SIA-SUS, Código de Municípios do IBGE etc. É conveniente que tais códigos sejam traduzidos, tornando-os facilmente compreensíveis, exibindo a sua correspondente descrição.

Adicionalmente, é necessário produzir tabulações que agregam vários códigos dessas tabelas em uma única categoria para permitir a análise dos dados.

Para resolver estas duas situações, são usadas Tabelas de Conversão de Códigos, constituídas de arquivos tipo texto, com uma estrutura estabelecida para permitir que qualquer usuário, com um editor de texto, modifique as tabelas existentes ou crie novas tabelas necessárias à sua pesquisa.

Os tabelas são iguais para as variáveis de linhas, de colunas ou de seleção. Ao contrário do TAB e do TABWIN, as variáveis de coluna podem ter, também, até 50 posições de descrição; recomenda-se, porém, utilizar descrições mais curtas para tornar as tabulações de mais fácil leitura.

No caso de variáveis de seleção, as tabelas de conversão se destinam a relacionar que valor ou valores, correspondentes a cada descrição, podem ser marcados para serem aceitos na variável especificada para que cada registro seja considerado no processamento.

Para criar uma Tabela de Conversão de Código, é necessário criar um arquivo texto que, em sua primeira linha, tenha o número de categorias que resultará da conversão dos códigos, ou seja o número de linhas ou colunas que serão obtidos na tabulação e o número de caracteres que serão considerados para comparação no campo do arquivo de dados.

Exemplo:

5 4

Aqui, a variável tem 5 categorias e o código tem 4 posições, a partir da posição indicada em CAMPO4 nos registros de tipo S, L, C, D, T ou X.

As demais linhas têm formato fixo, devendo ocorrer pelo menos uma vez para cada categoria, e tem sempre três campos que ocupam posições fixas, no formato abaixo:

Seqüencial da Categoria - colunas 4 a 7

O Seqüencial da Categoria a que a descrição e a lista de códigos se referem é campo obrigatório e indica também a posição relativa que esta linha ocupará na seqüência de linhas, colunas ou quadros da tabulação gerada.

Descrição - colunas 10 a 59

A descrição contém, alinhado à esquerda, o texto que será exibido nas opções e na geração da tabulação.

Lista de Códigos - colunas 61 até o fim da linha

A lista de valores contém, separados por vírgulas, a relação dos códigos da variável, no arquivo de entrada, que serão considerados nesta linha da tabela. Vários códigos consecutivos poderão ter seu registro simplificado anotando-se o primeiro valor separado do final por um hífen. A cada referência a um valor, deverá ser utilizado o número de caracteres definidos na primeira linha deste arquivo e, caso o valor seja menor, deve-se utilizar a quantidade necessária de zeros a esquerda para completar o comprimento.

Se o espaço de uma linha (até 255 caracteres) for insuficiente para relacionar todos os códigos desta categoria, podemos criar uma nova linha, repetindo o mesmo seqüencial de categoria, dando, então, continuidade à lista de códigos na coluna 61.

As linhas não precisam estar codificadas na mesma seqüência das categorias. Assim, a última categoria pode estar antes das demais. Isto é particularmente útil para definir a categoria "Ignorado", como poderemos ver nos exemplos adiante.

Todo o texto que estiver após o caractere ';' é ignorado pelo programa e funciona apenas como comentário com a finalidade de documentar a tabela de conversão.

Exemplo do arquivo CAUSACAP.CNV:

17 3
;
; Tabela para converter CID 9 a 3 dígitos em Capítulos
;
      1  I. Doenças infecciosas e parasitárias              001-139
      2  II. Neoplasmas                                     140-239
      3  III. D glând endoc nutric metab e transt imunitar  240-279
      4  IV. Doenças do sangue e órgãos hematopoéticos      280-289
      5  V. Transtornos mentais                             290-319
      6  VI. Doenças do sist nervoso e dos órg sentidos     320-389
      7  VII. Doenças do aparelho circulatório              390-459
      8  VIII.Doenças do aparelho respiratório              460-519
      9  IX. Doenças do aparelho digestivo                  520-579
     10  X. Doenças do aparelho geniturinário               580-629
     11  XI. Complicações da gravidez parto e puerpério     630-676
     12  XII. Doenças da pele e tecido celular subcutâneo   680-709
     13  XIII.Doenças sist osteomuscular e tec conjuntivo   710-739
     14  XIV. Anomalias congênitas                          740-759
     15  XV. Algumas afecções origin no período perinatal   760-779
     16  XVI. Sintomas sinais e afecções mal definidas      780-799
     17  XVII.Causas externas                               800-999

Neste exemplo, temos uma tabela para converter os códigos da Classificação Internacional de Doenças (CID), 9ª Revisão, em seu capítulos. Como os capítulos são 17, o número de categorias expresso na primeira linha é 17 e, como são utilizados apenas 3 dígitos, o número 3 aparece na segunda posição na primeira linha.

Exemplo do arquivo MESES.CNV:

13 2
; Tabela de conversão para os meses do ano     
     13  Ignorado                                           00-99 ; ignorados
      1  Janeiro                                            01
      2  Fevereiro                                          02
      3  Março                                              03
      4  Abril                                              04
      5  Maio                                               05
      6  Junho                                              06
      7  Julho                                              07
      8  Agosto                                             08
      9  Setembro                                           09
     10  Outubro                                            10
     11  Novembro                                           11
     12  Dezembro                                           12

Esta definição contém 13 categorias e o comprimento considerado da variável no arquivo de entrada é de 2 dígitos. Observe-se que, primeiro, definiu-se a categoria "Ignorado", com valores de 00 a 99, e, após, as categorias válidas. O código 01 é, primeiro considerado como ignorado. Como, porém, está relacionado, depois, à categoria "Janeiro", esta prevalece, por aparecer por último.

Variável Curta e Variável Longa

De acordo com o número de dígitos com que cada variável será considerada no arquivo .CNV, duas formas de indexação diferentes serão adotadas com impacto no tempo de processamento.

No caso de usarmos códigos de até quatro dígitos, sendo que somente o primeiro pode ser alfabético, será usada internamente uma indexação imediata, através de um vetor de conversão, que resulta em processamento mais rápido. Dentro desse limite de quatro dígitos, é possível aceitar códigos em que o primeiro caractere do campo de entrada seja uma letra de A a Z, maiúscula ou minúscula. Como as letras de A até J são mapeados sobre os dígitos de 0 a 9, é possível aceitar códigos que usem letras ou números na primeira posição mas não ambos.

No caso do código exceder a quatro dígitos, o mesmo será tratado internamente como literal, sendo necessária, para sua identificação, uma pesquisa binária nos códigos armazenados na memória, o que, naturalmente, resulta em processamento mais lento.

Eventualmente, pode ser necessário tratar como literais códigos menores do que quatro caracteres como, por exemplo, ao usarmos as siglas das Unidades da Federação, onde temos apenas dois caracteres, ambos alfabéticos e em letra maiúscula. Nesse caso, na primeira linha útil do .CNV, após o espaço que segue comprimento do código, colocamos a letra L.

Exemplo:

5 2 L
; Regiões do Brasil a partir das siglas das UFs
      1  Norte                                               AM,PA,AC,RO,RR,AP
      1  Norte                                               TO
      2  Nordeste                                            MA,PI,CE,RN,PB,AL
      2  Nordeste                                            PE,SE,BA
      3  Centro-Oeste                                        GO,MT,MS,DF
      4  Sudeste                                             MG,SP,RJ,ES
      5  Sul                                                 RS,PR,SC

Vemos, no exemplo, duas linhas com o mesmo seqüencial da categoria, utilizado quando a lista de códigos não couber numa linha apenas, ou se quisermos separá-las para tornar o arquivo mais legível.

No caso de usarmos um arquivo .DBF para indexação, o código será sempre tratado como literal, independentemente do comprimento do campo.

Linhas de Subtotal

Em algumas ocasiões, é necessário apresentar tabulações em que algumas linhas são subtotais resultantes da soma parcial de outras linhas do relatório. Podemos utilizar, na tabela de conversão de código (.CNV), o campo Indicador de Subtotal, numérico alinhado à direita nas colunas de 1 a 3, que somente é interpretado para uma tabela de conversão quando a mesma é usada nas linhas.

A ocorrência de qualquer número de linha válido nesta posição vai determinar que, durante a geração da tabulação, o conteúdo desta linha seja adicionado ao da linha cujo número está aqui indicada, permitindo que aquela contenha, adicionado ao valor nela diretamente tabulado, a soma dos valores tabulados de todas as linhas que apontam para ela.

Estas posições (colunas 1 a 3) devem ser deixadas em branco no caso da tabela de conversão não incluir linhas de subtotal, o que é o mais comum.

Exemplo de .CNV com linhas de subtotal:

12 2
;
; Natureza do prestador
;
      1 Público                                             10,30,40,50
  1   2 . Próprio                                           10
  1   3 . Federal                                           30
  1   4 . Estadual                                          40
  1   5 . Municipal                                         50
      6 Privado                                             20,60,80
  6   7 . Contratado                                        20
  6   8 . Filantrópico                                      60
  6   9 . Sindicato                                         80
     10 Universitário                                       70,90
 10  11 . Universitário                                     70
 10  12 . Pesquisas                                         90

No exemplo acima, cada linha da tabela que é uma subcategoria aponta, nas posições 1 a 3, para a linha de subtotal a que pertence.

Não é obrigatório que sejam relacionadas todas as subcategorias possíveis. No exemplo acima, se tivesse sido omitida a subcategoria 12, a categoria 10 continuaria a apresentar a soma dos códigos 70 e 90.

Como, por definição, os browsers interpretam o HTML substituindo espaços em branco seguidos por apenas um espaço em branco, é conveniente marcar a indentação com um caractere qualquer. No exemplo acima, utilizou-se o ponto.

No caso de estarmos usando variáveis longas ou literais, devido ao fato do primeiro código encontrado entrar no índice em lugar dos seguintes, devemos colocar na linha de subtotal um código que não apareça nas linhas de detalhe, ou colocar a linha de subtotal após a linha de detalhe.

Exemplo de UF e Região:

32 2 L
;
; UF e Região
;
      1 Norte                                               XX
  1   2 . Rondônia                                          RO
  1   3 . Acre                                              AC
  1   4 . Amazonas                                          AM
  1   5 . Roraima                                           RR
  1   6 . Pará                                              PA
  1   7 . Amapá                                             AP
  1   8 . Tocantins                                         TO
      9 Nordeste                                            XX
  9  10 . Maranhão                                          MA
  9  11 . Piauí                                             PI
  9  12 . Ceará                                             CE
  9  13 . Rio Grande do Norte                               RN
  9  14 . Paraíba                                           PB
  9  15 . Pernambuco                                        PE
  9  16 . Alagoas                                           AL
  9  17 . Sergipe                                           SE
  9  18 . Bahia                                             BA
     19 Sudeste                                             XX
 19  20 . Minas Gerais                                      MG
 19  21 . Espírito Santo                                    ES
 19  22 . Rio de Janeiro                                    RJ
 19  23 . São Paulo                                         SP
     24 Sul                                                 XX
 24  25 . Paraná                                            PR
 24  26 . Santa Catarina                                    SC
 24  27 . Rio Grande do Sul                                 RS
     28 Centro-Oeste                                        XX
 28  29 . Mato Grosso do Sul                                MS
 28  30 . Mato Grosso                                       MT
 28  31 . Goiás                                             GO
 28  31 . Distrito Federal                                  DF

Faixas de Valor

Quando for necessário criar categorias a partir de faixas de valor de variáveis contínuas, acrescentamos à primeira linha do arquivo CNV, imediatamente após o comprimento do campo de código, a letra F, de Faixas, e colocamos no campo de código, alinhados pela direita, os limites superiores de cada faixa. O separador decimal deve ser o "ponto".

Exemplo de arquivo CNV com faixas de valor

; Faixas de Valor das AIHs
6 14 Faixas
      1  Até 99,99                                                   99.99
      2  100,00 a 499,99                                            499.99
      3  500,00 a 999,99                                            999.99
      4  1000,00 a 2499,99                                         2499.99
      5  2500,00 a 4999,99                                         4999.99
      6  >= 5000,00                                         99999999999.99


Datasus