Skip to content

AgroCore-co/buffs-ia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🐃 Buffs IA - Sistema de Predição Individual e Consanguinidade

📊 Versão 1.1.0

Sistema inteligente para predição individual de produção de leite e análise de consanguinidade em búfalos, desenvolvido para otimizar o manejo reprodutivo e produtivo do rebanho.

🎯 Funcionalidades Principais

1. Predição Individual de Produção de Leite

  • 🥛 Predição personalizada para cada fêmea em seu próximo ciclo
  • 📈 Features avançadas: histórico produtivo, saúde, reprodução, genética
  • 🎯 Meta de precisão: R² > 0.70
  • 📊 Classificação de potencial: Alto, Bom, Médio, Baixo

2. Análise de Consanguinidade

  • 🧬 Coeficiente de Wright para cálculo preciso
  • 🌳 Análise genealógica completa com ancestrais e descendentes
  • ⚠️ Classificação de risco: Baixo, Moderado, Alto, Extremo
  • 🔍 Análise de ancestrais até 5 gerações

3. Simulação de Acasalamentos

  • 💑 Simulação completa de acasalamentos
  • 📊 Cálculo de consanguinidade da prole
  • 🎯 Recomendações inteligentes baseadas em risco genético
  • 🚫 Detecção automática de parentesco direto (pai-filha, irmãos)

4. Recomendação de Machos Compatíveis

  • 🔍 Busca inteligente de machos compatíveis
  • 📊 Score de compatibilidade calculado automaticamente
  • 🎯 Limites configuráveis de consanguinidade (padrão: 6.25%)

🏗️ Arquitetura do Sistema

📁 buffs-ia/
├── 🚀 app/
│   ├── main.py                    # Inicialização FastAPI
│   ├── config.py                  # Configurações e variáveis de ambiente
│   ├── schemas.py                 # Modelos Pydantic (input/output)
│   ├── services.py                # Singleton de dados (modelo + DataFrames)
│   ├── dependencies.py            # Dependency injection FastAPI
│   ├── database.py                # Conexão Supabase
│   ├── exceptions.py              # Exceções customizadas
│   ├── utils.py                   # Conversão snake_case → camelCase
│   ├── api/routes/
│   │   ├── health.py              # Status e conexões
│   │   ├── predicao.py            # Predição individual de produção
│   │   ├── simulacao.py           # Simulação de acasalamentos
│   │   └── genealogia.py          # Análise genealógica e machos compatíveis
│   └── models/
│       ├── prediction.py          # Lógica de predição individual
│       └── genealogia.py          # Coeficiente de Wright e genealogia
├── 📊 treinar_ia.py               # Script de treinamento da IA (Supabase-only)
├── 📋 requirements.txt            # Dependências Python
└── 📚 README.md                   # Este arquivo

Responsabilidade da IA: cálculos genéticos (consanguinidade, simulações). Responsabilidade da API NestJS (buffs-api): enriquecimento dos dados com nome dos animais, score de compatibilidade e persistência no banco.

🚀 Como Usar

Passo 0: Ambiente virtual (.venv)

python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

# para sair
# deactivate

Passo 1: Configurar variáveis de ambiente (Supabase obrigatório)

Crie um arquivo .env na raiz do projeto:

SUPABASE_URL=https://seu-projeto.supabase.co
SUPABASE_SERVICE_ROLE_KEY=sua-chave-service-role
IA_REQUIRE_SUPABASE=true

Sem Supabase configurado, a aplicação não sobe (fallback para CSV removido).

Passo 2: Treinamento da IA (usa Supabase)

python treinar_ia.py

O script lê diretamente do Supabase. Garanta as variáveis configuradas e que o banco contém dados suficientes para treino.

Passo 3: Execução da API

source .venv/bin/activate
python -m uvicorn app.main:app --reload --port 8000

Acesso:

📡 Endpoints da API

Todos os campos usam camelCase e IDs são UUIDs v4.


Status

GET /
GET /status/conexoes

Predição Individual de Produção

POST /predicao-individual
Content-Type: application/json

{
  "idFemea": "c9d5b83e-2345-5678-9012-345678901234"
}

Resposta:

{
  "idFemea": "c9d5b83e-2345-5678-9012-345678901234",
  "predicaoLitros": 1850.5,
  "classificacaoPotencial": "Alto",
  "percentualVsMedia": 15.3,
  "producaoMediaPropriedade": 1605.0,
  "idPropriedade": "a1b2c3d4-...",
  "featuresUtilizadas": ["ordem_lactacao", "producao_media_historica", "..."],
  "dataPredicao": "2026-02-19T10:00:00"
}

Simulação de Acasalamento

POST /simular-acasalamento?incluir_predicao_femea=true
Content-Type: application/json

{
  "idMacho": "b8c4a72d-1234-4567-8901-234567890123",
  "idFemea": "c9d5b83e-2345-5678-9012-345678901234"
}

Resposta:

