worker-automate-hub 0.5.832__tar.gz → 0.5.833__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.
Files changed (110) hide show
  1. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/PKG-INFO +1 -1
  2. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/pyproject.toml +1 -1
  3. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/devolucao_produtos.py +95 -27
  4. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/README.md +0 -0
  5. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/__init__.py +0 -0
  6. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/__init__.py +0 -0
  7. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/ahead_service.py +0 -0
  8. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/client.py +0 -0
  9. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/datalake_service.py +0 -0
  10. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/helpers/__init__.py +0 -0
  11. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/helpers/api_helpers.py +0 -0
  12. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/rdp_service.py +0 -0
  13. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/rpa_fila_service.py +0 -0
  14. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/rpa_historico_service.py +0 -0
  15. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/api/webhook_service.py +0 -0
  16. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/cli.py +0 -0
  17. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/config/__init__.py +0 -0
  18. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/config/settings.py +0 -0
  19. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/config.py +0 -0
  20. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/core/so_manipulation.py +0 -0
  21. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/__init__.py +0 -0
  22. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/deprecation.py +0 -0
  23. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/rate_limit.py +0 -0
  24. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/repeat.py +0 -0
  25. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/retry.py +0 -0
  26. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/singleton.py +0 -0
  27. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/decorators/timeit.py +0 -0
  28. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/__init__.py +0 -0
  29. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/__init__.py +0 -0
  30. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/rpa_configuracao.py +0 -0
  31. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/rpa_fila.py +0 -0
  32. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/rpa_historico.py +0 -0
  33. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/rpa_processo.py +0 -0
  34. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dao/rpa_robo.py +0 -0
  35. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/__init__.py +0 -0
  36. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/rpa_historico_request_dto.py +0 -0
  37. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/rpa_processo_entrada_dto.py +0 -0
  38. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/rpa_processo_rdp_dto.py +0 -0
  39. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/rpa_sap_dto.py +0 -0
  40. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/models/dto/rpa_sistema_dto.py +0 -0
  41. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/__init__.py +0 -0
  42. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/__init__.py +0 -0
  43. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/abertura_livros_fiscais.py +0 -0
  44. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/coleta_dje_process.py +0 -0
  45. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/conexao_rdp.py +0 -0
  46. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/cte_manual.py +0 -0
  47. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/cte_xml.py +0 -0
  48. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/descartes.py +0 -0
  49. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/devolucao_ctf.py +0 -0
  50. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/devolucao_ctf_35.py +0 -0
  51. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/devolucao_prazo_a_faturar.py +0 -0
  52. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_estadual_go.py +0 -0
  53. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_estadual_main.py +0 -0
  54. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_estadual_mt.py +0 -0
  55. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_estadual_sc.py +0 -0
  56. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_estadual_sp.py +0 -0
  57. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/ecac_federal.py +0 -0
  58. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_cte_1353.py +0 -0
  59. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_cte_333.py +0 -0
  60. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_15.py +0 -0
  61. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_16.py +0 -0
  62. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_207.py +0 -0
  63. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_22.py +0 -0
  64. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_32.py +0 -0
  65. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_33.py +0 -0
  66. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_34.py +0 -0
  67. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_36.py +0 -0
  68. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_37.py +0 -0
  69. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_39.py +0 -0
  70. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_500.py +0 -0
  71. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_503.py +0 -0
  72. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_505.py +0 -0
  73. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_7139.py +0 -0
  74. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_9.py +0 -0
  75. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/entrada_de_notas_9000.py +0 -0
  76. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/exemplo_processo.py +0 -0
  77. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/extracao_fechamento_contabil.py +0 -0
  78. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/extracao_fechamento_emsys.py +0 -0
  79. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/extracao_saldo_estoque.py +0 -0
  80. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/extracao_saldo_estoque_fiscal.py +0 -0
  81. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/fechar_conexao_rdp.py +0 -0
  82. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/fidc_exportacao_docs_portal_b2b.py +0 -0
  83. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/fidc_gerar_nosso_numero.py +0 -0
  84. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/fidc_remessa_cobranca_cnab240.py +0 -0
  85. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/fidc_retorno_cobranca.py +0 -0
  86. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/geracao_aprovacao_pedidos.py +0 -0
  87. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/geracao_aprovacao_pedidos_novo.py +0 -0
  88. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/geracao_balancetes_filial.py +0 -0
  89. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/integracao_contabil.py +0 -0
  90. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/integracao_contabil_generica.py +0 -0
  91. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/lancamento_pis_cofins.py +0 -0
  92. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/lancamento_rateio.py +0 -0
  93. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/login_emsys.py +0 -0
  94. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/login_emsys_versao_especifica.py +0 -0
  95. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/notas_faturamento_sap.py +0 -0
  96. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/opex_capex.py +0 -0
  97. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/playground.py +0 -0
  98. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/sped_fiscal.py +0 -0
  99. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/jobs/transferencias.py +0 -0
  100. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/task_definitions.py +0 -0
  101. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/tasks/task_executor.py +0 -0
  102. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/__init__.py +0 -0
  103. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/env.py +0 -0
  104. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/get_creds_gworkspace.py +0 -0
  105. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/logger.py +0 -0
  106. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/toast.py +0 -0
  107. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/updater.py +0 -0
  108. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/util.py +0 -0
  109. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/worker_automate_hub/utils/utils_nfe_entrada.py +0 -0
  110. {worker_automate_hub-0.5.832 → worker_automate_hub-0.5.833}/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.832
