File size: 5,643 Bytes
d368963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import os
import re
from pathlib import Path
from llama_index.core import Document

def create_single_document_with_filenames(directory_path: str) -> Document:
    """
    Percorre a pasta informada, organiza os arquivos em estrutura de anos (YYYY) e meses (MM),
    gera um texto descritivo semelhante ao código anterior (sem salvar em arquivo) e retorna
    esse texto dentro de um objeto Document.

    Uso:
        directory_path = "documentos"
        doc = create_single_document_with_filenames(directory_path)
        documents.append(doc)
    """

    # Dicionário {ano: {mes: [arquivos]}}
    estrutura_anos = {}
    # Lista para arquivos fora do padrão YYYY-MM
    docs_sem_data = []
    # Conjunto para todos os arquivos (para listagem geral no final)
    todos_arquivos = set()

    # Percorre o diretório de forma recursiva
    for root, dirs, files in os.walk(directory_path):
        match_ano_mes = re.search(r"(\d{4})-(\d{2})", root)
        if match_ano_mes:
            ano = match_ano_mes.group(1)
            mes = match_ano_mes.group(2)

            if ano not in estrutura_anos:
                estrutura_anos[ano] = {}
            if mes not in estrutura_anos[ano]:
                estrutura_anos[ano][mes] = []

            for nome_arq in files:
                estrutura_anos[ano][mes].append(nome_arq)
                todos_arquivos.add(nome_arq)
        else:
            # Se a pasta não segue o padrão YYYY-MM, consideramos esses arquivos "sem data"
            for nome_arq in files:
                docs_sem_data.append(nome_arq)
                todos_arquivos.add(nome_arq)

    # Montamos o texto final, seguindo a lógica dos "casos"
    descricao_final = []

    # Organiza a lista de anos e percorre
    for ano in sorted(estrutura_anos.keys()):
        meses_ordenados = sorted(estrutura_anos[ano].keys())
        qtd_meses = len(meses_ordenados)

        # Caso 1: Apenas um mês e um arquivo
        if qtd_meses == 1:
            unico_mes = meses_ordenados[0]
            arquivos_unico_mes = estrutura_anos[ano][unico_mes]
            if len(arquivos_unico_mes) == 1:
                nome_mes_extenso = mes_extenso(unico_mes)
                arquivo_unico = arquivos_unico_mes[0]
                descricao_final.append(
                    f"No ano de {ano}, temos somente o mês de {nome_mes_extenso} (mês {unico_mes}), "
                    f"outros meses não foram listados, e nessa pasta encontramos apenas "
                    f"um manual chamado {arquivo_unico}."
                )
                # pula para o próximo ano
                continue

        # Caso 2: Mais meses ou mais arquivos em algum mês
        frase_inicial = f"No ano de {ano}, temos os meses de "
        meses_descricao = [f"{mes_extenso(m)} (mês {m})" for m in meses_ordenados]
        frase_inicial += ", ".join(meses_descricao) + "."
        descricao_final.append(frase_inicial)

        for mes_ in meses_ordenados:
            arquivos_mes = estrutura_anos[ano][mes_]
            nome_mes_extenso = mes_extenso(mes_)
            qtd_arquivos = len(arquivos_mes)
            if qtd_arquivos == 1:
                descricao_final.append(
                    f"Em {nome_mes_extenso} temos somente o manual chamado {arquivos_mes[0]}."
                )
            else:
                descricao_final.append(
                    f"Em {nome_mes_extenso} temos {qtd_arquivos} manuais, chamados: {', '.join(arquivos_mes)}."
                )

    # Caso 3: Arquivos sem data
    if docs_sem_data:
        docs_sem_data_unicos = list(set(docs_sem_data))
        if len(docs_sem_data_unicos) == 1:
            descricao_final.append(
                f"Em nossos documentos, fora de pastas de data, temos somente este arquivo: {docs_sem_data_unicos[0]}."
            )
        else:
            descricao_final.append(
                "Em nossos documentos, fora de pastas de data, encontramos estes arquivos: "
                + ", ".join(docs_sem_data_unicos) + "."
            )

    # Lista global de todos os arquivos
    lista_geral_ordenada = sorted(todos_arquivos)
    descricao_final.append(
        "Essas são as listas de todos os documentos, manuais e organogramas que podemos "
        f"resolver, listar e usar para nossas respostas, esses documentos vão ser muito úteis: {', '.join(lista_geral_ordenada)}"
    )

    # Une o texto final
    document_text = "\n".join(descricao_final)

    # Cria e retorna um Document com esse texto
    document = Document(
        text=document_text,
        metadata={
            "description": "Lista de manuais, arquivos e documentos que podemos responder.",
            "file_name": "Lista de documentos",
            "summary": "Entre 2011 e 2024, há uma grande variedade de manuais e documentos organizados por ano e mês: alguns anos possuem apenas um mês e um único arquivo, enquanto outros registram diversos períodos, cada um com vários manuais. Adicionalmente, há alguns arquivos “soltos”, fora dessas pastas de data. No fim, existe uma listagem completa de todos os itens, cobrindo instruções bancárias, regulamentos internos e outros materiais de suporte."
            }
    )
    return document

def mes_extenso(mes_str: str) -> str:
    """
    Converte '07' em 'Julho', '09' em 'Setembro', etc.
    """
    meses_dict = {
        "01": "Janeiro",   "02": "Fevereiro", "03": "Março",
        "04": "Abril",     "05": "Maio",      "06": "Junho",
        "07": "Julho",     "08": "Agosto",    "09": "Setembro",
        "10": "Outubro",   "11": "Novembro",  "12": "Dezembro"
    }
    return meses_dict.get(mes_str, mes_str)