worker-automate-hub 0.5.821__tar.gz → 0.5.822__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of worker-automate-hub might be problematic. Click here for more details.

Files changed (109) hide show
  1. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/PKG-INFO +1 -1
  2. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/pyproject.toml +1 -1
  3. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/extracao_saldo_estoque_fiscal.py +90 -11
  4. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/README.md +0 -0
  5. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/__init__.py +0 -0
  6. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/__init__.py +0 -0
  7. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/ahead_service.py +0 -0
  8. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/client.py +0 -0
  9. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/datalake_service.py +0 -0
  10. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/helpers/__init__.py +0 -0
  11. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/helpers/api_helpers.py +0 -0
  12. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/rdp_service.py +0 -0
  13. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/rpa_fila_service.py +0 -0
  14. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/rpa_historico_service.py +0 -0
  15. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/api/webhook_service.py +0 -0
  16. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/cli.py +0 -0
  17. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/config/__init__.py +0 -0
  18. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/config/settings.py +0 -0
  19. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/config.py +0 -0
  20. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/core/so_manipulation.py +0 -0
  21. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/__init__.py +0 -0
  22. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/deprecation.py +0 -0
  23. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/rate_limit.py +0 -0
  24. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/repeat.py +0 -0
  25. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/retry.py +0 -0
  26. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/singleton.py +0 -0
  27. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/decorators/timeit.py +0 -0
  28. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/__init__.py +0 -0
  29. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/__init__.py +0 -0
  30. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/rpa_configuracao.py +0 -0
  31. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/rpa_fila.py +0 -0
  32. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/rpa_historico.py +0 -0
  33. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/rpa_processo.py +0 -0
  34. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dao/rpa_robo.py +0 -0
  35. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/__init__.py +0 -0
  36. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/rpa_historico_request_dto.py +0 -0
  37. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/rpa_processo_entrada_dto.py +0 -0
  38. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/rpa_processo_rdp_dto.py +0 -0
  39. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/rpa_sap_dto.py +0 -0
  40. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/models/dto/rpa_sistema_dto.py +0 -0
  41. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/__init__.py +0 -0
  42. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/__init__.py +0 -0
  43. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/abertura_livros_fiscais.py +0 -0
  44. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/coleta_dje_process.py +0 -0
  45. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/conexao_rdp.py +0 -0
  46. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/cte_manual.py +0 -0
  47. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/cte_xml.py +0 -0
  48. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/descartes.py +0 -0
  49. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/devolucao_ctf.py +0 -0
  50. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/devolucao_ctf_35.py +0 -0
  51. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/devolucao_prazo_a_faturar.py +0 -0
  52. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_estadual_go.py +0 -0
  53. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_estadual_main.py +0 -0
  54. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_estadual_mt.py +0 -0
  55. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_estadual_sc.py +0 -0
  56. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_estadual_sp.py +0 -0
  57. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/ecac_federal.py +0 -0
  58. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_cte_1353.py +0 -0
  59. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_cte_333.py +0 -0
  60. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_15.py +0 -0
  61. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_16.py +0 -0
  62. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_207.py +0 -0
  63. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_22.py +0 -0
  64. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_32.py +0 -0
  65. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_33.py +0 -0
  66. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_34.py +0 -0
  67. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_36.py +0 -0
  68. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_37.py +0 -0
  69. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_39.py +0 -0
  70. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_500.py +0 -0
  71. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_503.py +0 -0
  72. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_505.py +0 -0
  73. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_7139.py +0 -0
  74. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_9.py +0 -0
  75. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/entrada_de_notas_9000.py +0 -0
  76. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/exemplo_processo.py +0 -0
  77. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/extracao_fechamento_contabil.py +0 -0
  78. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/extracao_fechamento_emsys.py +0 -0
  79. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/extracao_saldo_estoque.py +0 -0
  80. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/fechar_conexao_rdp.py +0 -0
  81. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/fidc_exportacao_docs_portal_b2b.py +0 -0
  82. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/fidc_gerar_nosso_numero.py +0 -0
  83. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/fidc_remessa_cobranca_cnab240.py +0 -0
  84. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/fidc_retorno_cobranca.py +0 -0
  85. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/geracao_aprovacao_pedidos.py +0 -0
  86. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/geracao_aprovacao_pedidos_novo.py +0 -0
  87. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/geracao_balancetes_filial.py +0 -0
  88. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/integracao_contabil.py +0 -0
  89. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/integracao_contabil_generica.py +0 -0
  90. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/lancamento_pis_cofins.py +0 -0
  91. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/lancamento_rateio.py +0 -0
  92. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/login_emsys.py +0 -0
  93. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/login_emsys_versao_especifica.py +0 -0
  94. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/notas_faturamento_sap.py +0 -0
  95. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/opex_capex.py +0 -0
  96. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/playground.py +0 -0
  97. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/sped_fiscal.py +0 -0
  98. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/jobs/transferencias.py +0 -0
  99. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/task_definitions.py +0 -0
  100. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/tasks/task_executor.py +0 -0
  101. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/__init__.py +0 -0
  102. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/env.py +0 -0
  103. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/get_creds_gworkspace.py +0 -0
  104. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/logger.py +0 -0
  105. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/toast.py +0 -0
  106. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/updater.py +0 -0
  107. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/util.py +0 -0
  108. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/utils/utils_nfe_entrada.py +0 -0
  109. {worker_automate_hub-0.5.821 → worker_automate_hub-0.5.822}/worker_automate_hub/worker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: worker-automate-hub