3
+ Version: 0.5.833
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.832"
3
+ version = "0.5.833"
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"
@@ -2,6 +2,7 @@ import asyncio
2
2
  import warnings
3
3
  from datetime import datetime
4
4
  import json
5
+ import ast
5
6
  import io
6
7
  import pyautogui
7
8
  from pywinauto.application import Application
@@ -127,7 +128,7 @@ def normalize_config_entrada(cfg: dict) -> dict:
127
128
  for k in chaves_remover:
128
129
  cfg.pop(k, None)
129
130
  return cfg
130
-
131
+
131
132
 
132
133
  # --- fim do normalizador ---
133
134
 
@@ -159,12 +160,40 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
159
160
  res = await get_notas_produtos(int(cod_fornecedor), int(empresa), itens)
160
161
  by_code = res.get("por_codigo", {}) or {} # dict dinâmico por código
161
162
 
163
+ # ========= EXTRAÇÃO DE UM CFOP (PRIMEIRO ENCONTRADO) =========
164
+ cfop = None # Apenas um CFOP em variável
165
+ for info in by_code.values():
166
+ notas_raw = info.get("notas") or []
167
+ # garante que seja lista
168
+ if isinstance(notas_raw, (str, int)):
169
+ notas_raw = [notas_raw]
170
+
171
+ achou = False
172
+ for n in notas_raw:
173
+ try:
174
+ # Caso venha como string de dict: "{'nota': '1401414', 'cfop': '1102'}"
175
+ if isinstance(n, str) and n.strip().startswith("{"):
176
+ nota_dict = ast.literal_eval(n)
177
+ elif isinstance(n, dict):
178
+ nota_dict = n
179
+ else:
180
+ nota_dict = None
181
+
182
+ if isinstance(nota_dict, dict) and "cfop" in nota_dict:
183
+ cfop = nota_dict["cfop"]
184
+ achou = True
185
+ break
186
+ except Exception:
187
+ continue
188
+ if achou:
189
+ break
190
+
162
191
  # Constrói os itens na estrutura usada no fluxo de UI
163
192
  itens_ui = []
164
- notas_encontradas = [] # acumula notas para deduplicar depois
193
+ notas_encontradas = [] # acumula apenas os números das notas (strings) para deduplicar depois
165
194
 
166
195
  for it in itens:
167
- # aceita "codigoProduto"/"quantidade" e "codigo"/"qtd"
196
+ # aceita "descricaoProduto" contendo o código, ou "codigo"/"codigoProduto"
168
197
  desc = it.get("descricaoProduto", "") or ""