{
  "machoId": "b8c4a72d-...",
  "femeaId": "c9d5b83e-...",
  "consanguinidadeMacho": 0.0,
  "consanguinidadeFemea": 3.13,
  "parentescoPais": 1.56,
  "nivelParentesco": "Parentesco distante",
  "consanguinidadeProle": 1.56,
  "riscoConsanguinidade": "Baixo",
  "recomendacao": "Acasalamento seguro - baixo risco genético.",
  "detalhes": {
    "eMeioIrmao": false,
    "temParentescoDireto": false,
    "tipoParentescoDireto": null,
    "coeficienteDecimal": 0.0156
  },
  "predicaoProducaoFemea": { ... }
}

Análise Genealógica

POST /analise-genealogica
Content-Type: application/json

{
  "idBufalo": "b8c4a72d-1234-4567-8901-234567890123"
}

Resposta:

{
  "idBufalo": "b8c4a72d-...",
  "sexo": "M",
  "consanguinidade": 3.13,
  "riscoGenetico": "Moderado",
  "descricaoRisco": "Consanguinidade 3.125-6.25% - Risco moderado",
  "eFundador": false,
  "pais": { "paiId": "uuid-pai", "maeId": "uuid-mae" },
  "ancestrais": { "geracao_1": ["uuid"], "geracao_2": ["uuid", "uuid"] },
  "descendentes": { "geracao_1": ["uuid"] },
  "resumo": {
    "totalAncestrais": 6,
    "totalDescendentes": 2,
    "geracoesAncestrais": 3,
    "geracoesDescendentes": 1
  }
}

Machos Compatíveis

GET /machos-compatíveis/{femea_id}?max_consanguinidade=6.25
x-user-id: uuid-do-usuario

Resposta (estrutura enriquecida pela buffs-api antes de chegar ao frontend):

{
  "femeaId": "c9d5b83e-...",
  "machosCompativeis": [
    {
      "idBufalo": "b8c4a72d-...",
      "consanguinidadeProle": 1.56,
      "riscoConsanguinidade": "Baixo"
    }
  ],
  "totalEncontrados": 12,
  "limiteConsanguinidade": 6.25
}

Nota: nome e scoreCompatibilidade são adicionados pela buffs-api após receber esta resposta, consultando o banco de dados diretamente.

🔧 Configurações

Limites de Consanguinidade

Faixa Risco Recomendação
< 3.125% 🟢 Baixo Acasalamento seguro
3.125% – 6.25% 🟡 Moderado Monitorar descendentes
6.25% – 12.5% 🔴 Alto Atenção — não recomendado
> 12.5% ⛔ Extremo Proibido
Parentesco direto ⛔ Crítico Proibido (pai-filha, irmãos)

Features do Modelo de Predição

  1. id_propriedade - Perfil da propriedade
  2. idade_mae_anos - Idade da fêmea
  3. ordem_lactacao - Ordem do ciclo
  4. estacao - Estação do ano
  5. intervalo_partos - Intervalo entre partos
  6. producao_media_historica - Histórico produtivo
  7. id_raca - Raça do animal
  8. contagem_tratamentos - Eventos de saúde
  9. flag_doenca_grave - Doenças graves
  10. ecc_medio_ciclo - Condição corporal
  11. idade_primeiro_parto_dias - Idade no primeiro parto
  12. dias_em_aberto - Período pós-parto
  13. potencial_genetico_mae - Potencial genético

📊 Métricas de Sucesso

Modelo de Predição

  • 🎯 R² > 0.70 (70% da variância explicada)
  • 📉 RMSE < 200 litros (erro médio)
  • 🔍 OOB Score > 0.65 (validação cruzada)

Sistema de Consanguinidade

  • Algoritmo de Wright com memoização (cache)
  • Resposta rápida para simulações individuais
  • 🎯 Filtros automáticos para alto risco e parentesco direto

🛠️ Tecnologias Utilizadas

  • Python 3.10+ - Linguagem principal
  • FastAPI - Framework da API REST
  • Pydantic v2 - Validação de dados e serialização camelCase
  • scikit-learn / RandomForest - Modelo de predição
  • Pandas / NumPy - Manipulação e computação de dados
  • Supabase - Banco de dados em produção (PostgreSQL)
  • python-dotenv - Gerenciamento de variáveis de ambiente

🔮 Próximos Passos

Deploy e Containerização

  • 🐳 Docker para containerização
  • ☁️ Deploy em nuvem (AWS / Railway)
  • 🔄 CI/CD pipeline automatizado

Fluxo de Deploy Atual (GitHub Actions → EC2)

  • A Action .github/workflows/deploy.yml faz git pull, grava .env com SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY e assume Supabase como única fonte de dados (IA_REQUIRE_SUPABASE=true).
  • Não há geração ou leitura de CSV — o treinamento (treinar_ia.py) consome exclusivamente os dados do Supabase e falha se as variáveis não estiverem definidas ou se a conexão não responder.
  • O serviço é executado via pm2 com uvicorn (porta 8000); logs: pm2 logs buffs-ia.

Validação

  • 🧪 Testes automatizados de contrato com a buffs-api
  • 📊 Validação em campo com dados reais de fazendas piloto
  • 👨‍🌾 Aprovação de especialistas veterinários

📄 Licença

Este projeto está licenciado sob a MIT License.


🐃 Buffs IA - Transformando o manejo de búfalos com inteligência artificial! 🚀

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages