agroplan-ai-cli 1.0.0
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.
- package/README.md +95 -0
- package/backend-template/.env.example +21 -0
- package/backend-template/Dockerfile +21 -0
- package/backend-template/README.md +274 -0
- package/backend-template/api.py +538 -0
- package/backend-template/core/bruteforce_validator.py +248 -0
- package/backend-template/core/genetic_optimizer.py +328 -0
- package/backend-template/core/loader.py +8 -0
- package/backend-template/core/planner.py +79 -0
- package/backend-template/core/report_generator.py +785 -0
- package/backend-template/core/scenario_simulator.py +286 -0
- package/backend-template/core/scorer.py +101 -0
- package/backend-template/core/terrain_analyzer.py +123 -0
- package/backend-template/data/culturas.csv +11 -0
- package/backend-template/data/regras_culturas.csv +11 -0
- package/backend-template/data/talhoes.csv +11 -0
- package/backend-template/main.py +487 -0
- package/backend-template/reports/.gitkeep +1 -0
- package/backend-template/requirements.txt +6 -0
- package/dist/index.js +719 -0
- package/package.json +51 -0
package/README.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# 🌱 AgroPlan AI - CLI
|
|
2
|
+
|
|
3
|
+
**CLI global para modo local acelerado do AgroPlan AI**
|
|
4
|
+
|
|
5
|
+
O AgroPlan AI é um sistema inteligente de planejamento agrícola que usa algoritmos genéticos para otimizar o plantio. Esta CLI permite executar o backend localmente para melhor performance.
|
|
6
|
+
|
|
7
|
+
## 🚀 Instalação
|
|
8
|
+
|
|
9
|
+
**Requer [Bun ≥ 1.0](https://bun.sh/) instalado**
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Instalar CLI globalmente
|
|
13
|
+
bun add -g agroplan-ai-cli
|
|
14
|
+
|
|
15
|
+
# Configurar API local
|
|
16
|
+
agroplan setup
|
|
17
|
+
|
|
18
|
+
# Iniciar servidor local
|
|
19
|
+
agroplan serve on
|
|
20
|
+
|
|
21
|
+
# Abrir no navegador
|
|
22
|
+
agroplan open
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 📋 Comandos
|
|
26
|
+
|
|
27
|
+
### Configuração
|
|
28
|
+
```bash
|
|
29
|
+
agroplan setup # Configura API local em ~/.agroplan
|
|
30
|
+
agroplan doctor # Verifica configuração do sistema
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Servidor Local
|
|
34
|
+
```bash
|
|
35
|
+
agroplan serve on # Inicia API em http://localhost:8000
|
|
36
|
+
agroplan serve off # Para o servidor local
|
|
37
|
+
agroplan serve status # Mostra status Local + Render
|
|
38
|
+
agroplan serve logs # Exibe logs do servidor
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Utilitários
|
|
42
|
+
```bash
|
|
43
|
+
agroplan open # Abre AgroPlan AI no navegador
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 🎯 Vantagens do Modo Local
|
|
47
|
+
|
|
48
|
+
- **⚡ Performance**: ~0.1s vs ~0.3s+ do Render
|
|
49
|
+
- **🔄 Disponibilidade**: Não depende do Render acordar
|
|
50
|
+
- **🛠️ Desenvolvimento**: Ideal para uso diário
|
|
51
|
+
- **🌐 Híbrido**: Frontend detecta automaticamente Local vs Render
|
|
52
|
+
|
|
53
|
+
## 🏗️ Como Funciona
|
|
54
|
+
|
|
55
|
+
1. **Setup**: Copia backend para `~/.agroplan/backend`
|
|
56
|
+
2. **Ambiente**: Cria `.venv` e instala dependências Python
|
|
57
|
+
3. **Servidor**: Executa FastAPI em `localhost:8000`
|
|
58
|
+
4. **Frontend**: Detecta API local automaticamente
|
|
59
|
+
|
|
60
|
+
## 🔧 Estrutura Criada
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
~/.agroplan/
|
|
64
|
+
├── backend/ # Backend FastAPI local
|
|
65
|
+
│ ├── api.py # API principal
|
|
66
|
+
│ ├── core/ # Algoritmos (genético, força bruta)
|
|
67
|
+
│ ├── data/ # Dados simulados (CSV)
|
|
68
|
+
│ ├── requirements.txt # Dependências Python
|
|
69
|
+
│ └── .venv/ # Ambiente virtual
|
|
70
|
+
├── agroplan-api.pid # PID do processo
|
|
71
|
+
└── logs/
|
|
72
|
+
└── api.log # Logs do servidor
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 🌐 Arquitetura Híbrida
|
|
76
|
+
|
|
77
|
+
- **Online**: Frontend (Vercel) + Backend (Render) - universal
|
|
78
|
+
- **Local**: Frontend (Vercel) + Backend (localhost) - acelerado
|
|
79
|
+
- **Auto**: Tenta local primeiro, fallback para Render
|
|
80
|
+
|
|
81
|
+
## 🛠️ Requisitos
|
|
82
|
+
|
|
83
|
+
- **Bun**: ≥ 1.0 ([instalar](https://bun.sh/))
|
|
84
|
+
- **Python**: ≥ 3.8 (para ambiente virtual)
|
|
85
|
+
- **Sistema**: Windows, macOS, Linux
|
|
86
|
+
|
|
87
|
+
## 🔗 Links
|
|
88
|
+
|
|
89
|
+
- **Aplicação**: https://agroplan-ai.vercel.app
|
|
90
|
+
- **Repositório**: https://github.com/Kuuhaku-Allan/agroplan-ai
|
|
91
|
+
- **Documentação**: [docs/LOCAL_MODE.md](https://github.com/Kuuhaku-Allan/agroplan-ai/blob/main/docs/LOCAL_MODE.md)
|
|
92
|
+
|
|
93
|
+
## 📄 Licença
|
|
94
|
+
|
|
95
|
+
MIT © Kuuhaku Allan
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Backend Configuration
|
|
2
|
+
|
|
3
|
+
# Server
|
|
4
|
+
HOST=0.0.0.0
|
|
5
|
+
PORT=8000
|
|
6
|
+
|
|
7
|
+
# CORS - Allowed origins (comma-separated)
|
|
8
|
+
# Local development
|
|
9
|
+
CORS_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
|
|
10
|
+
# Production (update with your Vercel URL)
|
|
11
|
+
# CORS_ORIGINS=https://your-frontend.vercel.app,http://localhost:3000
|
|
12
|
+
|
|
13
|
+
# Data Mode
|
|
14
|
+
# simulated: Uses CSV files with simulated data
|
|
15
|
+
# real: Uses real APIs (future implementation)
|
|
16
|
+
DATA_MODE=simulated
|
|
17
|
+
|
|
18
|
+
# Cache Administration (optional)
|
|
19
|
+
# If set, /cache/limpar endpoint requires X-Cache-Token header
|
|
20
|
+
# Leave empty to disable protection (not recommended for production)
|
|
21
|
+
CACHE_ADMIN_TOKEN=your-secret-token-here
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Use Python 3.11 slim image
|
|
2
|
+
FROM python:3.11-slim
|
|
3
|
+
|
|
4
|
+
# Set working directory
|
|
5
|
+
WORKDIR /app
|
|
6
|
+
|
|
7
|
+
# Copy requirements first for better caching
|
|
8
|
+
COPY requirements.txt .
|
|
9
|
+
|
|
10
|
+
# Install dependencies
|
|
11
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
12
|
+
|
|
13
|
+
# Copy application code
|
|
14
|
+
COPY . .
|
|
15
|
+
|
|
16
|
+
# Expose port (Render will override with PORT env var)
|
|
17
|
+
EXPOSE 8000
|
|
18
|
+
|
|
19
|
+
# Run the application
|
|
20
|
+
# Use shell form to allow environment variable substitution
|
|
21
|
+
CMD sh -c "uvicorn api:app --host 0.0.0.0 --port ${PORT:-8000}"
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# AgroPlan AI - Backend
|
|
2
|
+
|
|
3
|
+
Backend FastAPI para o Sistema Inteligente de Planejamento de Plantio.
|
|
4
|
+
|
|
5
|
+
## 🚀 Tecnologias
|
|
6
|
+
|
|
7
|
+
- **FastAPI** - Framework web moderno e rápido
|
|
8
|
+
- **Python 3.11+** - Linguagem de programação
|
|
9
|
+
- **Pandas** - Manipulação de dados
|
|
10
|
+
- **NumPy** - Computação numérica
|
|
11
|
+
- **Uvicorn** - Servidor ASGI
|
|
12
|
+
|
|
13
|
+
## 📋 Pré-requisitos
|
|
14
|
+
|
|
15
|
+
- Python 3.11 ou superior
|
|
16
|
+
- pip (gerenciador de pacotes Python)
|
|
17
|
+
|
|
18
|
+
## 🔧 Instalação Local
|
|
19
|
+
|
|
20
|
+
1. **Clone o repositório** (se ainda não fez):
|
|
21
|
+
```bash
|
|
22
|
+
git clone <seu-repositorio>
|
|
23
|
+
cd agroplan/backend
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
2. **Crie um ambiente virtual**:
|
|
27
|
+
```bash
|
|
28
|
+
python -m venv venv
|
|
29
|
+
|
|
30
|
+
# Windows
|
|
31
|
+
venv\Scripts\activate
|
|
32
|
+
|
|
33
|
+
# Linux/Mac
|
|
34
|
+
source venv/bin/activate
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
3. **Instale as dependências**:
|
|
38
|
+
```bash
|
|
39
|
+
pip install -r requirements.txt
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
4. **Configure as variáveis de ambiente**:
|
|
43
|
+
```bash
|
|
44
|
+
# Copie o arquivo de exemplo
|
|
45
|
+
cp .env.example .env
|
|
46
|
+
|
|
47
|
+
# Edite .env conforme necessário
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
5. **Execute o servidor**:
|
|
51
|
+
```bash
|
|
52
|
+
python api.py
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
O servidor estará disponível em `http://localhost:8000`
|
|
56
|
+
|
|
57
|
+
## 📚 Documentação da API
|
|
58
|
+
|
|
59
|
+
Após iniciar o servidor, acesse:
|
|
60
|
+
|
|
61
|
+
- **Swagger UI**: http://localhost:8000/docs
|
|
62
|
+
- **ReDoc**: http://localhost:8000/redoc
|
|
63
|
+
|
|
64
|
+
## 🔌 Endpoints Principais
|
|
65
|
+
|
|
66
|
+
### Health Check
|
|
67
|
+
```http
|
|
68
|
+
GET /health
|
|
69
|
+
```
|
|
70
|
+
Verifica o status da API e retorna informações sobre os dados carregados.
|
|
71
|
+
|
|
72
|
+
### Dashboard
|
|
73
|
+
```http
|
|
74
|
+
GET /dashboard
|
|
75
|
+
```
|
|
76
|
+
Retorna resumo completo do dashboard com plano recomendado.
|
|
77
|
+
|
|
78
|
+
### Talhões
|
|
79
|
+
```http
|
|
80
|
+
GET /talhoes
|
|
81
|
+
```
|
|
82
|
+
Lista todos os talhões disponíveis.
|
|
83
|
+
|
|
84
|
+
### Culturas
|
|
85
|
+
```http
|
|
86
|
+
GET /culturas
|
|
87
|
+
```
|
|
88
|
+
Lista todas as culturas disponíveis com suas regras.
|
|
89
|
+
|
|
90
|
+
### Cenários
|
|
91
|
+
```http
|
|
92
|
+
GET /cenarios
|
|
93
|
+
```
|
|
94
|
+
Retorna comparação entre diferentes cenários de plantio.
|
|
95
|
+
|
|
96
|
+
### Otimizar
|
|
97
|
+
```http
|
|
98
|
+
POST /otimizar
|
|
99
|
+
Content-Type: application/json
|
|
100
|
+
|
|
101
|
+
{
|
|
102
|
+
"objetivo": "equilibrado",
|
|
103
|
+
"seed": 42,
|
|
104
|
+
"geracoes": 100,
|
|
105
|
+
"populacao": 50
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
Executa o Algoritmo Genético para otimização.
|
|
109
|
+
|
|
110
|
+
**Objetivos disponíveis**: `equilibrado`, `lucro`, `risco`, `sustentavel`
|
|
111
|
+
|
|
112
|
+
### Validar
|
|
113
|
+
```http
|
|
114
|
+
POST /validar
|
|
115
|
+
Content-Type: application/json
|
|
116
|
+
|
|
117
|
+
{
|
|
118
|
+
"objetivo": "equilibrado",
|
|
119
|
+
"seed": 42
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
Valida o resultado do AG comparando com força bruta (quando viável).
|
|
123
|
+
|
|
124
|
+
### Rodadas
|
|
125
|
+
```http
|
|
126
|
+
POST /rodadas
|
|
127
|
+
Content-Type: application/json
|
|
128
|
+
|
|
129
|
+
{
|
|
130
|
+
"objetivo": "equilibrado",
|
|
131
|
+
"rodadas": 5
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
Executa múltiplas rodadas do AG para análise de estabilidade.
|
|
135
|
+
|
|
136
|
+
### Relatório
|
|
137
|
+
```http
|
|
138
|
+
POST /relatorio
|
|
139
|
+
Content-Type: application/json
|
|
140
|
+
|
|
141
|
+
{
|
|
142
|
+
"objetivo": "equilibrado",
|
|
143
|
+
"formato": "md"
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
Gera relatório completo em Markdown ou TXT.
|
|
147
|
+
|
|
148
|
+
**Formatos disponíveis**: `md`, `txt`
|
|
149
|
+
|
|
150
|
+
## 🐳 Docker
|
|
151
|
+
|
|
152
|
+
### Build da imagem:
|
|
153
|
+
```bash
|
|
154
|
+
docker build -t agroplan-backend .
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Executar container:
|
|
158
|
+
```bash
|
|
159
|
+
docker run -p 8000:8000 \
|
|
160
|
+
-e CORS_ORIGINS="http://localhost:3000" \
|
|
161
|
+
agroplan-backend
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 🌍 Variáveis de Ambiente
|
|
165
|
+
|
|
166
|
+
| Variável | Descrição | Padrão |
|
|
167
|
+
|----------|-----------|--------|
|
|
168
|
+
| `HOST` | Host do servidor | `0.0.0.0` |
|
|
169
|
+
| `PORT` | Porta do servidor | `8000` |
|
|
170
|
+
| `CORS_ORIGINS` | Origens permitidas (separadas por vírgula) | `http://localhost:3000` |
|
|
171
|
+
| `DATA_MODE` | Modo de dados (`simulated` ou `real`) | `simulated` |
|
|
172
|
+
|
|
173
|
+
### Exemplo de configuração para produção:
|
|
174
|
+
```bash
|
|
175
|
+
HOST=0.0.0.0
|
|
176
|
+
PORT=8000
|
|
177
|
+
CORS_ORIGINS=https://seu-frontend.vercel.app,http://localhost:3000
|
|
178
|
+
DATA_MODE=simulated
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## 📁 Estrutura de Dados
|
|
182
|
+
|
|
183
|
+
O backend utiliza arquivos CSV localizados em `data/`:
|
|
184
|
+
|
|
185
|
+
- **culturas.csv** - Informações sobre culturas (10 culturas)
|
|
186
|
+
- **talhoes.csv** - Informações sobre talhões (10 talhões)
|
|
187
|
+
- **regras_culturas.csv** - Regras de compatibilidade
|
|
188
|
+
|
|
189
|
+
## 🧬 Algoritmo Genético
|
|
190
|
+
|
|
191
|
+
O sistema utiliza um Algoritmo Genético para otimização do planejamento:
|
|
192
|
+
|
|
193
|
+
- **População**: 50 indivíduos (configurável)
|
|
194
|
+
- **Gerações**: 100 (configurável)
|
|
195
|
+
- **Seleção**: Torneio
|
|
196
|
+
- **Crossover**: Ponto único
|
|
197
|
+
- **Mutação**: Aleatória com taxa adaptativa
|
|
198
|
+
|
|
199
|
+
### Objetivos de Otimização:
|
|
200
|
+
|
|
201
|
+
1. **Equilibrado**: Balanceia lucro, risco e sustentabilidade
|
|
202
|
+
2. **Lucro**: Prioriza retorno financeiro
|
|
203
|
+
3. **Risco**: Minimiza exposição ao risco
|
|
204
|
+
4. **Sustentável**: Prioriza compatibilidade e diversidade
|
|
205
|
+
|
|
206
|
+
## 🔍 Validação
|
|
207
|
+
|
|
208
|
+
O sistema oferece dois métodos de validação:
|
|
209
|
+
|
|
210
|
+
1. **Força Bruta**: Para espaços de busca pequenos (≤10.000 combinações)
|
|
211
|
+
2. **Múltiplas Rodadas**: Para espaços grandes, executa várias rodadas e analisa estabilidade
|
|
212
|
+
|
|
213
|
+
## 📊 Relatórios
|
|
214
|
+
|
|
215
|
+
Relatórios são gerados em `reports/` com:
|
|
216
|
+
|
|
217
|
+
- Resumo executivo
|
|
218
|
+
- Características do plano
|
|
219
|
+
- Comparação com cenários
|
|
220
|
+
- Detalhes do Algoritmo Genético
|
|
221
|
+
- Validação e estabilidade
|
|
222
|
+
- Justificativa técnica
|
|
223
|
+
|
|
224
|
+
## 🚀 Deploy
|
|
225
|
+
|
|
226
|
+
### Render (Recomendado)
|
|
227
|
+
|
|
228
|
+
1. Conecte seu repositório GitHub ao Render
|
|
229
|
+
2. Crie um novo Web Service
|
|
230
|
+
3. Configure:
|
|
231
|
+
- **Root Directory**: `backend`
|
|
232
|
+
- **Build Command**: (deixe vazio, usa Dockerfile)
|
|
233
|
+
- **Start Command**: (deixe vazio, usa CMD do Dockerfile)
|
|
234
|
+
4. Adicione variáveis de ambiente:
|
|
235
|
+
- `CORS_ORIGINS`: URL do seu frontend
|
|
236
|
+
5. Deploy!
|
|
237
|
+
|
|
238
|
+
### Outras plataformas
|
|
239
|
+
|
|
240
|
+
O backend é compatível com qualquer plataforma que suporte:
|
|
241
|
+
- Docker
|
|
242
|
+
- Python 3.11+
|
|
243
|
+
- Variável de ambiente `PORT`
|
|
244
|
+
|
|
245
|
+
## 🐛 Troubleshooting
|
|
246
|
+
|
|
247
|
+
### Erro de CORS
|
|
248
|
+
Verifique se `CORS_ORIGINS` inclui a URL do seu frontend.
|
|
249
|
+
|
|
250
|
+
### Porta já em uso
|
|
251
|
+
Altere a variável `PORT` ou encerre o processo usando a porta 8000.
|
|
252
|
+
|
|
253
|
+
### Módulos não encontrados
|
|
254
|
+
Execute `pip install -r requirements.txt` novamente.
|
|
255
|
+
|
|
256
|
+
## 📝 Limitações Atuais
|
|
257
|
+
|
|
258
|
+
- Dados simulados (CSV estáticos)
|
|
259
|
+
- Sem banco de dados
|
|
260
|
+
- Sem autenticação
|
|
261
|
+
- Sem APIs externas reais
|
|
262
|
+
|
|
263
|
+
## 🔮 Próximas Funcionalidades
|
|
264
|
+
|
|
265
|
+
- Integração com APIs reais (clima, preços, etc.)
|
|
266
|
+
- Banco de dados PostgreSQL
|
|
267
|
+
- Autenticação e autorização
|
|
268
|
+
- Cache Redis
|
|
269
|
+
- Webhooks para notificações
|
|
270
|
+
- Suporte a múltiplas propriedades
|
|
271
|
+
|
|
272
|
+
## 📄 Licença
|
|
273
|
+
|
|
274
|
+
Este projeto é parte do AgroPlan AI.
|