169
198
  nums = re.findall(r"\d+", desc)
170
199
  if not nums:
@@ -179,7 +208,7 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
179
208
  else:
180
209
  cod = int(nums[0])
181
210
 
182
- # quantidade (como int)
211
+ # quantidade (como int > 0)
183
212
  qtd_raw = it.get("quantidade", it.get("qtd"))
184
213
  try:
185
214
  qtd = int(qtd_raw)
@@ -191,14 +220,35 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
191
220
  info = by_code.get(cod) or {}
192
221
  valor_unit = float(info.get("valorUnitario", 0) or 0)
193
222
 
194
- # Normaliza "notas" para lista de strings
195
- notas_item = info.get("notas") or []
196
- if isinstance(notas_item, (str, int)):
197
- notas_item = [notas_item]
198
- notas_item = [str(n) for n in notas_item]
223
+ # Normaliza "notas" para lista com os números das notas (strings)
224
+ notas_item_raw = info.get("notas") or []
225
+ if isinstance(notas_item_raw, (str, int)):
226
+ notas_item_raw = [notas_item_raw]
227
+
228
+ notas_item_nums = []
229
+ for n in notas_item_raw:
230
+ # 1) se já vier dict
231
+ if isinstance(n, dict):
232
+ nota_num = n.get("nota")
233
+ if nota_num is not None:
234
+ notas_item_nums.append(str(nota_num))
235
+ continue
236
+
237
+ # 2) se vier string de dict "{'nota': '1401414', 'cfop': '1102'}"
238
+ if isinstance(n, str) and n.strip().startswith("{"):
239
+ try:
240
+ d = ast.literal_eval(n)
241
+ if isinstance(d, dict) and d.get("nota") is not None:
242
+ notas_item_nums.append(str(d["nota"]))
243
+ continue
244
+ except Exception:
245
+ pass
246
+
247
+ # 3) fallback: manter como string (pode ser já o número)
248
+ notas_item_nums.append(str(n))
199
249
 
200
250
  # Acumula para a lista geral (será deduplicada depois)
201
- notas_encontradas.extend(notas_item)
251
+ notas_encontradas.extend(notas_item_nums)
202
252
 
203
253
  itens_ui.append(
204
254
  {
@@ -206,7 +256,7 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
206
256
  "quantidade": qtd,
207
257
  "valor_unitario": valor_unit,
208
258
  "valor_total_item": round(valor_unit * qtd, 2),
209
- "notas": notas_item, # mantém vínculo item↔notas
259
+ "notas": notas_item_nums, # vínculo item números das notas
210
260
  }
211
261
  )
212
262
 
@@ -221,11 +271,12 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
221
271
 
222
272
  data = {
223
273
  "nf_referencia": nf_ref, # ex.: ['1418727', '1410744']
224
- "itens": itens_ui, # cada item com suas notas
274
+ "itens": itens_ui, # cada item com suas notas (apenas números)
225
275
  "totais": {
226
276
  "valor_final": round(sum(i["valor_total_item"] for i in itens_ui), 2)
227
277
  },
228
278
  "itens_por_nota": itens_por_nota, # para uso direto no fluxo de UI
279
+ "cfop": cfop, # <<< CFOP único extraído e disponível no payload
229
280
  }
230
281
  # ========= FIM DA MONTAGEM DO DATA =========
231
282
 
@@ -317,11 +368,13 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
317
368
  app = Application().connect(class_name="TFrmPreVenda")
318
369
  main_window = app["TFrmPreVenda"]
319
370
  console.print("Verificar estado...")
320
- if estado != "RS":
321
- modelo = "DEVOLUÇÃO DE COMPRA DE MERCADORIAS SC"
371
+ cfop_dentro = ["5101", "5102", "5103", "5104", "1102"]
372
+ if cfop not in cfop_dentro:
373
+ modelo = "DEVOLUCAO DE COMPRA DE MERCADORIAS SC"
322
374
  else:
323
375
  modelo = "DEVOLUCAO DE COMPRA DE MERCADORIAS - TRIBUTADO"
