Pecximenes commited on
Commit
2dd02d0
1 Parent(s): 8072fdc

Uploading Fauses's agent to HuggingFace Spaces

Browse files
.gitattributes copy ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ __pycache__
2
+ .env
Dockerfile ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10
2
+
3
+ WORKDIR /app
4
+
5
+ COPY ./requirements.txt /app/requirements.txt
6
+ RUN pip install --no-cache-dir -r /app/requirements.txt
7
+
8
+ # User
9
+ RUN useradd -m -u 1000 user
10
+ USER user
11
+ ENV HOME /home/user
12
+ ENV PATH $HOME/.local/bin:$PATH
13
+
14
+ WORKDIR $HOME
15
+ RUN mkdir app
16
+ WORKDIR $HOME/app
17
+ COPY . $HOME/app
18
+ ENV PYTHONPATH=$HOME/app
19
+
20
+ EXPOSE 8501
21
+ CMD streamlit run interface/app.py \
22
+ --server.headless true \
23
+ --server.enableCORS false \
24
+ --server.enableXsrfProtection false \
25
+ --server.fileWatcherType none
README.md CHANGED
@@ -1,12 +1,12 @@
1
  ---
2
- title: Prototipo Agente Fause V1
3
- emoji: 🌖
4
- colorFrom: green
5
- colorTo: yellow
6
  sdk: docker
 
7
  pinned: false
8
  license: mit
9
- short_description: Primeira versão do protótipo de chat-bot para o gov.br
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Agent Fause V1
3
+ emoji: 📉
4
+ colorFrom: yellow
5
+ colorTo: gray
6
  sdk: docker
7
+ app_port: 8501
8
  pinned: false
