Terracota BPO - Web Monitor
Tecnologia em Compliance - Monitoramento de Normas

✅ Execução 156b44ff...

156b44ff-9444-4ff9-916b-1167c57f465a

← Voltar 📄 Ver Relatório

📊 Status

✅ Sucesso

Criado: 12/01/2026 08:59:35

Iniciado: 12/01/2026 08:59:36

Finalizado: 12/01/2026 09:10:56

Duração: 11.3 minutos

📁 Contexto

Normas de Alimentos – Brasil / Mercosul / Codex

Catálogo de normas de segurança de alimentos, rotulagem, aditivos, contaminantes, microbiologia, emb...

Monitoramento:

Monitoramento food_norms

Clientes (1):

Terracota BPO

💰 Custos LLM

Aguardando dados...

Auto-envio: Não

Formato: PDF

📋 Tarefas

ID Tipo Status Criado Início Fim Worker Erro
32 send_email success 18:52:15 18:52:15 18:52:28 ubuntu-pedro -
31 send_email success 09:18:55 09:18:56 09:19:54 ubuntu-pedro -
30 run_daily success 08:59:35 08:59:36 09:10:58 ubuntu-pedro -

📝 Logs

Saída padrão (stdout):

💰 Nenhuma chamada LLM registrada nesta execução.
LLM Cost: $0.0000
LLM Tokens: 0
LLM Calls: 0
✓ Daily run completed for context 'food_norms' on 2026-01-12.
  Total norms: 40 | Checked: 38 | Changed: 0 | Errors: 0
  Report: data/reports/pending/2026-01-12_report.html
  ⚠️ Falhas registradas durante a execução:
    - [check_norm (res_gmc_26_03)] Erro HTTP ao baixar http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf: HTTP request failed for http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf: Erro de conexão - Não foi possível conectar ao servidor. Tentativas: 4. URL: http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf. Possíveis causas: servidor offline, firewall bloqueando, ou problema de rede. Erro original: HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Max retries exceeded with url: /barreirastecnicas/PDF/GMC_RES_2003-026.pdf (Caused by ReadTimeoutError("HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Read timed out. (read timeout=60.0)"))
    - [check_norm (res_gmc_80_96)] Erro HTTP ao baixar http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf: HTTP request failed for http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf: Erro de conexão - Não foi possível conectar ao servidor. Tentativas: 4. URL: http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf. Possíveis causas: servidor offline, firewall bloqueando, ou problema de rede. Erro original: HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Max retries exceeded with url: /barreirastecnicas/PDF/GMC_RES_1996-080.pdf (Caused by ReadTimeoutError("HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Read timed out. (read timeout=60.0)"))
    - [check_norm] (norma=res_gmc_26_03) Erro HTTP ao baixar http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf: HTTP request failed for http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf: Erro de conexão - Não foi possível conectar ao servidor. Tentativas: 4. URL: http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_2003-026.pdf. Possíveis causas: servidor offline, firewall bloqueando, ou problema de rede. Erro original: HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Max retries exceeded with url: /barreirastecnicas/PDF/GMC_RES_2003-026.pdf (Caused by ReadTimeoutError("HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Read timed out. (read timeout=60.0)"))
    - [check_norm] (norma=res_gmc_80_96) Erro HTTP ao baixar http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf: HTTP request failed for http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf: Erro de conexão - Não foi possível conectar ao servidor. Tentativas: 4. URL: http://www.inmetro.gov.br/barreirastecnicas/PDF/GMC_RES_1996-080.pdf. Possíveis causas: servidor offline, firewall bloqueando, ou problema de rede. Erro original: HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Max retries exceeded with url: /barreirastecnicas/PDF/GMC_RES_1996-080.pdf (Caused by ReadTimeoutError("HTTPConnectionPool(host='www.inmetro.gov.br', port=80): Read timed out. (read timeout=60.0)"))
  (Dry run: email not sent)

Erros (stderr):

✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_211_2023: 2316619 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v2 para in_211_2023
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_778_2023: 21685 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_778_2023
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_243_2018: 23914 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_243_2018
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_976_2025: 80946 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_976_2025
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para dl_986_1969: 34768 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para dl_986_1969
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para decreto_6_871_2009: 124694 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para decreto_6_871_2009
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_mapa_368_1997: 37803 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_mapa_368_1997
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_mapa_46_1998: 54215 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_mapa_46_1998
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_216_2004: 37822 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_216_2004
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_275_2002: 38963 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_275_2002
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_160_2022: 47333 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para in_160_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_722_2022: 8022 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_722_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para lei_9_832_1999: 1229 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para lei_9_832_1999
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_svs_ms_27_1996: 9918 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_svs_ms_27_1996
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_122_2001: 9142 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_122_2001
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_123_2001: 38971 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_123_2001
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_326_2019: 143711 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_326_2019
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_51_2010: 2512 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_51_2010
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_51_2010_anexo: 68441 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_51_2010_anexo
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_52_2010: 18921 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_52_2010
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_854_2024: 36761 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_854_2024
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_88_2016: 116421 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_88_2016
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_91_2001: 10334 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_91_2001
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para cxc_1_1969: 143323 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para cxc_1_1969
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para cxs_1_1985: 31952 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para cxs_1_1985
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
/home/pedro-brigido/terracota_project/web_monitor/app/ai/url_search/tools.py:131: RuntimeWarning: This package (`duckduckgo_search`) has been renamed to `ddgs`! Use `pip install ddgs` instead.
  with DDGS() as ddgs:
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_mapa_46_2007: 38608 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v5 para in_mapa_46_2007
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_mapa_76_2018: 16652 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para in_mapa_76_2018
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
/home/pedro-brigido/terracota_project/web_monitor/.venv/lib/python3.11/site-packages/urllib3/connectionpool.py:1097: InsecureRequestWarning: Unverified HTTPS request is being made to host 'www.defesa.agricultura.sp.gov.br'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#tls-warnings
  warnings.warn(
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_mapa_146_1996: 64355 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_mapa_146_1996
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_161_2022: 12309 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para in_161_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_724_2022: 930 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_724_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_mapa_11_2000: 3723 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v2 para in_mapa_11_2000
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_sda_664_2022: 8473 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_sda_664_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para portaria_sda_765_2023: 9494 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para portaria_sda_765_2023
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_281_2024: 31188 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v8 para in_281_2024
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_843_2024: 23659 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v5 para rdc_843_2024
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para in_75_2020: 77529 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para in_75_2020
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_429_2020: 53306 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_429_2020
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
✅ [DEBUG] PASSO 1: Conteúdo da WEB convertido para .md para rdc_727_2022: 38783 caracteres
🔍 [DEBUG] PASSO 2: Comparando .md da WEB com arquivo local v1 para rdc_727_2022
🔍 [DEBUG] PASSO 2: Nenhuma mudança de conteúdo detectada (apenas formatação)
🔍 [DEBUG] PASSO 4: Conteúdo idêntico detectado por comparação de .md, ignorando mudança de hash
⚠️  Email não enviado: EmailSender não foi configurado. Verifique as variáveis de ambiente EMAIL_FROM e EMAIL_TO.