HatoVerde API es un sistema de gestión ganadera que centraliza la información sobre bovinos, producción de leche, eventos y predicciones. Está construido con Node.js, Express, Sequelize y PostgreSQL, y es fácilmente desplegable con Docker.
- 🎯 Características
- 🛠️ Requisitos
- 📦 Instalación
- ⚙️ Configuración
- 🚀 Ejecución
- 📁 Estructura del Proyecto
- 📡 Rutas Principales
- 📊 Análisis de Datos
- 🧬 Migraciones
- 🔧 Modelos
- 🤝 Contribuciones
- 📄 Licencia
- 👤 Autor
- CRUD completo para bovinos, producción de leche, predicciones y eventos.
- Validación robusta de datos con Joi.
- Manejo de errores con Boom.
- Asociaciones entre bovinos y sus producciones, eventos y predicciones.
- Notificaciones en tiempo real con SSE (Server-Sent Events).
- Registro de errores de dispositivos ESP32.
- Análisis estadístico de producción lechera.
- Arquitectura modular y escalable.
- Uso de Docker para base de datos y pgAdmin.
- Node.js >= 14.17.0
- npm o yarn
- Docker y Docker Compose (opcional, recomendado para base de datos)
- PostgreSQL (si no usas Docker)
- Clona el repositorio:
git clone https://github.com/tu-usuario/hatoverde-api.git
cd hatoverde-api- Instala las dependencias:
npm installCrea un archivo .env en la raíz del proyecto con el siguiente contenido:
NODE_ENV=development
PORT=3000
DATABASE_URL=postgres://user:password@localhost:5432/hatoverde💡 Asegúrate de que
DATABASE_URLcoincida con tus credenciales locales o configuración de Docker.
docker-compose up -dnpm run migrations:runnpm run devnpm startServidor disponible en:
http://localhost:3000
.
├── config/
├── db/
│ ├── migrations/
│ ├── models/
│ └── seeders/
├── events/
│ ├── esp32Emitter.js
│ └── productionEmitter.js
├── libs/
├── middlewares/
├── routes/
│ ├── bovine.router.js
│ ├── bovineEvent.router.js
│ ├── errorEsp32.router.js
│ ├── milkPrediction.router.js
│ └── milkProduction.router.js
├── schemas/
├── services/
│ ├── bovine.service.js
│ ├── bovineEvent.service.js
│ ├── milkPrediction.service.js
│ └── milkProduction.service.js
├── utils/
├── index.js
├── package.json
├── docker-compose.yml
├── .env
└── .sequelizerc
GET /api/v1/bovines— Lista todos los bovinosGET /api/v1/bovines/:id— Detalles de un bovinoPOST /api/v1/bovines— Crear bovinoPATCH /api/v1/bovines/:id— Editar bovinoDELETE /api/v1/bovines/:id— Desactivar bovino
GET /api/v1/milk-productions— Lista todas las produccionesGET /api/v1/milk-productions/:id— Detalles de una producciónPOST /api/v1/milk-productions— Crear producciónPUT /api/v1/milk-productions/:id— Actualizar producciónDELETE /api/v1/milk-productions/:id— Eliminar producción
GET /api/v1/predictions— Lista todas las prediccionesGET /api/v1/predictions/:id— Detalles de una predicciónPOST /api/v1/predictions— Crear predicciónPUT /api/v1/predictions/:id— Actualizar predicciónDELETE /api/v1/predictions/:id— Eliminar predicción
GET /api/v1/bovine-events— Lista todos los eventosGET /api/v1/bovine-events/:id— Detalles de un eventoPOST /api/v1/bovine-events— Crear eventoPUT /api/v1/bovine-events/:id— Actualizar eventoDELETE /api/v1/bovine-events/:id— Eliminar evento
GET /api/v1/esp32-errors— Lista todos los errores registradosGET /api/v1/esp32-errors/:id— Detalles de un errorPOST /api/v1/esp32-errors— Registrar nuevo error
GET /api/v1/milk-productions/bovine/:id/stream
Recibe notificaciones en tiempo real cuando se registra una nueva producción de leche para el bovino especificado.
El sistema ofrece diversas funcionalidades de análisis de datos para la gestión eficiente de la producción lechera:
- Resumen diario por animal: Totalización de producción por bovino.
- Resumen diario global: Estadísticas de todo el hato.
- Evolución horaria: Análisis de producción por horas.
- Metas diarias: Seguimiento de objetivos por bovino.
- Umbrales de producción: Identificación de rangos óptimos y problemáticos.
- Productores destacados: Identifica bovinos con mayor y menor producción.
- Producción mensual: Análisis por bovino o global.
- Tendencias anuales: Seguimiento de producción total por mes.
El sistema permite crear predicciones de producción basadas en:
- Etapa de lactación
- Raza
- Historial de producción
- Factores estacionales
-
Crear nueva migración:
npm run migrations:generate -- nombre-de-la-migracion
-
Ejecutar migraciones:
npm run migrations:run
-
Revertir última migración:
npm run migrations:revert
-
Revertir todas las migraciones:
npm run migrations:delete
Representación del ganado bovino con los siguientes campos clave:
bovine_id: Identificador únicoear_tag: Etiqueta auricular, identificador visible únicobreed: Raza (Holstein, Ayrshire, Jersey)sex: Sexo (Male, Female)lactation_stage: Etapa de lactación (0 para machos, 1-5 para hembras)daily_goal: Meta diaria de producción en litrosis_active: Estado activo del animal
Registro de la producción de leche:
production_id: Identificador únicobovine_id: Referencia al bovinomilking_time: Fecha y hora del ordeñomilk_yield: Cantidad de leche producida en litros
Eventos relacionados con los bovinos:
event_id: Identificador únicobovine_id: Referencia al bovinoevent_type: Tipo de evento (Health, Reproduction, etc.)event_date: Fecha del eventodescription: Descripción detallada del evento
Predicciones de producción de leche:
prediction_id: Identificador únicobovine_id: Referencia al bovinoprediction_date: Fecha de predicciónpredicted_yield: Producción estimada en litros
Registro de errores de dispositivos ESP32:
error_id: Identificador únicodevice_id: Identificador del dispositivoerror_code: Código de errordescription: Descripción del errortimestamp: Fecha y hora del error
¡Las contribuciones son bienvenidas! Para colaborar:
-
Haz un fork del repositorio.
-
Crea una nueva rama:
git checkout -b feature/nueva-funcionalidad
-
Realiza tus cambios y haz commit:
git commit -m "Agrega nueva funcionalidad" -
Sube tu rama:
git push origin feature/nueva-funcionalidad
-
Abre un Pull Request.
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE para más información.
Este proyecto es parte del sistema HatoVerde:
- Frontend: hatoverde-client
- Backend: hatoverde-api
- IoT: hatoverde-esp32 --
Repositorio original:
https://github.com/JLosada-Dev/hatoverde-api