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
- print(" 📊 Gerando cenários...")
117
+ safe_print(" 📊 Gerando cenários...")
105
118
  cenarios = gerar_cenarios(culturas, talhoes, regras)
106
119
 
107
- print(" 🧬 Executando Algoritmo Genético...")
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
- print(" 🔬 Validando com força bruta...")
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
- print(" 🔄 Analisando estabilidade (5 rodadas)...")
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. **Sem Dados Climáticos Reais:** Não integra com estações meteorológicas ou previsões")
501
- md.append("5. **Sem Preços de Mercado Reais:** Usa valores estimados, não cotações atuais")
513
+ md.append("4. **Dados Climáticos Regionais:** O sistema 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("### Fase 5 - Interface Web")
513
- md.append("- Dashboard interativo")
514
- md.append("- Visualização de mapas")
515
- md.append("- Gráficos de evolução")
516
- md.append("- Comparação visual de cenários")
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("### Fase 7 - Machine Learning")
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("### Fase 8 - Sistema Completo")
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. Sem Dados Climáticos Reais: Não integra com estações meteorológicas")
823
- txt.append("5. Sem Preços de Mercado Reais: Usa valores estimados")
829
+ txt.append("4. Dados Climáticos Regionais: O sistema 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,")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agroplan-ai-cli",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "CLI global para AgroPlan AI - modo local acelerado",
5
5
  "type": "module",
6
6
  "bin": {