9
  license: mit
 
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
WORKDIR/.gitkeep ADDED
File without changes
WORKDIR/test/main_content.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Info
3
+
4
+ Recuperar Conta gov.br
5
+ ----------------------
6
+
7
+ Está com alguma dificuldade para recuperar a senha da sua conta gov.br?
8
+
9
+ Como recuperar a senha?
10
+ -----------------------
11
+
12
+ Vamos te ajudar a **recuperar a sua senha**! Primeiro, escolha abaixo por onde vai seguir o processo de recuperação.
13
+
14
+ **Atenção**: Após abrir uma das opções abaixo, volte nessa página aqui para seguir as orientações seguintes!
15
+
16
+ [![Acesse pelo navegador](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Card01.png)](http://acesso.gov.br)
17
+
18
+ [![Instale o aplicativo gov.br disponível no google play](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Card2.jpg)](https://play.google.com/store/apps/details?id=br.gov.meugovbr&hl=pt_BR&gl=US)
19
+
20
+ [![Instale o aplicativo gov.br disponível na app store](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Card3.jpg)](https://apps.apple.com/br/app/gov-br/id1506827551)
21
+
22
+ Orientações
23
+ -----------
24
+
25
+ ![Digite o cpf e clique em continuar. Caso ainda não exista uma conta para este CPF, você deverá criar a conta primeiro. Se a conta já existir, você poderá digitar a senha ou continuar o processo de recuperação. Em seguida, clique em esqueci minha senha.](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Orientaes2.png)
26
+
27
+ OPÇÕES DISPONÍVEIS
28
+ ------------------
29
+
30
+ Os melhores métodos serão apresentados para você **primeiro**. O nível da sua conta poderá ser aumentado ou reduzido, a depender do seu nível atual e do método usado.
31
+ ![Reconhecimento facial](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Recuperarsenhareconhecimentofacial.png)
32
+
33
+ **Se estiver no navegador**: Use o aplicativo gov.br, na opção QR code, para ler o código apresentado na tela e realizar o reconhecimento facial com seu celular.
34
+ **Se estiver no celular**: Use o aplicativo gov.br para fazer o reconhecimento facial com seu celular.
35
+
36
+ Durante o processo de reconhecimento facial, precisaremos comparar a sua foto com as **bases biométricas faciais** que você tem cadastro para poder prosseguir. Pode ser mais fácil ou mais difícil, a depender da semelhança entre a foto dessa base e a sua foto atual. Saiba mais sobre o reconhecimento facial ao lado.
37
+ [Dúvidas no reconhecimento facial](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial)
38
+ Se não tiver biometria facial nas bases, o reconhecimento facial não estará disponível para você. Se quiser tentar outra opção, clique em "**Não tenho celular**".
39
+ ![Bancos](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/copy_of_Recuperarsenhabancos.png)
40
+
41
+ A recuperação por bancos é segura, pois você fará o login no ambiente do banco e após logar, poderá cadastrar a nova senha. Não temos acesso a nenhum dos seus dados bancários.
42
+
43
+ **Importante**: Após clicar no ícone do banco, a página seguinte e todo o procedimento de autenticação necessário será realizado no ambiente do banco, não temos acesso ao procedimento ou aos dados utilizados na autenticação. Se tiver dificuldade nessa etapa, procure o banco que selecionou e solicite esclarecimentos.
44
+ ![E-mail](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Recuperarsenhaemail.png)
45
+
46
+ Se não tiver conta em nenhum dos bancos apresentados, clique em “**Recuperar de outra forma**” e você poderá recuperar sua senha com o e\-mail cadastrado. Informe o código recebido no seu e\-mail e cadastre uma nova senha.
47
+ ![Celular](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Recuperarsenhacelular.png)
48
+
49
+ Caso não tenha acesso ao e\-mail cadastrado, clique na opção "**Não tenho acesso a este e\-mail**" e você será redirecionado para o fluxo de recuperação pelo celular. Informe o código recebido no seu celular e cadastre uma nova senha.
50
+ ![Formulário de atendimento](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/imagens/Recuperarsenhaformulario.png)
51
+
52
+ Caso não tenha acesso ao celular cadastrado, clique na opção "**Não tenho acesso a este celular**". Se não conseguiu recuperar sua senha com as opções apresentadas, ainda poderá registrar uma solicitação de **alteração de e\-mail cadastrado na conta gov.br** em nosso Formulário de Atendimento. Para isso, clique na opção “**Ir para o formulário**”.
53
+
54
+ Caso o titular da conta seja **criança ou adolescente** ou o representante legal esteja solicitando por meio de **procuração, termo de curatela ou similar**, leia as orientações abaixo antes de enviar a sua solicitação.
55
+ [Titular da conta é criança ou adolescente](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/titular-da-conta-e-crianca-ou-adolescente)
56
+
57
+ [Procurador ou curador](https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/procurador-ou-curador)
58
+ CONFIRA TODAS AS ORIENTAÇÕES NESTE VÍDEO
59
+ ----------------------------------------
__init__.py ADDED
File without changes
agent.py ADDED
@@ -0,0 +1,414 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # %%
3
+ import os
4
+ import sys
5
+ # Change the current working directory to the directory where the script is located
6
+
7
+ #__file__ =
8
+
9
+ current_dir = os.path.dirname(os.path.abspath(__file__))
10
+ os.chdir(current_dir)
11
+
12
+ # %%
13
+
14
+
15
+ # import requests
16
+ # from bs4 import BeautifulSoup
17
+ # from urllib.parse import urljoin
18
+ # import time
19
+ # import concurrent.futures
20
+ # from queue import Queue
21
+ # from threading import Lock
22
+
23
+ # def fetch_and_parse_links(url, base_url):
24
+ # try:
25
+ # response = requests.get(url, timeout=10)
26
+ # response.raise_for_status()
27
+
28
+ # soup = BeautifulSoup(response.content, 'html.parser')
29
+ # main_div = soup.find('div', id='main')
30
+
31
+ # if not main_div:
32
+ # print(f"No div with id='main' found in {url}")
33
+ # return []
34
+
35
+ # links = main_div.find_all('a', href=True)
36
+
37
+ # paths = []
38
+ # for link in links:
39
+ # href = urljoin(url, link['href'])
40
+ # if href.startswith(base_url) and '#' not in href:
41
+ # path = href[len(base_url):].strip("/")
42
+ # if path and path not in paths:
43
+ # paths.append(path)
44
+
45
+ # return paths
46
+ # except requests.RequestException as e:
47
+ # print(f"Error fetching {url}: {e}")
48
+ # return []
49
+
50
+ # def worker(base_url, to_visit_queue, visited_paths, unvisited_paths, tuples_list, lock):
51
+ # while True:
52
+ # current_path = to_visit_queue.get()
53
+ # if current_path is None:
54
+ # break
55
+
56
+ # with lock:
57
+ # if current_path in visited_paths:
58
+ # to_visit_queue.task_done()
59
+ # continue
60
+ # visited_paths.add(current_path)
61
+
62
+ # current_url = urljoin(base_url, current_path)
63
+
64
+ # print(f"Visiting: {current_url}")
65
+ # new_paths = fetch_and_parse_links(current_url, base_url)
66
+
67
+ # with lock:
68
+ # for new_path in new_paths:
69
+ # if new_path not in visited_paths:
70
+ # to_visit_queue.put(new_path)
71
+ # unvisited_paths.add(new_path)
72
+ # from_url = f"{base_url}{current_path}"
73
+ # to_url = f"{base_url}{new_path}"
74
+ # new_tuple = (from_url, to_url)
75
+ # if new_tuple not in tuples_list:
76
+ # tuples_list.append(new_tuple)
77
+
78
+ # if current_path in unvisited_paths:
79
+ # unvisited_paths.remove(current_path)
80
+
81
+ # to_visit_queue.task_done()
82
+ # time.sleep(1) # Be polite to the server
83
+
84
+ # def create_tuples_from_paths(base_url, max_workers=5):
85
+ # visited_paths = set()
86
+ # unvisited_paths = set()
87
+ # tuples_list = []
88
+ # to_visit_queue = Queue()
89
+ # lock = Lock()
90
+
91
+ # to_visit_queue.put("") # Start with an empty string to represent the root
92
+
93
+ # with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
94
+ # futures = []
95
+ # for _ in range(max_workers):
96
+ # future = executor.submit(worker, base_url, to_visit_queue, visited_paths, unvisited_paths, tuples_list, lock)
97
+ # futures.append(future)
98
+
99
+ # to_visit_queue.join()
100
+
101
+ # for _ in range(max_workers):
102
+ # to_visit_queue.put(None)
103
+
104
+ # concurrent.futures.wait(futures)
105
+
106
+ # return tuples_list, visited_paths, unvisited_paths
107
+
108
+ # # Define the base URL
109
+ # base_url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/"
110
+
111
+
112
+ # import json
113
+
114
+ # def load_json(file_path):
115
+ # with open(file_path, 'r', encoding='utf-8') as file:
116
+ # return json.load(file)
117
+
118
+
119
+
120
+ # def flatten_list(nested_list):
121
+ # for item in nested_list:
122
+ # if isinstance(item, list):
123
+ # yield from flatten_list(item) # Recursively yield from nested lists
124
+ # else:
125
+ # yield item
126
+
127
+
128
+ # import polars as pl
129
+
130
+ # # Define the base URL
131
+ # base_url = 'https://www.gov.br/governodigital/pt-br/'
132
+ # # Example usage
133
+ # file_path = 'memory/graph_data_tiplet.json' # Replace with your actual file path
134
+ # base_url = 'https://www.gov.br/governodigital/pt-br/'
135
+
136
+ # json_data = load_json(file_path)
137
+ # json_data = list(flatten_list(json_data))
138
+
139
+ # # Convert the list of URLs to a Polars DataFrame
140
+ # df = pl.DataFrame({
141
+ # 'url': json_data
142
+ # })
143
+
144
+ # # Remove the base URL and convert to path
145
+ # df = df.with_columns(
146
+ # (pl.col('url').str.replace(base_url, '')).alias('path')
147
+ # )
148
+
149
+ # # Extract paths as a list
150
+ # paths = df['path'].to_list()
151
+
152
+ # # Build a hierarchical structure
153
+ # def build_tree(paths):
154
+ # tree = {}
155
+ # for path in paths:
156
+ # parts = path.strip('/').split('/')
157
+ # current_level = tree
158
+ # for part in parts:
159
+ # if part not in current_level:
160
+ # current_level[part] = {}
161
+ # current_level = current_level[part]
162
+ # return tree
163
+
164
+ #%%
165
+ from utils.llm import chat
166
+ from utils.file import File
167
+ import json
168
+
169
+ system = File("prompts/system.md")
170
+ knowledge = File("prompts/knowledge.md")
171
+ graph = File("interface/visualization.html")
172
+ graph_data = File("memory/graph_data.json")
173
+
174
+
175
+
176
+ # user_question = input("Question?")
177
+
178
+ # messages = [
179
+ # {
180
+ # "role": "system",
181
+ # "content": [
182
+ # {
183
+ # "type": "text",
184
+ # "text": system
185
+ # }
186
+ # ]
187
+ # },
188
+ # {
189
+ # "role": "user",
190
+ # "content": [
191
+ # {
192
+ # "type": "text",
193
+ # "text": user_question
194
+ # }
195
+ # ]
196
+ # }
197
+ # ]
198
+
199
+ def pipeline(messages):
200
+ res = chat(messages=messages)
201
+
202
+ response = res.choices[0].message.content
203
+ return response
204
+
205
+
206
+ # if __name__ == "__main__":
207
+
208
+ # res = chat(messages=messages)
209
+
210
+ # response = res.choices[0].message.content
211
+
212
+ # print(response)
213
+
214
+
215
+
216
+
217
+
218
+ #%%
219
+
220
+
221
+
222
+
223
+
224
+ # from IPython.display import display, Markdown
225
+
226
+ # def build_tree_structure(tree, indent=0):
227
+ # """
228
+ # Recursively builds a string representation of the tree structure.
229
+
230
+ # Args:
231
+ # tree (dict): The hierarchical tree structure.
232
+ # indent (int): The current level of indentation.
233
+
234
+ # Returns:
235
+ # str: A string representing the tree structure.
236
+ # """
237
+ # result = ""
238
+ # for key, subtree in tree.items():
239
+ # result += f"{' ' * indent} - {key}/\n"
240
+ # if isinstance(subtree, dict):
241
+ # result += build_tree_structure(subtree, indent + 1)
242
+ # return result
243
+ # # Create and print the hierarchical structure
244
+ # tree_structure = build_tree(paths)
245
+ # obj = build_tree_structure(tree_structure)
246
+ # print(obj)
247
+
248
+
249
+ # display(Markdown(obj))
250
+
251
+ # # print(json.dumps(tree_structure, indent=2))
252
+ # #%%
253
+
254
+
255
+
256
+ # # Create tuples from paths and track visited/unvisited paths
257
+ # tuples_list, visited_paths, unvisited_paths = create_tuples_from_paths(base_url, 10)
258
+
259
+ # # Print the resulting list of tuples
260
+ # print("\nTuples:")
261
+ # for t in tuples_list:
262
+ # print(t)
263
+
264
+ # # Print visited and unvisited paths
265
+ # print("\nVisited Paths:")
266
+ # for p in visited_paths:
267
+ # print(f"{base_url}{p}")
268
+
269
+ # print("\nUnvisited Paths:")
270
+ # for p in unvisited_paths:
271
+ # print(f"{base_url}{p}")
272
+
273
+ # # Print summary
274
+ # print(f"\nTotal links found: {len(tuples_list)}")
275
+ # print(f"Visited pages: {len(visited_paths)}")
276
+ # print(f"Unvisited pages: {len(unvisited_paths)}")
277
+
278
+
279
+ # # Create a dictionary to hold our graph data
280
+ # graph_data = {
281
+ # "nodes": [],
282
+ # "edges": []
283
+ # }
284
+
285
+ # import json
286
+ # # Create a set to keep track of nodes we've added
287
+ # added_nodes = set()
288
+
289
+ # # Process the tuples to create nodes and edges
290
+ # for from_url, to_url in tuples_list:
291
+ # from_path = from_url[len(base_url):].strip("/") or "root"
292
+ # to_path = to_url[len(base_url):].strip("/")
293
+
294
+ # if from_path not in added_nodes:
295
+ # graph_data["nodes"].append({"id": from_path, "label": from_path})
296
+ # added_nodes.add(from_path)
297
+
298
+ # if to_path not in added_nodes:
299
+ # graph_data["nodes"].append({"id": to_path, "label": to_path})
300
+ # added_nodes.add(to_path)
301
+
302
+ # graph_data["edges"].append({"from": from_path, "to": to_path})
303
+
304
+ # # Save the graph data to a JSON file
305
+ # with open('graph_data.json', 'w') as f:
306
+ # json.dump(graph_data, f)
307
+
308
+ # # Save the graph data to a JSON file
309
+ # with open('graph_data_tiplet.json', 'w') as f:
310
+ # json.dump(tuples_list, f)
311
+
312
+
313
+ # print("Graph data saved to graph_data.json")
314
+
315
+
316
+ # # %%
317
+
318
+ # import requests
319
+ # from bs4 import BeautifulSoup
320
+ # from markdownify import markdownify as md
321
+
322
+ # import os
323
+ # os.chdir("/home/zuz/Projetos/LAMFO/SGD/prototipo01_atendimento_govBR")
324
+
325
+ # from Banco_de_Dados.Estruturado.data2json import format_for_markdown
326
+
327
+
328
+
329
+
330
+ # # URL da página web
331
+ # url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br"
332
+ # url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/atendimento-presencial"
333
+ # url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br"
334
+ # url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br"
335
+
336
+
337
+ # # Obter o HTML da página
338
+ # response = requests.get(url)
339
+ # html_content = response.text
340
+
341
+ # # Usar BeautifulSoup para analisar o HTML
342
+ # soup = BeautifulSoup(html_content, 'html.parser')
343
+
344
+
345
+ # # Extrair o conteúdo da div com id 'main'
346
+ # main_div = soup.find('div', id='main')
347
+ # a = format_for_markdown(main_div)
348
+ # print(a)
349
+
350
+
351
+
352
+ # if main_div:
353
+ # # Converter o conteúdo da div para Markdown
354
+ # markdown_content = md(str(main_div))
355
+
356
+ # # Remover quebras de linha extras (\n\n)
357
+ # markdown_content = "\n".join([line for line in markdown_content.split("\n\n") if line.strip()])
358
+ # print(markdown_content)
359
+ # # Salvar o conteúdo em Markdown em um arquivo
360
+ # with open("main_content.md", "w", encoding="utf-8") as file:
361
+ # file.write(markdown_content)
362
+ # print("Conversão concluída e salva em 'main_content.md'.")
363
+ # else:
364
+ # print("Div com id 'main' não encontrada.")
365
+
366
+
367
+
368
+
369
+ # # %%
370
+
371
+
372
+
373
+
374
+
375
+ # import requests
376
+
377
+
378
+ # def pipeline():
379
+ # # url = input("website: ")
380
+ # url = "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br"
381
+ # response = requests.get(url).text
382
+
383
+
384
+ # print(response)
385
+
386
+ # import os
387
+
388
+ # def print_directory_structure(path, level=0):
389
+ # if not os.path.isdir(path):
390
+ # print(f"{path} is not a valid directory.")
391
+ # return
392
+
393
+ # prefix = ' ' * 4 * level + '|-- '
394
+ # print(prefix + os.path.basename(path) + '/')
395
+
396
+ # for item in os.listdir(path):
397
+ # item_path = os.path.join(path, item)
398
+ # if os.path.isdir(item_path):
399
+ # print_directory_structure(item_path, level + 1)
400
+ # else:
401
+ # print(' ' * 4 * (level + 1) + '|-- ' + item)
402
+
403
+ # # Replace 'your_path_here' with the path you want to print
404
+ # your_path_here = '/home/zuz/Projetos/LAMFO/SGD/prototipo01_atendimento_govBR/AI_agent'
405
+ # print_directory_structure(your_path_here)
406
+
407
+
408
+
409
+
410
+
411
+ # if __name__ == "__main__":
412
+ # pipeline()
413
+
414
+
interface/app.py ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import streamlit.components.v1 as components
3
+ import re
4
+ import sys
5
+ import os
6
+ import requests
7
+ from bs4 import BeautifulSoup
8
+ import difflib
9
+ from urllib.parse import urlparse, unquote
10
+ from pipelines.message import send_message
11
+ from agent import pipeline, knowledge, graph, graph_data
12
+
13
+ # Configuração do caminho
14
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
15
+
16
+ # Substitui o caminho do gráfico pelo conteúdo do graph_data
17
+ graph = graph.replace('"../memory/graph_data.json"', f'{graph_data}')
18
+
19
+ # Variáveis globais
20
+ extracted_links = []
21
+
22
+ # Configuração inicial do histórico de chat
23
+ if "chat_history" not in st.session_state:
24
+ st.session_state.chat_history = []
25
+
26
+ # Funções utilitárias
27
+ def extract_content(text, tag):
28
+ """Extrai conteúdo de um texto com base na tag fornecida."""
29
+ pattern = rf'<{tag}>(.*?)</{tag}>'
30
+ match = re.search(pattern, text, re.DOTALL)
31
+ return match.group(1).strip() if match else None
32
+
33
+ def fetch_webpage_content(url):
34
+ """Obtém o conteúdo HTML de uma URL e retorna o conteúdo principal."""
35
+ try:
36
+ response = requests.get(url)
37
+ response.raise_for_status()
38
+ soup = BeautifulSoup(response.text, 'html.parser')
39
+ main_content = soup.find('div', id='main')
40
+
41
+ if main_content:
42
+ body_tag = soup.find('body')
43
+ if body_tag:
44
+ body_tag.clear()
45
+ body_tag.append(main_content)
46
+ return str(soup)
47
+ return "<html><body><p>Could not find main content on the page.</p></body></html>"
48
+ except requests.RequestException as e:
49
+ return f"<html><body><p>Error fetching the webpage: {str(e)}</p></body></html>"
50
+
51
+ def extract_links(html_content):
52
+ """Extrai todos os links (URLs) de um conteúdo HTML."""
53
+ soup = BeautifulSoup(html_content, 'html.parser')
54
+ return [a_tag['href'] for a_tag in soup.find_all('a', href=True)]
55
+
56
+ def url_to_suggestion(url):
57
+ """Converte uma URL longa em uma sugestão amigável."""
58
+ path = unquote(urlparse(url).path).strip('/').split('/')
59
+ return path[-1].replace('-', ' ').replace('_', ' ').capitalize() if path else url
60
+
61
+ def display_suggestions(links):
62
+ """Exibe sugestões para o usuário com base nos links extraídos."""
63
+ suggestions = [(link, url_to_suggestion(link)) for link in links if url_to_suggestion(link)]
64
+ st.subheader("Sugestões de Passos:")
65
+ if suggestions:
66
+ st.write("Você também pode se interessar em:")
67
+ for link, suggestion in suggestions:
68
+ st.write(f"- {suggestion}")
69
+ else:
70
+ st.write("Não há sugestões disponíveis no momento.")
71
+
72
+
73
+ def navigate_page(full_url):
74
+ """Função para navegar para uma nova página e atualizar o conteúdo."""
75
+ global extracted_links
76
+ with st.spinner("Obtendo conteúdo da página..."):
77
+ content = fetch_webpage_content(full_url)
78
+ extracted_links = extract_links(content)
79
+ st.session_state.chat_history.append({"type": "page", "content": content, "links": extracted_links})
80
+ st.subheader("Conteúdo da Página Web:")
81
+ components.html(content, height=600, scrolling=True)
82
+ display_suggestions(extracted_links)
83
+ st.subheader("URL Completa:")
84
+ st.write(full_url)
85
+
86
+
87
+ def sidebar_content():
88
+ st.image('https://www.gov.br/++theme++padrao_govbr/img/govbr-logo-large.png', width=200)
89
+ st.header("Tópicos frequentes")
90
+
91
+ # Botões de exemplo
92
+ topics = [
93
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit1.",
94
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit2.",
95
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit3.",
96
+ "Lorem ipsum dolor sit amet, consectetur adipiscing elit4."
97
+ ]
98
+
99
+ for topic in topics:
100
+ st.button(topic)
101
+
102
+ # Espaços em branco para organização
103
+ for _ in range(5):
104
+ st.write("")
105
+
106
+ # Botão centralizado
107
+ col1, col2, col3 = st.columns([1, 1, 1])
108
+ with col2:
109
+ st.button("VOLTAR")
110
+
111
+ # Função para exibir mensagens de chat
112
+ def display_chat():
113
+ for msg in st.session_state.messages:
114
+ st.chat_message(msg["role"]).write(msg["content"])
115
+
116
+ def main():
117
+ # Exibe o histórico do chat
118
+ for message in st.session_state.chat_history:
119
+ if message["type"] == "text":
120
+ if "role" in message:
121
+ if message["role"] == "user":
122
+ st.chat_message("user").write(message["content"])
123
+ else:
124
+ st.chat_message("assistant").write(message["content"])
125
+
126
+ elif message["type"] == "page":
127
+ st.subheader("Conteúdo da Página Web:")
128
+ components.html(message["content"], height=400, scrolling=True)
129
+
130
+ if user_query := st.chat_input(placeholder="Digite sua mensagem"):
131
+ # Armazenar mensagem do usuário
132
+ st.session_state.chat_history.append({"type": "text","role": "user", "content": user_query})
133
+ st.chat_message("user").write(user_query)
134
+
135
+ response_text = send_message(user_query, pipeline)
136
+
137
+ # Armazena a resposta do agent
138
+ st.session_state.chat_history.append({"type": "text","role": "assistant", "content": response_text})
139
+ st.chat_message("assistant").write(response_text)
140
+
141
+ # Extração do caminho da resposta do bot
142
+ path = extract_content(response_text, "path")
143
+ if path:
144
+ base_url = "https://www.gov.br/governodigital/pt-br/"
145
+ full_url = base_url + path
146
+ navigate_page(full_url)
147
+
148
+
149
+
150
+ # Exibição da barra lateral
151
+ with st.sidebar:
152
+ sidebar_content()
153
+
154
+ # Exibição do título e subtítulo
155
+ st.title("Bem-vindo à ajuda do gov.br")
156
+ st.caption("💬 Qual a sua dificuldade hoje? Estou aqui para ajudar!")
157
+
158
+ # Configuração inicial
159
+ if "messages" not in st.session_state:
160
+ st.session_state["messages"] = [{"role": "assistant", "content": "Como eu posso ajudar?"}]
161
+
162
+ display_chat()
163
+
164
+ if __name__ == "__main__":
165
+ main()
interface/main.py ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import streamlit.components.v1 as components
3
+ import re
4
+ import sys
5
+ import os
6
+ import requests
7
+ from bs4 import BeautifulSoup
8
+ import difflib
9
+ from urllib.parse import urlparse, unquote
10
+ from pipelines.message import send_message
11
+ from agent import pipeline, knowledge, graph, graph_data
12
+
13
+ # Configuração do caminho
14
+ sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
15
+
16
+ # Substitui o caminho do gráfico pelo conteúdo do graph_data
17
+ graph = graph.replace('"../memory/graph_data.json"', f'{graph_data}')
18
+
19
+ # Variáveis globais
20
+ extracted_links = []
21
+
22
+ # Configuração inicial do histórico de chat
23
+ if "chat_history" not in st.session_state:
24
+ st.session_state.chat_history = []
25
+
26
+ # Funções utilitárias
27
+ def extract_content(text, tag):
28
+ """Extrai conteúdo de um texto com base na tag fornecida."""
29
+ pattern = rf'<{tag}>(.*?)</{tag}>'
30
+ match = re.search(pattern, text, re.DOTALL)
31
+ return match.group(1).strip() if match else None
32
+
33
+ def fetch_webpage_content(url):
34
+ """Obtém o conteúdo HTML de uma URL e retorna o conteúdo principal."""
35
+ try:
36
+ response = requests.get(url)
37
+ response.raise_for_status()
38
+ soup = BeautifulSoup(response.text, 'html.parser')
39
+ main_content = soup.find('div', id='main')
40
+
41
+ if main_content:
42
+ body_tag = soup.find('body')
43
+ if body_tag:
44
+ body_tag.clear()
45
+ body_tag.append(main_content)
46
+ return str(soup)
47
+ return "<html><body><p>Could not find main content on the page.</p></body></html>"
48
+ except requests.RequestException as e:
49
+ return f"<html><body><p>Error fetching the webpage: {str(e)}</p></body></html>"
50
+
51
+ def extract_links(html_content):
52
+ """Extrai todos os links (URLs) de um conteúdo HTML."""
53
+ soup = BeautifulSoup(html_content, 'html.parser')
54
+ return [a_tag['href'] for a_tag in soup.find_all('a', href=True)]
55
+
56
+ def url_to_suggestion(url):
57
+ """Converte uma URL longa em uma sugestão amigável."""
58
+ path = unquote(urlparse(url).path).strip('/').split('/')
59
+ return path[-1].replace('-', ' ').replace('_', ' ').capitalize() if path else url
60
+
61
+ def display_suggestions(links):
62
+ """Exibe sugestões para o usuário com base nos links extraídos."""
63
+ suggestions = [(link, url_to_suggestion(link)) for link in links if url_to_suggestion(link)]
64
+ st.subheader("Sugestões de Passos:")
65
+ if suggestions:
66
+ st.write("Você também pode se interessar em:")
67
+ for link, suggestion in suggestions:
68
+ st.write(f"- {suggestion}")
69
+ else:
70
+ st.write("Não há sugestões disponíveis no momento.")
71
+
72
+ def display_knowledge_tree(structure):
73
+ """Exibe a estrutura de conhecimento na barra lateral do Streamlit."""
74
+ with st.sidebar.expander("Knowledge Structure", expanded=True):
75
+ components.html(graph, height=600, scrolling=True)
76
+ st.markdown(structure)
77
+
78
+ def navigate_page(full_url):
79
+ """Função para navegar para uma nova página e atualizar o conteúdo."""
80
+ global extracted_links
81
+ with st.spinner("Obtendo conteúdo da página..."):
82
+ content = fetch_webpage_content(full_url)
83
+ extracted_links = extract_links(content)
84
+ st.session_state.chat_history.append({"type": "page", "content": content, "links": extracted_links})
85
+ st.subheader("Conteúdo da Página Web:")
86
+ components.html(content, height=600, scrolling=True)
87
+ display_suggestions(extracted_links)
88
+ st.subheader("URL Completa:")
89
+ st.write(full_url)
90
+
91
+ def main():
92
+ st.title("Alfred - Assistente de IA para Serviços gov.br")
93
+ st.write("Qual a sua dificuldade hoje? Estou aqui para ajudar!")
94
+ display_knowledge_tree(knowledge)
95
+
96
+ # Exibe o histórico do chat
97
+ for message in st.session_state.chat_history:
98
+ if message["type"] == "text":
99
+ st.markdown(message["content"])
100
+ elif message["type"] == "page":
101
+ st.subheader("Conteúdo da Página Web:")
102
+ components.html(message["content"], height=400, scrolling=True)
103
+
104
+ with st.form(key='user_input_form', clear_on_submit=True):
105
+ user_query = st.text_input("Digite sua mensagem aqui:")
106
+ submit_button = st.form_submit_button(label='Enviar')
107
+ if submit_button and user_query:
108
+ response_text = send_message(user_query, pipeline)
109
+ st.write("Bot:", response_text)
110
+ st.session_state.chat_history.append({"type": "text", "content": f"**Você:** {user_query}"})
111
+
112
+ # Extração do caminho da resposta do bot
113
+ path = extract_content(response_text, "path")
114
+ if path:
115
+ base_url = "https://www.gov.br/governodigital/pt-br/"
116
+ full_url = base_url + path
117
+ navigate_page(full_url)
118
+
119
+ st.session_state.chat_history.append({"type": "text", "content": f"**Bot:** {response_text}"})
120
+
121
+ if __name__ == "__main__":
122
+ main()
interface/visualization.html ADDED
@@ -0,0 +1,386 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Enhanced Directed Graph Visualization</title>
8
+ <script src="https://d3js.org/d3.v7.min.js"></script>
9
+ <style>
10
+ body,
11
+ html {
12
+ height: 100%;
13
+ width: 100%;
14
+ margin: 0;
15
+ padding: 0;
16
+ font-family: Arial, sans-serif;
17
+ }
18
+
19
+ #mynetwork {
20
+ width: 100%;
21
+ height: 100%;
22
+ }
23
+
24
+ .node circle {
25
+ fill: #69b3a2;
26
+ stroke: #333;
27
+ stroke-width: 1.5px;
28
+ }
29
+
30
+ .node text {
31
+ font: 12px sans-serif;
32
+ pointer-events: none;
33
+ fill: #555;
34
+ }
35
+
36
+ .link {
37
+ fill: none;
38
+ stroke: #999;
39
+ stroke-opacity: 0.6;
40
+ stroke-width: 1.5px;
41
+ marker-end: url(#arrowhead);
42
+ }
43
+
44
+ .link.directed {
45
+ stroke: #ff5722;
46
+ }
47
+
48
+ .link.highlighted {
49
+ stroke-width: 3px;
50
+ stroke: #ff5722;
51
+ }
52
+
53
+ .tooltip {
54
+ position: absolute;
55
+ text-align: center;
56
+ width: auto;
57
+ height: auto;
58
+ padding: 5px;
59
+ font: 12px sans-serif;
60
+ background: lightsteelblue;
61
+ border: 0px;
62
+ border-radius: 8px;
63
+ pointer-events: none;
64
+ opacity: 0;
65
+ }
66
+
67
+ #controls {
68
+ position: absolute;
69
+ top: 10px;
70
+ left: 10px;
71
+ z-index: 1;
72
+ }
73
+
74
+ #legend {
75
+ position: absolute;
76
+ top: 10px;
77
+ right: 10px;
78
+ background-color: rgba(255, 255, 255, 0.7);
79
+ padding: 10px;
80
+ border-radius: 3px;
81
+ font-size: 12px;
82
+ }
83
+
84
+ #legend .legend-item {
85
+ display: flex;
86
+ align-items: center;
87
+ }
88
+
89
+ #legend .legend-item span {
90
+ margin-left: 5px;
91
+ }
92
+
93
+ #legend .legend-color {
94
+ width: 12px;
95
+ height: 12px;
96
+ border-radius: 50%;
97
+ }
98
+
99
+ #search {
100
+ position: absolute;
101
+ top: 50px;
102
+ left: 10px;
103
+ z-index: 1;
104
+ }
105
+ </style>
106
+ </head>
107
+
108
+ <body>
109
+ <div id="controls">
110
+ <button onclick="fitNetwork()">Fit View</button>
111
+ <button onclick="expandAll()">Expand All</button>
112
+ <button onclick="collapseAll()">Collapse All</button>
113
+ <input type="range" id="charge" min="-1000" max="0" value="-300" step="10">
114
+ <label for="charge">Charge Strength</label>
115
+ </div>
116
+ <div id="search">
117
+ <input type="text" id="searchInput" placeholder="Search nodes...">
118
+ <button onclick="searchNode()">Search</button>
119
+ </div>
120
+ <div id="legend">
121
+ <div class="legend-item">
122
+ <div class="legend-color" style="background-color: #69b3a2;"></div>
123
+ <span>Node</span>
124
+ </div>
125
+ <div class="legend-item">
126
+ <div class="legend-color" style="background-color: #ff5722;"></div>
127
+ <span>Directed Link</span>
128
+ </div>
129
+ </div>
130
+ <div id="mynetwork"></div>
131
+ <div class="tooltip"></div>
132
+ <script>
133
+ // Define dimensions
134
+ const width = window.innerWidth;
135
+ const height = window.innerHeight;
136
+
137
+ // Default graph data
138
+ const defaultGraphData = {
139
+ "nodes": [
140
+ {"id": "1", "label": "Root"},
141
+ {"id": "2", "label": "Child 1"},
142
+ {"id": "3", "label": "Child 2"}
143
+ ],
144
+ "edges": [
145
+ {"from": "1", "to": "2"},
146
+ {"from": "1", "to": "3"}
147
+ ]
148
+ };
149
+
150
+ // Function to initialize the graph
151
+ function initializeGraph(graphData) {
152
+ // Create the SVG container
153
+ const svg = d3.select("#mynetwork")
154
+ .append("svg")
155
+ .attr("width", width)
156
+ .attr("height", height)
157
+ .call(d3.zoom().on("zoom", function (event) {
158
+ svg.attr("transform", event.transform);
159
+ }))
160
+ .append("g");
161
+
162
+ // Create a tooltip
163
+ const tooltip = d3.select("body").append("div")
164
+ .attr("class", "tooltip")
165
+ .style("opacity", 0);
166
+
167
+ // Define the arrowhead marker
168
+ svg.append("defs").append("marker")
169
+ .attr("id", "arrowhead")
170
+ .attr("viewBox", "0 -5 10 10")
171
+ .attr("refX", 20)
172
+ .attr("refY", 0)
173
+ .attr("markerWidth", 8)
174
+ .attr("markerHeight", 8)
175
+ .attr("orient", "auto")
176
+ .append("path")
177
+ .attr("d", "M 0,-5 L 10,0 L 0,5")
178
+ .attr("fill", "#999");
179
+
180
+ // Rename edges from "from" and "to" to "source" and "target"
181
+ graphData.edges.forEach(edge => {
182
+ edge.source = edge.from;
183
+ edge.target = edge.to;
184
+ delete edge.from;
185
+ delete edge.to;
186
+ });
187
+
188
+ // Collect all node IDs
189
+ const nodeIds = new Set(graphData.nodes.map(node => node.id));
190
+
191
+ // Create a mapping for default nodes
192
+ const defaultNode = {
193
+ id: "default",
194
+ label: "Unknown Node",
195
+ x: width / 2,
196
+ y: height / 2
197
+ };
198
+
199
+ // Ensure all edges have valid nodes
200
+ graphData.edges.forEach(edge => {
201
+ if (!nodeIds.has(edge.source)) {
202
+ graphData.nodes.push({ ...defaultNode, id: edge.source });
203
+ nodeIds.add(edge.source);
204
+ }
205
+ if (!nodeIds.has(edge.target)) {
206
+ graphData.nodes.push({ ...defaultNode, id: edge.target });
207
+ nodeIds.add(edge.target);
208
+ }
209
+ });
210
+
211
+ // Create the simulation
212
+ const simulation = d3.forceSimulation(graphData.nodes)
213
+ .force("link", d3.forceLink(graphData.edges).id(d => d.id).distance(100))
214
+ .force("charge", d3.forceManyBody().strength(-300))
215
+ .force("center", d3.forceCenter(width / 2, height / 2))
216
+ .force("collision", d3.forceCollide().radius(50));
217
+
218
+ // Create links
219
+ const link = svg.append("g")
220
+ .attr("class", "links")
221
+ .selectAll("line")
222
+ .data(graphData.edges)
223
+ .enter().append("line")
224
+ .attr("class", "link directed");
225
+
226
+ // Create nodes
227
+ const node = svg.append("g")
228
+ .attr("class", "nodes")
229
+ .selectAll("g")
230
+ .data(graphData.nodes)
231
+ .enter().append("g")
232
+ .attr("class", "node")
233
+ .call(d3.drag()
234
+ .on("start", dragstarted)
235
+ .on("drag", dragged)
236
+ .on("end", dragended));
237
+
238
+ node.append("circle")
239
+ .attr("r", 15)
240
+ .attr("fill", "#69b3a2");
241
+
242
+ node.append("text")
243
+ .attr("x", 18)
244
+ .attr("y", 5)
245
+ .text(d => d.label)
246
+ .attr("font-size", "12px")
247
+ .attr("fill", "#555");
248
+
249
+ // Add tooltips and highlighting
250
+ node.on("mouseover", function (event, d) {
251
+ highlightConnections(d);
252
+ showTooltip(event, d);
253
+ }).on("mouseout", function () {
254
+ unhighlightConnections();
255
+ hideTooltip();
256
+ });
257
+
258
+ // Update positions on tick
259
+ simulation.on("tick", () => {
260
+ link
261
+ .attr("x1", d => d.source.x)
262
+ .attr("y1", d => d.source.y)
263
+ .attr("x2", d => d.target.x)
264
+ .attr("y2", d => d.target.y);
265
+
266
+ node
267
+ .attr("transform", d => `translate(${d.x},${d.y})`);
268
+ });
269
+
270
+ function dragstarted(event, d) {
271
+ if (!event.active) simulation.alphaTarget(0.3).restart();
272
+ d.fx = d.x;
273
+ d.fy = d.y;
274
+ }
275
+
276
+ function dragged(event, d) {
277
+ d.fx = event.x;
278
+ d.fy = event.y;
279
+ }
280
+
281
+ function dragended(event, d) {
282
+ if (!event.active) simulation.alphaTarget(0);
283
+ d.fx = null;
284
+ d.fy = null;
285
+ }
286
+
287
+ function highlightConnections(d) {
288
+ node.style("opacity", n => n === d || graphData.edges.some(l => (l.source === d && l.target === n) || (l.target === d && l.source === n)) ? 1 : 0.1);
289
+ link.style("opacity", l => l.source === d || l.target === d ? 1 : 0.1)
290
+ .classed("highlighted", l => l.source === d || l.target === d);
291
+ }
292
+
293
+ function unhighlightConnections() {
294
+ node.style("opacity", 1);
295
+ link.style("opacity", 1).classed("highlighted", false);
296
+ }
297
+
298
+ function showTooltip(event, d) {
299
+ tooltip.transition().duration(200).style("opacity", .9);
300
+ tooltip.html(`
301
+ <strong>${d.label}</strong><br/>
302
+ ID: ${d.id}<br/>
303
+ Connections: ${graphData.edges.filter(l => l.source === d || l.target === d).length}
304
+ `)
305
+ .style("left", (event.pageX + 10) + "px")
306
+ .style("top", (event.pageY - 28) + "px");
307
+ }
308
+
309
+ function hideTooltip() {
310
+ tooltip.transition().duration(500).style("opacity", 0);
311
+ }
312
+
313
+ window.fitNetwork = () => {
314
+ const bounds = svg.node().getBBox();
315
+ const parent = svg.node().parentElement;
316
+ const fullWidth = parent.clientWidth;
317
+ const fullHeight = parent.clientHeight;
318
+ const width = bounds.width;
319
+ const height = bounds.height;
320
+ const midX = bounds.x + width / 2;
321
+ const midY = bounds.y + height / 2;
322
+ if (width === 0 || height === 0) return; // nothing to fit
323
+ const scale = 0.8 / Math.max(width / fullWidth, height / fullHeight);
324
+ const translate = [fullWidth / 2 - scale * midX, fullHeight / 2 - scale * midY];
325
+
326
+ svg.transition()
327
+ .duration(750)
328
+ .call(
329
+ d3.zoom().transform,
330
+ d3.zoomIdentity.translate(translate[0], translate[1]).scale(scale)
331
+ );
332
+ };
333
+
334
+ window.expandAll = () => {
335
+ node.style("display", "block");
336
+ link.style("display", "block");
337
+ simulation.alpha(1).restart();
338
+ };
339
+
340
+ window.collapseAll = () => {
341
+ node.style("display", d => d.id === 'root' ? "block" : "none");
342
+ link.style("display", "none");
343
+ simulation.alpha(1).restart();
344
+ };
345
+
346
+ d3.select("#charge").on("input", function () {
347
+ simulation.force("charge").strength(+this.value);
348
+ simulation.alpha(1).restart();
349
+ });
350
+
351
+ window.searchNode = () => {
352
+ const searchTerm = document.getElementById("searchInput").value.toLowerCase();
353
+ node.style("opacity", d => d.label.toLowerCase().includes(searchTerm) ? 1 : 0.1);
354
+ link.style("opacity", 0.1);
355
+ };
356
+ }
357
+
358
+ // Function to load graph data and initialize
359
+ function loadAndInitializeGraph(graphDataOrUrl) {
360
+ if (typeof graphDataOrUrl === 'string') {
361
+ // If it's a URL, fetch the data
362
+ d3.json(graphDataOrUrl).then(data => {
363
+ initializeGraph(data);
364
+ }).catch(error => {
365
+ console.error("Error loading the JSON file:", error);
366
+ initializeGraph(defaultGraphData);
367
+ });
368
+ } else if (typeof graphDataOrUrl === 'object') {
369
+ // If it's an object, use it directly
370
+ initializeGraph(graphDataOrUrl);
371
+ } else {
372
+ // If neither, use the default data
373
+ initializeGraph(defaultGraphData);
374
+ }
375
+ }
376
+
377
+ // Usage:
378
+ // loadAndInitializeGraph(someJsonObject); // To use a JSON object
379
+ // loadAndInitializeGraph(); // To use default data
380
+
381
+ // Initialize with default data
382
+ loadAndInitializeGraph("../memory/graph_data.json"); // To load from a file
383
+ </script>
384
+ </body>
385
+
386
+ </html>
memory/.gitkeep ADDED
File without changes
memory/graph_data.json ADDED
@@ -0,0 +1,562 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "nodes": [
3
+ {
4
+ "id": "root",
5
+ "label": "root"
6
+ },
7
+ {
8
+ "id": "duvidas-na-conta-gov.br",
9
+ "label": "duvidas-na-conta-gov.br"
10
+ },
11
+ {
12
+ "id": "duvidas-na-assinatura-gov.br",
13
+ "label": "duvidas-na-assinatura-gov.br"
14
+ },
15
+ {
16
+ "id": "duvidas-no-aplicativo-gov.br",
17
+ "label": "duvidas-no-aplicativo-gov.br"
18
+ },
19
+ {
20
+ "id": "duvidas-nos-dados-cadastrais",
21
+ "label": "duvidas-nos-dados-cadastrais"
22
+ },
23
+ {
24
+ "id": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-para-aumentar-o-nivel-com-a-cin",
25
+ "label": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-para-aumentar-o-nivel-com-a-cin"
26
+ },
27
+ {
28
+ "id": "duvidas-na-plataforma-de-automacao",
29
+ "label": "duvidas-na-plataforma-de-automacao"
30
+ },
31
+ {
32
+ "id": "atendimento-presencial",
33
+ "label": "atendimento-presencial"
34
+ },
35
+ {
36
+ "id": "duvidas-na-plataforma-de-automacao/cidadao",
37
+ "label": "duvidas-na-plataforma-de-automacao/cidadao"
38
+ },
39
+ {
40
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico",
41
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico"
42
+ },
43
+ {
44
+ "id": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial",
45
+ "label": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial"
46
+ },
47
+ {
48
+ "id": "duvidas-no-aplicativo-gov.br/duvidas-sobre-a-gestao-de-dispositivos-no-gov.br",
49
+ "label": "duvidas-no-aplicativo-gov.br/duvidas-sobre-a-gestao-de-dispositivos-no-gov.br"
50
+ },
51
+ {
52
+ "id": "duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br",
53
+ "label": "duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br"
54
+ },
55
+ {
56
+ "id": "duvidas-na-assinatura-gov.br/visao-geral-da-assinatura",
57
+ "label": "duvidas-na-assinatura-gov.br/visao-geral-da-assinatura"
58
+ },
59
+ {
60
+ "id": "duvidas-na-assinatura-gov.br/nao-recebi-o-codigo-da-assinatura",
61
+ "label": "duvidas-na-assinatura-gov.br/nao-recebi-o-codigo-da-assinatura"
62
+ },
63
+ {
64
+ "id": "duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura",
65
+ "label": "duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura"
66
+ },
67
+ {
68
+ "id": "duvidas-nos-dados-cadastrais/nao-consigo-cadastrar-meu-endereco-no-gov.br",
69
+ "label": "duvidas-nos-dados-cadastrais/nao-consigo-cadastrar-meu-endereco-no-gov.br"
70
+ },
71
+ {
72
+ "id": "duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal",
73
+ "label": "duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
74
+ },
75
+ {
76
+ "id": "duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos",
77
+ "label": "duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos"
78
+ },
79
+ {
80
+ "id": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
81
+ "label": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais"
82
+ },
83
+ {
84
+ "id": "duvidas-na-conta-gov.br/recuperar-conta-gov.br",
85
+ "label": "duvidas-na-conta-gov.br/recuperar-conta-gov.br"
86
+ },
87
+ {
88
+ "id": "duvidas-na-conta-gov.br/ativar-a-verificacao-em-duas-etapas",
89
+ "label": "duvidas-na-conta-gov.br/ativar-a-verificacao-em-duas-etapas"
90
+ },
91
+ {
92
+ "id": "duvidas-na-conta-gov.br/desativar-a-verificacao-em-duas-etapas",
93
+ "label": "duvidas-na-conta-gov.br/desativar-a-verificacao-em-duas-etapas"
94
+ },
95
+ {
96
+ "id": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br",
97
+ "label": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br"
98
+ },
99
+ {
100
+ "id": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada",
101
+ "label": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada"
102
+ },
103
+ {
104
+ "id": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br",
105
+ "label": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br"
106
+ },
107
+ {
108
+ "id": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br",
109
+ "label": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br"
110
+ },
111
+ {
112
+ "id": "duvidas-na-conta-gov.br/titular-falecido-na-conta-gov.br",
113
+ "label": "duvidas-na-conta-gov.br/titular-falecido-na-conta-gov.br"
114
+ },
115
+ {
116
+ "id": "duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados",
117
+ "label": "duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados"
118
+ },
119
+ {
120
+ "id": "duvidas-na-conta-gov.br/erro-403-ao-fazer-o-login",
121
+ "label": "duvidas-na-conta-gov.br/erro-403-ao-fazer-o-login"
122
+ },
123
+ {
124
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
125
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta"
126
+ },
127
+ {
128
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
129
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte"
130
+ },
131
+ {
132
+ "id": "duvidas-na-plataforma-de-automacao/cidadao/acessar-o-servico",
133
+ "label": "duvidas-na-plataforma-de-automacao/cidadao/acessar-o-servico"
134
+ },
135
+ {
136
+ "id": "duvidas-na-plataforma-de-automacao/cidadao/consultar-as-minhas-solicitacoes",
137
+ "label": "duvidas-na-plataforma-de-automacao/cidadao/consultar-as-minhas-solicitacoes"
138
+ },
139
+ {
140
+ "id": "duvidas-na-plataforma-de-automacao/cidadao/abrir-um-chamado",
141
+ "label": "duvidas-na-plataforma-de-automacao/cidadao/abrir-um-chamado"
142
+ },
143
+ {
144
+ "id": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial/bases-biometricas-faciais",
145
+ "label": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial/bases-biometricas-faciais"
146
+ },
147
+ {
148
+ "id": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/nao-lembro-de-ter-criado-uma-conta-gov.br",
149
+ "label": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/nao-lembro-de-ter-criado-uma-conta-gov.br"
150
+ },
151
+ {
152
+ "id": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/limite-de-cadastro-do-mesmo-e-mail-ou-telefone",
153
+ "label": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/limite-de-cadastro-do-mesmo-e-mail-ou-telefone"
154
+ },
155
+ {
156
+ "id": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito",
157
+ "label": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito"
158
+ },
159
+ {
160
+ "id": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/titular-da-conta-e-crianca-ou-adolescente",
161
+ "label": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/titular-da-conta-e-crianca-ou-adolescente"
162
+ },
163
+ {
164
+ "id": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/procurador-ou-curador",
165
+ "label": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/procurador-ou-curador"
166
+ },
167
+ {
168
+ "id": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-na-autenticacao-dos-bancos",
169
+ "label": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-na-autenticacao-dos-bancos"
170
+ },
171
+ {
172
+ "id": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada/bloqueio-por-senha-incorreta",
173
+ "label": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada/bloqueio-por-senha-incorreta"
174
+ },
175
+ {
176
+ "id": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br/certificado-nao-encontrado",
177
+ "label": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br/certificado-nao-encontrado"
178
+ },
179
+ {
180
+ "id": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-vincular-cnpj",
181
+ "label": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-vincular-cnpj"
182
+ },
183
+ {
184
+ "id": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-gerenciar-colaboradores",
185
+ "label": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-gerenciar-colaboradores"
186
+ },
187
+ {
188
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
189
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico"
190
+ },
191
+ {
192
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
193
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma"
194
+ },
195
+ {
196
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo",
197
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo"
198
+ },
199
+ {
200
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo",
201
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
202
+ },
203
+ {
204
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo",
205
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
206
+ },
207
+ {
208
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo",
209
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
210
+ },
211
+ {
212
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
213
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado"
214
+ },
215
+ {
216
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico",
217
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico"
218
+ },
219
+ {
220
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios",
221
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios"
222
+ },
223
+ {
224
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria",
225
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria"
226
+ },
227
+ {
228
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento",
229
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
230
+ },
231
+ {
232
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao",
233
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
234
+ },
235
+ {
236
+ "id": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito/solicitar-o-bloqueio-da-minha-conta-gov.br",
237
+ "label": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito/solicitar-o-bloqueio-da-minha-conta-gov.br"
238
+ },
239
+ {
240
+ "id": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao/processamento-dos-arquivos",
241
+ "label": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao/processamento-dos-arquivos"
242
+ }
243
+ ],
244
+ "edges": [
245
+ {
246
+ "from": "root",
247
+ "to": "duvidas-na-conta-gov.br"
248
+ },
249
+ {
250
+ "from": "root",
251
+ "to": "duvidas-na-assinatura-gov.br"
252
+ },
253
+ {
254
+ "from": "root",
255
+ "to": "duvidas-no-aplicativo-gov.br"
256
+ },
257
+ {
258
+ "from": "root",
259
+ "to": "duvidas-nos-dados-cadastrais"
260
+ },
261
+ {
262
+ "from": "root",
263
+ "to": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-para-aumentar-o-nivel-com-a-cin"
264
+ },
265
+ {
266
+ "from": "root",
267
+ "to": "duvidas-na-plataforma-de-automacao"
268
+ },
269
+ {
270
+ "from": "root",
271
+ "to": "atendimento-presencial"
272
+ },
273
+ {
274
+ "from": "duvidas-na-plataforma-de-automacao",
275
+ "to": "duvidas-na-plataforma-de-automacao/cidadao"
276
+ },
277
+ {
278
+ "from": "duvidas-na-plataforma-de-automacao",
279
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico"
280
+ },
281
+ {
282
+ "from": "duvidas-no-aplicativo-gov.br",
283
+ "to": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial"
284
+ },
285
+ {
286
+ "from": "duvidas-no-aplicativo-gov.br",
287
+ "to": "duvidas-no-aplicativo-gov.br/duvidas-sobre-a-gestao-de-dispositivos-no-gov.br"
288
+ },
289
+ {
290
+ "from": "duvidas-no-aplicativo-gov.br",
291
+ "to": "duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br"
292
+ },
293
+ {
294
+ "from": "duvidas-na-assinatura-gov.br",
295
+ "to": "duvidas-na-assinatura-gov.br/visao-geral-da-assinatura"
296
+ },
297
+ {
298
+ "from": "duvidas-na-assinatura-gov.br",
299
+ "to": "duvidas-na-assinatura-gov.br/nao-recebi-o-codigo-da-assinatura"
300
+ },
301
+ {
302
+ "from": "duvidas-na-assinatura-gov.br",
303
+ "to": "duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura"
304
+ },
305
+ {
306
+ "from": "duvidas-nos-dados-cadastrais",
307
+ "to": "duvidas-nos-dados-cadastrais/nao-consigo-cadastrar-meu-endereco-no-gov.br"
308
+ },
309
+ {
310
+ "from": "duvidas-nos-dados-cadastrais",
311
+ "to": "duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
312
+ },
313
+ {
314
+ "from": "duvidas-nos-dados-cadastrais",
315
+ "to": "duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos"
316
+ },
317
+ {
318
+ "from": "duvidas-nos-dados-cadastrais",
319
+ "to": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais"
320
+ },
321
+ {
322
+ "from": "duvidas-na-conta-gov.br",
323
+ "to": "duvidas-na-conta-gov.br/recuperar-conta-gov.br"
324
+ },
325
+ {
326
+ "from": "duvidas-na-conta-gov.br",
327
+ "to": "duvidas-na-conta-gov.br/ativar-a-verificacao-em-duas-etapas"
328
+ },
329
+ {
330
+ "from": "duvidas-na-conta-gov.br",
331
+ "to": "duvidas-na-conta-gov.br/desativar-a-verificacao-em-duas-etapas"
332
+ },
333
+ {
334
+ "from": "duvidas-na-conta-gov.br",
335
+ "to": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br"
336
+ },
337
+ {
338
+ "from": "duvidas-na-conta-gov.br",
339
+ "to": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada"
340
+ },
341
+ {
342
+ "from": "duvidas-na-conta-gov.br",
343
+ "to": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br"
344
+ },
345
+ {
346
+ "from": "duvidas-na-conta-gov.br",
347
+ "to": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br"
348
+ },
349
+ {
350
+ "from": "duvidas-na-conta-gov.br",
351
+ "to": "duvidas-na-conta-gov.br/titular-falecido-na-conta-gov.br"
352
+ },
353
+ {
354
+ "from": "duvidas-na-conta-gov.br",
355
+ "to": "duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados"
356
+ },
357
+ {
358
+ "from": "duvidas-na-conta-gov.br",
359
+ "to": "duvidas-na-conta-gov.br/erro-403-ao-fazer-o-login"
360
+ },
361
+ {
362
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico",
363
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta"
364
+ },
365
+ {
366
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico",
367
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte"
368
+ },
369
+ {
370
+ "from": "duvidas-na-plataforma-de-automacao/cidadao",
371
+ "to": "duvidas-na-plataforma-de-automacao/cidadao/acessar-o-servico"
372
+ },
373
+ {
374
+ "from": "duvidas-na-plataforma-de-automacao/cidadao",
375
+ "to": "duvidas-na-plataforma-de-automacao/cidadao/consultar-as-minhas-solicitacoes"
376
+ },
377
+ {
378
+ "from": "duvidas-na-plataforma-de-automacao/cidadao",
379
+ "to": "duvidas-na-plataforma-de-automacao/cidadao/abrir-um-chamado"
380
+ },
381
+ {
382
+ "from": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial",
383
+ "to": "duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial/bases-biometricas-faciais"
384
+ },
385
+ {
386
+ "from": "duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura",
387
+ "to": "duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
388
+ },
389
+ {
390
+ "from": "duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br",
391
+ "to": "duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
392
+ },
393
+ {
394
+ "from": "duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br",
395
+ "to": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br"
396
+ },
397
+ {
398
+ "from": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
399
+ "to": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/nao-lembro-de-ter-criado-uma-conta-gov.br"
400
+ },
401
+ {
402
+ "from": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
403
+ "to": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/limite-de-cadastro-do-mesmo-e-mail-ou-telefone"
404
+ },
405
+ {
406
+ "from": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
407
+ "to": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito"
408
+ },
409
+ {
410
+ "from": "duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos",
411
+ "to": "duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados"
412
+ },
413
+ {
414
+ "from": "duvidas-na-conta-gov.br/recuperar-conta-gov.br",
415
+ "to": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/titular-da-conta-e-crianca-ou-adolescente"
416
+ },
417
+ {
418
+ "from": "duvidas-na-conta-gov.br/recuperar-conta-gov.br",
419
+ "to": "duvidas-na-conta-gov.br/recuperar-conta-gov.br/procurador-ou-curador"
420
+ },
421
+ {
422
+ "from": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br",
423
+ "to": "duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-na-autenticacao-dos-bancos"
424
+ },
425
+ {
426
+ "from": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada",
427
+ "to": "duvidas-na-conta-gov.br/conta-gov-br-bloqueada/bloqueio-por-senha-incorreta"
428
+ },
429
+ {
430
+ "from": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br",
431
+ "to": "duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br/certificado-nao-encontrado"
432
+ },
433
+ {
434
+ "from": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br",
435
+ "to": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-vincular-cnpj"
436
+ },
437
+ {
438
+ "from": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br",
439
+ "to": "duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-gerenciar-colaboradores"
440
+ },
441
+ {
442
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
443
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico"
444
+ },
445
+ {
446
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
447
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma"
448
+ },
449
+ {
450
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
451
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo"
452
+ },
453
+ {
454
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
455
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
456
+ },
457
+ {
458
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
459
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
460
+ },
461
+ {
462
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
463
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
464
+ },
465
+ {
466
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
467
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado"
468
+ },
469
+ {
470
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
471
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico"
472
+ },
473
+ {
474
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
475
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios"
476
+ },
477
+ {
478
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
479
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria"
480
+ },
481
+ {
482
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
483
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
484
+ },
485
+ {
486
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
487
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
488
+ },
489
+ {
490
+ "from": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito",
491
+ "to": "duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito/solicitar-o-bloqueio-da-minha-conta-gov.br"
492
+ },
493
+ {
494
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
495
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios"
496
+ },
497
+ {
498
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
499
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo"
500
+ },
501
+ {
502
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
503
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
504
+ },
505
+ {
506
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
507
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
508
+ },
509
+ {
510
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
511
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
512
+ },
513
+ {
514
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
515
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
516
+ },
517
+ {
518
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
519
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
520
+ },
521
+ {
522
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
523
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
524
+ },
525
+ {
526
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo",
527
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
528
+ },
529
+ {
530
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
531
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria"
532
+ },
533
+ {
534
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
535
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
536
+ },
537
+ {
538
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
539
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
540
+ },
541
+ {
542
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico",
543
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
544
+ },
545
+ {
546
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico",
547
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
548
+ },
549
+ {
550
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios",
551
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
552
+ },
553
+ {
554
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios",
555
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
556
+ },
557
+ {
558
+ "from": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao",
559
+ "to": "duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao/processamento-dos-arquivos"
560
+ }
561
+ ]
562
+ }
memory/graph_data_tiplet.json ADDED
@@ -0,0 +1,318 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ [
3
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
4
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br"
5
+ ],
6
+ [
7
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
8
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br"
9
+ ],
10
+ [
11
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
12
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br"
13
+ ],
14
+ [
15
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
16
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais"
17
+ ],
18
+ [
19
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
20
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-para-aumentar-o-nivel-com-a-cin"
21
+ ],
22
+ [
23
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
24
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao"
25
+ ],
26
+ [
27
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/",
28
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/atendimento-presencial"
29
+ ],
30
+ [
31
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao",
32
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao"
33
+ ],
34
+ [
35
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao",
36
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico"
37
+ ],
38
+ [
39
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br",
40
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial"
41
+ ],
42
+ [
43
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br",
44
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-sobre-a-gestao-de-dispositivos-no-gov.br"
45
+ ],
46
+ [
47
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br",
48
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br"
49
+ ],
50
+ [
51
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br",
52
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br/visao-geral-da-assinatura"
53
+ ],
54
+ [
55
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br",
56
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br/nao-recebi-o-codigo-da-assinatura"
57
+ ],
58
+ [
59
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br",
60
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura"
61
+ ],
62
+ [
63
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais",
64
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-consigo-cadastrar-meu-endereco-no-gov.br"
65
+ ],
66
+ [
67
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais",
68
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
69
+ ],
70
+ [
71
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais",
72
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos"
73
+ ],
74
+ [
75
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais",
76
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais"
77
+ ],
78
+ [
79
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
80
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br"
81
+ ],
82
+ [
83
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
84
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/ativar-a-verificacao-em-duas-etapas"
85
+ ],
86
+ [
87
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
88
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/desativar-a-verificacao-em-duas-etapas"
89
+ ],
90
+ [
91
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
92
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br"
93
+ ],
94
+ [
95
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
96
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/conta-gov-br-bloqueada"
97
+ ],
98
+ [
99
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
100
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br"
101
+ ],
102
+ [
103
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
104
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br"
105
+ ],
106
+ [
107
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
108
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/titular-falecido-na-conta-gov.br"
109
+ ],
110
+ [
111
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
112
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados"
113
+ ],
114
+ [
115
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br",
116
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/erro-403-ao-fazer-o-login"
117
+ ],
118
+ [
119
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico",
120
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta"
121
+ ],
122
+ [
123
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico",
124
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte"
125
+ ],
126
+ [
127
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao",
128
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao/acessar-o-servico"
129
+ ],
130
+ [
131
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao",
132
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao/consultar-as-minhas-solicitacoes"
133
+ ],
134
+ [
135
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao",
136
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/cidadao/abrir-um-chamado"
137
+ ],
138
+ [
139
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial",
140
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-no-reconhecimento-facial/bases-biometricas-faciais"
141
+ ],
142
+ [
143
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br/nome-incorreto-na-assinatura",
144
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
145
+ ],
146
+ [
147
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br",
148
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/inconsistencia-de-dados-cadastrais-na-receita-federal"
149
+ ],
150
+ [
151
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-no-aplicativo-gov.br/duvidas-gerais-no-aplicativo-gov.br",
152
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br"
153
+ ],
154
+ [
155
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
156
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/nao-lembro-de-ter-criado-uma-conta-gov.br"
157
+ ],
158
+ [
159
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
160
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/limite-de-cadastro-do-mesmo-e-mail-ou-telefone"
161
+ ],
162
+ [
163
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais",
164
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito"
165
+ ],
166
+ [
167
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/requisitos-para-acesso-aos-servicos",
168
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-em-outros-sistemas-integrados"
169
+ ],
170
+ [
171
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br",
172
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/titular-da-conta-e-crianca-ou-adolescente"
173
+ ],
174
+ [
175
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br",
176
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/procurador-ou-curador"
177
+ ],
178
+ [
179
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br",
180
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/duvidas-na-autenticacao-dos-bancos"
181
+ ],
182
+ [
183
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/conta-gov-br-bloqueada",
184
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/conta-gov-br-bloqueada/bloqueio-por-senha-incorreta"
185
+ ],
186
+ [
187
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br",
188
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-no-login-com-certificado-no-gov.br/certificado-nao-encontrado"
189
+ ],
190
+ [
191
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br",
192
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-vincular-cnpj"
193
+ ],
194
+ [
195
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br",
196
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-na-vinculacao-de-cnpj-no-gov.br/como-gerenciar-colaboradores"
197
+ ],
198
+ [
199
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
200
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico"
201
+ ],
202
+ [
203
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
204
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma"
205
+ ],
206
+ [
207
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
208
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo"
209
+ ],
210
+ [
211
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
212
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
213
+ ],
214
+ [
215
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
216
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
217
+ ],
218
+ [
219
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta",
220
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
221
+ ],
222
+ [
223
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
224
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado"
225
+ ],
226
+ [
227
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
228
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico"
229
+ ],
230
+ [
231
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
232
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios"
233
+ ],
234
+ [
235
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
236
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria"
237
+ ],
238
+ [
239
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
240
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
241
+ ],
242
+ [
243
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte",
244
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
245
+ ],
246
+ [
247
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito",
248
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-nos-dados-cadastrais/nao-alterei-meus-dados-cadastrais/identifiquei-uma-alteracao-ou-um-acesso-suspeito/solicitar-o-bloqueio-da-minha-conta-gov.br"
249
+ ],
250
+ [
251
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
252
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios"
253
+ ],
254
+ [
255
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
256
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo"
257
+ ],
258
+ [
259
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
260
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
261
+ ],
262
+ [
263
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
264
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
265
+ ],
266
+ [
267
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/acessar-a-instancia-do-meu-servico",
268
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
269
+ ],
270
+ [
271
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
272
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/cancelar-um-processo"
273
+ ],
274
+ [
275
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
276
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/transferir-um-processo"
277
+ ],
278
+ [
279
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/visao-geral-da-plataforma",
280
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
281
+ ],
282
+ [
283
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/localizar-um-processo",
284
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/dicas-sobre-a-ferramenta/extrair-dados-de-um-processo"
285
+ ],
286
+ [
287
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
288
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-uma-solicitacao-de-evolucao-melhoria"
289
+ ],
290
+ [
291
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
292
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
293
+ ],
294
+ [
295
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/registrar-um-chamado",
296
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
297
+ ],
298
+ [
299
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico",
300
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
301
+ ],
302
+ [
303
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-a-automacao-de-um-novo-servico",
304
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
305
+ ],
306
+ [
307
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios",
308
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/solicitar-novo-treinamento"
309
+ ],
310
+ [
311
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/gestao-de-usuarios",
312
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao"
313
+ ],
314
+ [
315
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao",
316
+ "https://www.gov.br/governodigital/pt-br/acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-plataforma-de-automacao/gestor-do-servico/solicitar-suporte/sincronia-de-dados-com-a-automacao/processamento-dos-arquivos"
317
+ ]
318
+ ]
pipelines/message.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from utils.file import File
2
+
3
+ def send_message(user_query: str, pipeline):
4
+ # Estrutura das mensagens para a chamada da API
5
+ conversation_chat = []
6
+
7
+ # Adiciona a mensagem do sistema
8
+ conversation_chat.append({
9
+ "role": "system",
10
+ "content": File("prompts/system.md")
11
+ })
12
+
13
+ # Adiciona a mensagem do usuário
14
+ conversation_chat.append({
15
+ "role": "user",
16
+ "content": user_query
17
+ })
18
+
19
+ # Chama o pipeline para obter a resposta
20
+ text = pipeline(conversation_chat)
21
+
22
+ return text
prompts/knowledge.md ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ - acessibilidade-e-usuario/
2
+ - atendimento-gov.br/
3
+ - duvidas-na-conta-gov.br/
4
+ - duvidas-para-aumentar-o-nivel-da-conta-gov.br/
5
+ - duvidas-para-aumentar-o-nivel-com-a-cin/
6
+ - duvidas-na-autenticacao-dos-bancos/
7
+ - recuperar-conta-gov.br/
8
+ - titular-da-conta-e-crianca-ou-adolescente/
9
+ - procurador-ou-curador/
10
+ - ativar-a-verificacao-em-duas-etapas/
11
+ - desativar-a-verificacao-em-duas-etapas/
12
+ - conta-gov-br-bloqueada/
13
+ - bloqueio-por-senha-incorreta/
14
+ - duvidas-no-login-com-certificado-no-gov.br/
15
+ - certificado-nao-encontrado/
16
+ - duvidas-na-vinculacao-de-cnpj-no-gov.br/
17
+ - como-vincular-cnpj/
18
+ - como-gerenciar-colaboradores/
19
+ - titular-falecido-na-conta-gov.br/
20
+ - duvidas-em-outros-sistemas-integrados/
21
+ - erro-403-ao-fazer-o-login/
22
+ - duvidas-na-assinatura-gov.br/
23
+ - visao-geral-da-assinatura/
24
+ - nao-recebi-o-codigo-da-assinatura/
25
+ - nome-incorreto-na-assinatura/
26
+ - duvidas-no-aplicativo-gov.br/
27
+ - duvidas-no-reconhecimento-facial/
28
+ - bases-biometricas-faciais/
29
+ - duvidas-sobre-a-gestao-de-dispositivos-no-gov.br/
30
+ - duvidas-gerais-no-aplicativo-gov.br/
31
+ - duvidas-nos-dados-cadastrais/
32
+ - nao-consigo-cadastrar-meu-endereco-no-gov.br/
33
+ - inconsistencia-de-dados-cadastrais-na-receita-federal/
34
+ - requisitos-para-acesso-aos-servicos/
35
+ - nao-alterei-meus-dados-cadastrais/
36
+ - nao-lembro-de-ter-criado-uma-conta-gov.br/
37
+ - limite-de-cadastro-do-mesmo-e-mail-ou-telefone/
38
+ - identifiquei-uma-alteracao-ou-um-acesso-suspeito/
39
+ - solicitar-o-bloqueio-da-minha-conta-gov.br/
40
+ - duvidas-na-plataforma-de-automacao/
41
+ - cidadao/
42
+ - acessar-o-servico/
43
+ - consultar-as-minhas-solicitacoes/
44
+ - abrir-um-chamado/
45
+ - gestor-do-servico/
46
+ - dicas-sobre-a-ferramenta/
47
+ - acessar-a-instancia-do-meu-servico/
48
+ - visao-geral-da-plataforma/
49
+ - localizar-um-processo/
50
+ - cancelar-um-processo/
51
+ - transferir-um-processo/
52
+ - extrair-dados-de-um-processo/
53
+ - solicitar-suporte/
54
+ - registrar-um-chamado/
55
+ - solicitar-a-automacao-de-um-novo-servico/
56
+ - gestao-de-usuarios/
57
+ - registrar-uma-solicitacao-de-evolucao-melhoria/
58
+ - solicitar-novo-treinamento/
59
+ - sincronia-de-dados-com-a-automacao/
60
+ - processamento-dos-arquivos/
61
+ - atendimento-presencial/
prompts/system.md ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # AI Assistant System for Brazilian Government Services - Strict Path-Based Responses
2
+
3
+ ## Purpose
4
+
5
+ The primary purpose of this AI assistant is to quickly identify and return the most relevant knowledge path(s) from the provided knowledge structure that likely contain the answer to a user's question about Brazilian government services, focusing on the gov.br platform and related systems.
6
+
7
+ ## Knowledge Structure
8
+
9
+ The assistant's knowledge is strictly limited to the following hierarchical structure:
10
+
11
+ <knowledge>
12
+ - acessibilidade-e-usuario/
13
+ - atendimento-gov.br/
14
+ - duvidas-na-conta-gov.br/
15
+ - duvidas-para-aumentar-o-nivel-da-conta-gov.br/
16
+ - duvidas-para-aumentar-o-nivel-com-a-cin/
17
+ - duvidas-na-autenticacao-dos-bancos/
18
+ - recuperar-conta-gov.br/
19
+ - titular-da-conta-e-crianca-ou-adolescente/
20
+ - procurador-ou-curador/
21
+ - ativar-a-verificacao-em-duas-etapas/
22
+ - desativar-a-verificacao-em-duas-etapas/
23
+ - conta-gov-br-bloqueada/
24
+ - bloqueio-por-senha-incorreta/
25
+ - duvidas-no-login-com-certificado-no-gov.br/
26
+ - certificado-nao-encontrado/
27
+ - duvidas-na-vinculacao-de-cnpj-no-gov.br/
28
+ - como-vincular-cnpj/
29
+ - como-gerenciar-colaboradores/
30
+ - titular-falecido-na-conta-gov.br/
31
+ - duvidas-em-outros-sistemas-integrados/
32
+ - erro-403-ao-fazer-o-login/
33
+ - duvidas-na-assinatura-gov.br/
34
+ - visao-geral-da-assinatura/
35
+ - nao-recebi-o-codigo-da-assinatura/
36
+ - nome-incorreto-na-assinatura/
37
+ - duvidas-no-aplicativo-gov.br/
38
+ - duvidas-no-reconhecimento-facial/
39
+ - bases-biometricas-faciais/
40
+ - duvidas-sobre-a-gestao-de-dispositivos-no-gov.br/
41
+ - duvidas-gerais-no-aplicativo-gov.br/
42
+ - duvidas-nos-dados-cadastrais/
43
+ - nao-consigo-cadastrar-meu-endereco-no-gov.br/
44
+ - inconsistencia-de-dados-cadastrais-na-receita-federal/
45
+ - requisitos-para-acesso-aos-servicos/
46
+ - nao-alterei-meus-dados-cadastrais/
47
+ - nao-lembro-de-ter-criado-uma-conta-gov.br/
48
+ - limite-de-cadastro-do-mesmo-e-mail-ou-telefone/
49
+ - identifiquei-uma-alteracao-ou-um-acesso-suspeito/
50
+ - solicitar-o-bloqueio-da-minha-conta-gov.br/
51
+ - duvidas-na-plataforma-de-automacao/
52
+ - cidadao/
53
+ - acessar-o-servico/
54
+ - consultar-as-minhas-solicitacoes/
55
+ - abrir-um-chamado/
56
+ - gestor-do-servico/
57
+ - dicas-sobre-a-ferramenta/
58
+ - acessar-a-instancia-do-meu-servico/
59
+ - visao-geral-da-plataforma/
60
+ - localizar-um-processo/
61
+ - cancelar-um-processo/
62
+ - transferir-um-processo/
63
+ - extrair-dados-de-um-processo/
64
+ - solicitar-suporte/
65
+ - registrar-um-chamado/
66
+ - solicitar-a-automacao-de-um-novo-servico/
67
+ - gestao-de-usuarios/
68
+ - registrar-uma-solicitacao-de-evolucao-melhoria/
69
+ - solicitar-novo-treinamento/
70
+ - sincronia-de-dados-com-a-automacao/
71
+ - processamento-dos-arquivos/
72
+ - atendimento-presencial/
73
+ </knowledge>
74
+
75
+ ## Response Methodology
76
+
77
+ 1. Query Analysis: Analyze the user's question to identify key topics and subtopics.
78
+
79
+ 2. Path Matching: Based on the analysis, identify the most relevant path(s) in the provided knowledge structure.
80
+
81
+ 3. Response Format: Return only the most relevant path(s), formatted as follows:
82
+ ```
83
+ <path>path/to/relevant/information</path>
84
+ ```
85
+
86
+ 4. Multiple Paths: If multiple paths are equally relevant, return all of them, each in its own set of tags.
87
+
88
+ 5. Partial Matches: If no exact match is found, return the closest partial match, going as deep into the directory structure as possible.
89
+
90
+ 6. No Match: If no relevant path is found within the provided structure, do not provide any response.
91
+
92
+ 7. Strict Adherence: Only return paths that exist exactly as shown in the provided knowledge structure. Do not create or infer paths that are not explicitly listed.
93
+
94
+ The assistant should not provide any explanation, additional text, or paths that are not part of the given structure. The response should consist solely of the relevant path(s) enclosed in `<path>` tags, or no response if no relevant path is found.
95
+
96
+ ## Example Responses
97
+
98
+ User: "Como recuperar minha conta gov.br?"
99
+ Assistant: <path>acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/recuperar-conta-gov.br/</path>
100
+
101
+ User: "Quais são os níveis da conta gov.br?"
102
+ Assistant: <path>acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/duvidas-para-aumentar-o-nivel-da-conta-gov.br/</path>
103
+
104
+ User: "Como funciona a assinatura digital?"
105
+ Assistant: <path>acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-assinatura-gov.br/visao-geral-da-assinatura/</path>
106
+
107
+ User: "Qual é a capital do Brasil?"
108
+ Assistant: Infelizmente, não consegui entender. Você poderia perguntar de outra forma?
109
+
110
+ User: "Problemas com a conta"
111
+ Assistant: <path>acessibilidade-e-usuario/atendimento-gov.br/duvidas-na-conta-gov.br/</path>
requirements.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ansio==0.0.1
2
+ python-dotenv==1.0.1
3
+ langchain-groq==0.1.6
4
+ langchain-huggingface==0.0.3
5
+ langchain-openai==0.1.15
6
+ langchain-community==0.2.7
7
+ langchain-anthropic==0.1.19
8
+ langchain-chroma==0.1.2
9
+ langchain-google-genai==1.0.7
10
+ webcolors==24.6.0
11
+ sentence-transformers==3.0.1
12
+ docker==7.1.0
13
+ paramiko==3.4.0
14
+ duckduckgo_search==6.1.12
15
+ inputimeout==1.0.4
16
+ streamlit==1.25.0
17
+ beautifulsoup4==4.12.3
18
+ bs4==0.0.2
tools/__init__.py ADDED
File without changes
tools/python/.gitkeep ADDED
File without changes
utils/file.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #%%
2
+
3
+ def File(file_path):
4
+ with open(file_path, 'r', encoding='utf-8') as file:
5
+ return file.read()
6
+
7
+ # Example usage:
8
+ # file_contents = load_file_as_string('path/to/your/file.txt')
9
+ # print(file_contents)
10
+
11
+
utils/llm.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #%%
2
+
3
+ from dotenv import load_dotenv
4
+
5
+
6
+ from openai import OpenAI
7
+ import os
8
+
9
+
10
+ load_dotenv()
11
+ # Initialize the OpenAI model with strict output
12
+
13
+ import os
14
+ from openai import OpenAI
15
+
16
+ client = OpenAI(
17
+ # This is the default and can be omitted
18
+ api_key=os.environ.get("OPENAI_API_KEY"),
19
+ )
20
+
21
+
22
+ def chat(messages):
23
+ return client.chat.completions.create(
24
+ model="gpt-4o-mini",
25
+ messages=messages,
26
+ temperature=0.45,
27
+ max_tokens=2117,
28
+ top_p=0.29,
29
+ frequency_penalty=0,
30
+ presence_penalty=0,
31
+ response_format={
32
+ "type": "text"
33
+ }
34
+ )
35
+
36
+
37
+ # import os
38
+
39
+ # from groq import Groq
40
+
41
+ # client = Groq(
42
+ # api_key=os.environ.get("GROQ_API_KEY"),
43
+ # )
44
+
45
+ # chat_completion = client.chat.completions.create(
46
+ # messages=[
47
+ # {
48
+ # "role": "user",
49
+ # "content": "Explain the importance of fast language models",
50
+ # }
51
+ # ],
52
+ # model="llama-3.1-8b-instant",
53
+ # )
54
+
55
+ # print(chat_completion.choices[0].message.content)