3
- Version: 0.5.821
3
+ Version: 0.5.822
4
4
  Summary: Worker Automate HUB é uma aplicação para automatizar rotinas de RPA nos ambientes Argenta.
5
5
  Author: Joel Paim
6
6
  Requires-Python: >=3.12,<4.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "worker-automate-hub"
3
- version = "0.5.821"
3
+ version = "0.5.822"
4
4
  description = "Worker Automate HUB é uma aplicação para automatizar rotinas de RPA nos ambientes Argenta."
5
5
  authors = ["Joel Paim"]
6
6
  readme = "README.md"
@@ -5,6 +5,8 @@ from pywinauto import Application, timings, findwindows, keyboard, Desktop
5
5
  import sys
6
6
  import io
7
7
  import win32gui
8
+ import pyperclip
9
+ from unidecode import unidecode
8
10
 
9
11
  # sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..')))
10
12
 
@@ -44,6 +46,88 @@ console = Console()
44
46
  pyautogui.PAUSE = 0.5
45
47
  pyautogui.FAILSAFE = False
46
48
 
49
+ # -------- Configs de velocidade --------
50
+ SLEEP_BETWEEN_KEYS = 0.03 # 30ms entre DOWNs
51
+ SLEEP_AFTER_COPY = 0.06 # 60ms após Ctrl+C
52
+
53
+ # -------- Utilidades --------
54
+ def _get_main_window_by_class(timeout_s: int = 5):
55
+ app = Application(backend="win32").connect(class_name="TFrmMovtoLivroFiscal", timeout=timeout_s)
56
+ win = app.window(class_name="TFrmMovtoLivroFiscal")
57
+ try: win.set_focus()
58
+ except Exception: pass
59
+ return app, win
60
+
61
+ def _find_grid_descendant(win):
62
+ # pega o maior TcxGridSite/TcxGrid
63
+ best, best_area = None, -1
64
+ for d in win.descendants():
65
+ try:
66
+ cls = (d.class_name() or "").lower()
67
+ if "tcxgridsite" in cls or "tcxgrid" in cls:
68
+ r = d.rectangle()
69
+ area = max(0,(r.right-r.left)) * max(0,(r.bottom-r.top))
70
+ if area > best_area:
71
+ best, best_area = d, area
72
+ except:
73
+ pass
74
+ if not best:
75
+ raise RuntimeError("Grid não localizado (TcxGrid/TcxGridSite).")
76
+ return best
77
+
78
+ def _copy_active_row_text(retries: int = 1) -> str:
79
+ pyperclip.copy("")
80
+ send_keys("^c")
81
+ time.sleep(SLEEP_AFTER_COPY)
82
+ txt = pyperclip.paste().strip()
83
+ if txt or retries <= 0:
84
+ return txt
85
+ # 1 tentativa extra (às vezes a 1ª vem vazia)
86
+ return _copy_active_row_text(retries-1)
87
+
88
+ def _linha_bate_criterio(txt: str, mes: str, ano: str) -> bool:
89
+ if not txt:
90
+ return False
91
+ t = unidecode(re.sub(r"\s+"," ", txt)).lower()
92
+ # dd/MM/AAAA do mês/ano desejado
93
+ if not re.search(rf"\b(0[1-9]|[12]\d|3[01])/{mes}/{ano}\b", t):
94
+ return False
95
+ return "livro - inventario" in t
96
+
97
+ # -------- Varredura assumindo que JÁ ESTÁ na 1ª linha --------
98
+ def selecionar_inventario_por_competencia(competencia_mm_aaaa: str, max_linhas: int = 800) -> bool:
99
+ """
100
+ Pré-condição: o foco já está na PRIMEIRA LINHA do grid (você clicou por coordenada).
101
+ A função só navega com SETA-PARA-BAIXO até encontrar a linha alvo e PARA.
102
+ """
103
+ # Selecionar primeira linha inventario
104
+ pyautogui.click(928, 475)
105
+ time.sleep(1)
106
+ m = re.fullmatch(r"(\d{2})/(\d{4})", competencia_mm_aaaa.strip())
107
+ if not m:
108
+ raise ValueError("Competência deve ser MM/AAAA (ex.: '09/2025').")
109
+ mes, ano = m.groups()
110
+
111
+ # garantir foco na janela/grid (não move o cursor de linha)
112
+ _, win = _get_main_window_by_class()
113
+ grid = _find_grid_descendant(win)
114
+ try:
115
+ grid.set_focus()
116
+ except Exception:
117
+ pass
118
+
119
+ for i in range(max_linhas):
120
+ linha = _copy_active_row_text()
121
+ if _linha_bate_criterio(linha, mes, ano):
122
+ # ✅ Linha correta já está selecionada (sem cliques)
123
+ # print(f"[OK] Encontrado em {i+1} passos: {linha}")
124
+ return True
125
+ send_keys("{DOWN}")
126
+ time.sleep(SLEEP_BETWEEN_KEYS)
127
+
128
+ # print("[WARN] Não encontrado dentro do limite de linhas.")
129
+ return False
130
+
47
131
 
