agroplan-ai-cli 1.0.11 → 1.0.13
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.
|
@@ -8,6 +8,19 @@ from core.planner import gerar_cenarios, gerar_plano_genetico
|
|
|
8
8
|
from core.bruteforce_validator import comparar_ag_com_forca_bruta, executar_multiplas_rodadas
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
def safe_print(message):
|
|
12
|
+
"""
|
|
13
|
+
Print seguro que funciona no Windows mesmo com emojis
|
|
14
|
+
|
|
15
|
+
Tenta print normal, se falhar por encoding, remove caracteres não-ASCII
|
|
16
|
+
"""
|
|
17
|
+
try:
|
|
18
|
+
print(message)
|
|
19
|
+
except UnicodeEncodeError:
|
|
20
|
+
# Fallback: remove caracteres não-ASCII
|
|
21
|
+
print(message.encode("ascii", errors="ignore").decode("ascii"))
|
|
22
|
+
|
|
23
|
+
|
|
11
24
|
def format_currency_brl(value):
|
|
12
25
|
"""Formata valor monetário em padrão brasileiro"""
|
|
13
26
|
return f"R$ {value:,.2f}".replace(",", "X").replace(".", ",").replace("X", ".")
|
|
@@ -101,10 +114,10 @@ def gerar_relatorio_completo(culturas, talhoes, regras, objetivo='equilibrado',
|
|
|
101
114
|
Caminho do arquivo gerado
|
|
102
115
|
"""
|
|
103
116
|
# Executa todas as análises
|
|
104
|
-
|
|
117
|
+
safe_print(" 📊 Gerando cenários...")
|
|
105
118
|
cenarios = gerar_cenarios(culturas, talhoes, regras)
|
|
106
119
|
|
|
107
|
-
|
|
120
|
+
safe_print(" 🧬 Executando Algoritmo Genético...")
|
|
108
121
|
# Aplicar contexto climático se disponível
|
|
109
122
|
if contexto_climatico:
|
|
110
123
|
from core.climate_adapter import aplicar_contexto_climatico_no_plano
|
|
@@ -113,10 +126,10 @@ def gerar_relatorio_completo(culturas, talhoes, regras, objetivo='equilibrado',
|
|
|
113
126
|
else:
|
|
114
127
|
resultado_ag = gerar_plano_genetico(culturas, talhoes, regras, objetivo, seed=42)
|
|
115
128
|
|
|
116
|
-
|
|
129
|
+
safe_print(" 🔬 Validando com força bruta...")
|
|
117
130
|
validacao = comparar_ag_com_forca_bruta(culturas, talhoes, regras, objetivo, seed=42)
|
|
118
131
|
|
|
119
|
-
|
|
132
|
+
safe_print(" 🔄 Analisando estabilidade (5 rodadas)...")
|
|
120
133
|
estabilidade = executar_multiplas_rodadas(culturas, talhoes, regras, objetivo, rodadas=5)
|
|
121
134
|
|
|
122
135
|
# Gera conteúdo do relatório
|
|
@@ -497,8 +510,8 @@ def gerar_relatorio_markdown(culturas, talhoes, regras, objetivo, cenarios, resu
|
|
|
497
510
|
md.append("1. **Dados Simulados:** Os dados atuais são estimativas, não medições reais de campo")
|
|
498
511
|
md.append("2. **Modelo Simplificado:** Não considera todos os fatores agronômicos (pragas, doenças, mercado local)")
|
|
499
512
|
md.append("3. **Sem Análise Laboratorial:** Não utiliza análise química e física do solo")
|
|
500
|
-
md.append("4. **
|
|
501
|
-
md.append("5. **Sem Preços de Mercado Reais:**
|
|
513
|
+
md.append("4. **Dados Climáticos Regionais:** O sistema já utiliza dados climáticos reais via Open-Meteo, mas ainda trabalha em escala regional, sem análise individualizada por polígono/talhão real")
|
|
514
|
+
md.append("5. **Sem Preços de Mercado Reais:** Ainda utiliza preços simulados, sem integração com cotações oficiais como Conab/CEPEA")
|
|
502
515
|
md.append("6. **Não Substitui Agrônomo:** As recomendações devem ser validadas por profissional qualificado")
|
|
503
516
|
md.append("")
|
|
504
517
|
md.append("**Recomendação:** Use este sistema como ferramenta de apoio à decisão, não como decisão final.")
|
|
@@ -509,25 +522,19 @@ def gerar_relatorio_markdown(culturas, talhoes, regras, objetivo, cenarios, resu
|
|
|
509
522
|
# 9. Próximas Evoluções
|
|
510
523
|
md.append("## 9. 🚀 Próximas Evoluções")
|
|
511
524
|
md.append("")
|
|
512
|
-
md.append("###
|
|
513
|
-
md.append("-
|
|
514
|
-
md.append("-
|
|
515
|
-
md.append("-
|
|
516
|
-
md.append("-
|
|
517
|
-
md.append("")
|
|
518
|
-
md.append("### Fase 6 - Integração com APIs Reais")
|
|
519
|
-
md.append("- Dados climáticos (INMET, OpenWeather)")
|
|
520
|
-
md.append("- Preços de mercado (CEPEA, CONAB)")
|
|
521
|
-
md.append("- Análise de solo (laboratórios)")
|
|
522
|
-
md.append("- Imagens de satélite")
|
|
525
|
+
md.append("### Próximas Integrações de Dados Reais")
|
|
526
|
+
md.append("- **ZARC:** Zoneamento Agrícola de Risco Climático (dados oficiais MAPA)")
|
|
527
|
+
md.append("- **Preços Agrícolas:** Integração com Conab/CEPEA para cotações oficiais")
|
|
528
|
+
md.append("- **Dados Agroclimáticos:** NASA POWER para radiação solar e evapotranspiração")
|
|
529
|
+
md.append("- **Análise Geográfica:** Análise individualizada por propriedade/talhão em fase futura")
|
|
523
530
|
md.append("")
|
|
524
|
-
md.append("###
|
|
531
|
+
md.append("### Machine Learning")
|
|
525
532
|
md.append("- Previsão de produtividade")
|
|
526
533
|
md.append("- Previsão de preços")
|
|
527
534
|
md.append("- Detecção de anomalias")
|
|
528
535
|
md.append("- Recomendação personalizada")
|
|
529
536
|
md.append("")
|
|
530
|
-
md.append("###
|
|
537
|
+
md.append("### Sistema Completo")
|
|
531
538
|
md.append("- Cadastro de propriedades")
|
|
532
539
|
md.append("- Gestão de usuários")
|
|
533
540
|
md.append("- Histórico de safras")
|
|
@@ -819,8 +826,11 @@ def gerar_relatorio_txt(culturas, talhoes, regras, objetivo, cenarios, resultado
|
|
|
819
826
|
txt.append("1. Dados Simulados: Os dados atuais são estimativas, não medições reais")
|
|
820
827
|
txt.append("2. Modelo Simplificado: Não considera todos os fatores agronômicos")
|
|
821
828
|
txt.append("3. Sem Análise Laboratorial: Não utiliza análise química e física do solo")
|
|
822
|
-
txt.append("4.
|
|
823
|
-
txt.append("
|
|
829
|
+
txt.append("4. Dados Climáticos Regionais: O sistema já utiliza dados climáticos reais")
|
|
830
|
+
txt.append(" via Open-Meteo, mas ainda trabalha em escala regional, sem análise")
|
|
831
|
+
txt.append(" individualizada por polígono/talhão real")
|
|
832
|
+
txt.append("5. Sem Preços de Mercado Reais: Ainda utiliza preços simulados, sem")
|
|
833
|
+
txt.append(" integração com cotações oficiais como Conab/CEPEA")
|
|
824
834
|
txt.append("6. Não Substitui Agrônomo: As recomendações devem ser validadas")
|
|
825
835
|
txt.append("")
|
|
826
836
|
txt.append("RECOMENDAÇÃO: Use este sistema como ferramenta de apoio à decisão,")
|