File size: 3,382 Bytes
2f64469
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import pandas as pd
import os
import sys
import traceback

# --- ETAPA 1: DEFINIR CAMINHOS DINAMICAMENTE ---
try:
    script_dir = os.path.dirname(os.path.abspath(__file__))
except NameError:
    # Fallback para ambientes interativos
    script_dir = os.getcwd()

excel_file_path = os.path.join(script_dir, 'TUSSxRolxSinônimosvs2.xlsx')
csv_file_path = os.path.join(script_dir, 'rol_procedures_database.csv')

print(f"Diretório de trabalho: {script_dir}")
print(f"Arquivo de entrada (Excel): {excel_file_path}")
print(f"Arquivo de saída (CSV): {csv_file_path}")

# --- ETAPA 2: VERIFICAR E PROCESSAR OS ARQUIVOS ---
if not os.path.exists(excel_file_path):
    print(f"\nERRO: Arquivo de entrada não encontrado!")
    print(
        f"Por favor, certifique-se de que o arquivo '{os.path.basename(excel_file_path)}' está na mesma pasta que este script.")
    sys.exit(1)

try:
    print(f"\nLendo o arquivo Excel (forçando TODAS as colunas como texto)...")
    df = pd.read_excel(excel_file_path, dtype=str)

    print("Mapeando colunas e limpando dados...")
    df_mapped = pd.DataFrame()

    column_mapping = {
        'Codigo_TUSS': 'Código',
        'Descricao_TUSS': 'Terminologia de Procedimentos e Eventos em Saúde (Tab. 22.202503)',
        'Correlacao_Rol': 'Correlação\n(Sim/Não)',
        'Procedimento_Rol': 'PROCEDIMENTO',
        'Resolucao_Normativa': 'Resolução\nNormativa (alteração)',
        'Vigencia': 'VIGÊNCIA',
        'OD': 'OD', 'AMB': 'AMB', 'HCO': 'HCO', 'HSO': 'HSO', 'PAC': 'PAC', 'DUT': 'DUT',
        'SUBGRUPO': 'SUBGRUPO', 'GRUPO': 'GRUPO', 'CAPITULO': 'CAPÍTULO',
        'Sinonimo_1': 'Sinônimo 1 (Popular/Explicativo)',
        'Sinonimo_2': 'Sinônimo 2 (Abreviação/Técnico)',
        'Sinonimo_3': 'Sinônimo 3 (Entre Tabelas AMB/CBHPM)',
        'Sinonimo_4': 'Sinônimo 4 (Outros)',
        'Semantico': 'Síntese semântica do procedimento'}

    for new_col, old_col in column_mapping.items():
        if old_col in df.columns:
            # --- ALTERAÇÃO PRINCIPAL AQUI ---
            # 1. Substituímos qualquer quebra de linha (\n ou \r) por um espaço.
            # 2. Depois, limpamos os espaços em branco do início e do fim.
            # Usamos uma expressão regular (regex) para pegar todas as variações de quebra de linha.
            cleaned_series = df[old_col].str.replace(r'[\r\n]+', ' ', regex=True).str.strip()
            df_mapped[new_col] = cleaned_series
            # ------------------------------------
        else:
            print(f"AVISO: Coluna '{old_col}' não encontrada. A coluna '{new_col}' será criada vazia.")
            df_mapped[new_col] = pd.Series(dtype='object')

    # Preencher valores nulos (NaN) com uma string vazia para garantir consistência
    df_mapped = df_mapped.fillna('')

    print(f"\nSalvando o arquivo CSV mapeado e limpo...")
    # Usando quoting=csv.QUOTE_MINIMAL pode ser uma boa prática, mas o padrão já é bom.
    df_mapped.to_csv(csv_file_path, index=False, encoding='utf-8-sig')

    print("\n--- Informações do arquivo CSV gerado ---")
    print(f"Número de linhas: {len(df_mapped)}")
    print(f"Número de colunas: {len(df_mapped.columns)}")
    print(f"\nSUCESSO! Arquivo CSV salvo em: {csv_file_path}")

except Exception as e:
    print(f"\nERRO CRÍTICO ao processar o arquivo Excel: {e}")
    traceback.print_exc()
    sys.exit(1)