324
376
 
377
+
325
378
  # Inserir modelo
326
379
  console.print("Inserir modelo...")
327
380
  select_modelo = main_window.child_window(
@@ -402,7 +455,22 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
402
455
  await worker_sleep(1)
403
456
  input_codigo.type_keys(codigo, with_spaces=True, set_foreground=True)
404
457
  keyboard.send_keys("{TAB}")
405
- await worker_sleep(1)
458
+ await worker_sleep(5)
459
+ try:
460
+ # Verificar item sem saldo
461
+ app_item_ss = Application().connect(class_name="TFrmPesquisaItem")
462
+ item_ss = app_item_ss["TFrmPesquisaItem"]
463
+ btn_ss = item_ss.child_window(
464
+ title="&Cancela", class_name="TDBIBitBtn").click_input()
465
+ # adiciona no dicionário de erros
466
+ itens_sem_saldo[codigo] = {
467
+ "quantidade": quantidade,
468
+ "valor_unitario": val_unitario,
469
+ }
470
+ continue
471
+
472
+ except:
473
+ pass
406
474
 
407
475
  # --- Unidade (UNI) ---
408
476
  console.print("Selecionar Unidade...")
@@ -472,7 +540,7 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
472
540
  had_saldo = True
473
541
  try:
474
542
  console.print("Verificar mensagem de saldo menor....")
475
- # img_saldo = r"C:\Users\automatehub\Documents\GitHub\worker-assets\emsys\saldo_menor.png"
543
+ # img_saldo = r"C:\Users\automatehub\Desktop\img_leo\saldo_menor.png"
476
544
  img_saldo = "assets\\devolucao_produtos\\saldo_menor.png"
477
545
  img_saldo_bool = False
478
546
 
@@ -929,7 +997,16 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
929
997
  app = Application().connect(class_name="TFrmDadosTributacaoProdutoPreVenda")
930
998
  trib = app["TFrmDadosTributacaoProdutoPreVenda"]
931
999
 
932
- if estado == "RS" and "pepsico" in fornecedor.lower():
1000
+ if "disbal" in fornecedor.lower():
1001
+ select_trib.select("020 - 020 - ICMS 12% RED. BASE 41,667")
1002
+
1003
+ elif "punta balena" in fornecedor.lower():
1004
+ select_trib.select("000 - 000 - ICMS - 12%")
1005
+
1006
+ elif "vitrola" in fornecedor.lower():
1007
+ select_trib.select("041 - 041 - ICMS - NAO INCIDENTE ")
1008
+
1009
+ elif estado == "RS" and "pepsico" in fornecedor.lower():
933
1010
  select_trib = trib.child_window(class_name="TDBIComboBox", found_index=4)
934
1011
  select_trib.select("051 - 051 - ICMS 17% RED BC 29,4118% - TRIBUT.CORRETA")
935
1012
  print("Selecionado: 051 - 051 - ICMS 17% RED BC 29,4118% - TRIBUT.CORRETA")
@@ -947,16 +1024,6 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
947
1024
  else:
948
1025
  print("Estado diferente dos mapeados")
949
1026
 
950
- if "disbal" in fornecedor.lower():
951
- select_trib.select("020 - 020 - ICMS 12% RED. BASE 41,667")
952
-
953
- elif "punta balena" in fornecedor.lower():
954
- select_trib.select("000 - 000 - ICMS - 12%")
955
-
956
- elif "vitrola" in fornecedor.lower():
957
- select_trib.select("041 - 041 - ICMS - NAO INCIDENTE ")
958
-
959
-
960
1027
  await worker_sleep(2)
961
1028
 
962
1029
  trib.child_window(title="&OK", class_name="TBitBtn").click_input()
@@ -1119,3 +1186,4 @@ async def devolucao_produtos(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
1119
1186
  status=RpaHistoricoStatusEnum.Sucesso,
1120
1187
  tags=[RpaTagDTO(descricao=RpaTagEnum.Negocio)],
1121
1188
  )
1189
+