48
132
  async def extracao_saldo_estoque_fiscal(
49
133
  task: RpaProcessoEntradaDTO,
@@ -131,6 +215,7 @@ async def extracao_saldo_estoque_fiscal(
131
215
 
132
216
  # Caminho da imagem do botão
133
217
  imagem_botao = r"assets\\extracao_relatorios\\btn_incluir_livro.png"
218
+ # imagem_botao = r"C:\Users\automatehub\Documents\GitHub\worker-automate-hub\assets\extracao_relatorios\btn_incluir_livro.png"
134
219
 
135
220
  if os.path.exists(imagem_botao):
136
221
  try:
@@ -214,27 +299,19 @@ async def extracao_saldo_estoque_fiscal(
214
299
  if win is None:
215
300
  raise TimeoutError(f"Janela '{CLASS}' não apareceu dentro do timeout.")
216
301
 
217
- # 2) Conecta ao app usando o handle da janela encontrada
218
- app = Application(backend="win32").connect(handle=win.handle)
219
- main_window = app.window(handle=win.handle)
220
-
221
- # Dá o foco na janela
222
- main_window.set_focus()
223
-
224
- await worker_sleep(2)
225
-
226
- main_window.close()
302
+ w.close()
227
303
 
228
304
  await worker_sleep(2)
229
305
 
230
306
  ##### Janela Movimento Livro Fiscal #####
231
307
  # Selecionar primeira linha inventario
232
- pyautogui.click(928, 475)
308
+ selecionar_inventario_por_competencia(periodo)
233
309
 
234
310
  await worker_sleep(2)
235
311
 
236
312
  # Clicar em visualizar livro
237
313
  caminho = r"assets\\extracao_relatorios\\btn_visu_livros.png"
314
+ # caminho =r"C:\Users\automatehub\Documents\GitHub\worker-automate-hub\assets\extracao_relatorios\btn_visu_livros.png"
238
315
  # Verifica se o arquivo existe
239
316
  if os.path.isfile(caminho):
240
317
  print("A imagem existe:", caminho)
@@ -313,6 +390,7 @@ async def extracao_saldo_estoque_fiscal(
313
390
  # 1) Abrir o picker pelo botão (imagem)
314
391
  console.print("Procurando botão de salvar (imagem)...", style="bold cyan")
315
392
  caminho_img = r"assets\\extracao_relatorios\btn_salvar.png"
393
+ # caminho_img = r"C:\Users\automatehub\Documents\GitHub\worker-automate-hub\assets\extracao_relatorios\btn_salvar.png"
316
394
  if os.path.isfile(caminho_img):
317
395
  pos = pyautogui.locateCenterOnScreen(caminho_img, confidence=0.9)
318
396
  if pos:
@@ -607,3 +685,4 @@ async def extracao_saldo_estoque_fiscal(
607
685
  status=RpaHistoricoStatusEnum.Falha,
608
686
  tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)],
609
687
  )
688
+