Endpoints de Viveiros
Todos os endpoints de viveiros requerem autenticação.
Authorization: Bearer <token>Tipos de Viveiro
Seção intitulada “Tipos de Viveiro”| Tipo | Descrição |
|---|---|
NURSERY | Berçário |
FATTENING | Engorda |
POST /ponds/
Seção intitulada “POST /ponds/”Cria um novo viveiro em uma fazenda.
Requisição
Seção intitulada “Requisição”POST /api/v1/ponds/Authorization: Bearer <token>Content-Type: application/json{ "farm_id": "farm-uuid", "cod": "VV-01", "pond_type": "FATTENING", "size_m2": 5000, "depth_m": 2, "lat": "-23.550520", "lng": "-46.633308", "aerator_count": 4, "control_point_id": "cp-uuid"}Parâmetros do Body
Seção intitulada “Parâmetros do Body”| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
farm_id | UUID | ✅ | - | ID da fazenda |
cod | string | ✅ | - | Código identificador do viveiro (ex: VV-01) |
pond_type | enum | ❌ | - | Tipo do viveiro (NURSERY ou FATTENING) |
size_m2 | integer | ❌ | - | Tamanho em metros quadrados |
depth_m | integer | ❌ | - | Profundidade em metros |
lat | string | ❌ | - | Latitude |
lng | string | ❌ | - | Longitude |
aerator_count | integer | ❌ | 0 | Quantidade de aeradores |
control_point_id | UUID | ❌ | - | ID do ponto de controle associado |
Resposta 201 Created
Seção intitulada “Resposta 201 Created”{ "id": "pond-uuid", "farm_id": "farm-uuid", "cod": "VV-01", "pond_type": "FATTENING", "size_m2": 5000, "depth_m": 2, "lat": "-23.550520", "lng": "-46.633308", "aerator_count": 4, "control_point_id": "cp-uuid", "created_at": "2025-11-21T10:30:00Z", "updated_at": null}Possíveis Erros
Seção intitulada “Possíveis Erros”| Status | Detalhe |
|---|---|
403 | Sem permissão para criar viveiro nesta fazenda |
400 | Erro de validação |
GET /ponds/
Seção intitulada “GET /ponds/”Lista viveiros (opcionalmente filtrados por fazenda).
Requisição
Seção intitulada “Requisição”GET /api/v1/ponds/Authorization: Bearer <token>Query Parameters
Seção intitulada “Query Parameters”| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
farm_id | UUID | ❌ | Filtra viveiros por ID da fazenda |
Exemplos
Seção intitulada “Exemplos”GET /api/v1/ponds/GET /api/v1/ponds/?farm_id=550e8400-e29b-41d4-a716-446655440000Resposta 200 OK
Seção intitulada “Resposta 200 OK”[ { "id": "pond-uuid-1", "farm_id": "farm-uuid", "cod": "VV-01", "pond_type": "FATTENING", "size_m2": 5000, "aerator_count": 4, "control_point_id": "cp-uuid" }, { "id": "pond-uuid-2", "farm_id": "farm-uuid", "cod": "VV-02", "pond_type": "NURSERY", "size_m2": 2000, "aerator_count": 2, "control_point_id": null }]GET /ponds/{pond_id}
Seção intitulada “GET /ponds/{pond_id}”Obtém detalhes de um viveiro específico.
Parâmetros de URL
Seção intitulada “Parâmetros de URL”| Parâmetro | Tipo | Descrição |
|---|---|---|
pond_id | UUID | ID do viveiro |
Requisição
Seção intitulada “Requisição”GET /api/v1/ponds/pond-uuidAuthorization: Bearer <token>Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "id": "pond-uuid", "farm_id": "farm-uuid", "cod": "VV-01", "pond_type": "FATTENING", "size_m2": 5000, "depth_m": 2, "lat": "-23.550520", "lng": "-46.633308", "aerator_count": 4, "control_point_id": "cp-uuid", "created_at": "2025-11-21T10:30:00Z", "updated_at": null}Possíveis Erros
Seção intitulada “Possíveis Erros”| Status | Detalhe |
|---|---|
404 | Viveiro não encontrado |
PUT /ponds/{pond_id}
Seção intitulada “PUT /ponds/{pond_id}”Atualiza os detalhes de um viveiro.
Parâmetros de URL
Seção intitulada “Parâmetros de URL”| Parâmetro | Tipo | Descrição |
|---|---|---|
pond_id | UUID | ID do viveiro |
Requisição
Seção intitulada “Requisição”PUT /api/v1/ponds/pond-uuidAuthorization: Bearer <token>Content-Type: application/json{ "cod": "VV-01-UPDATED", "size_m2": 6000, "depth_m": 2.5, "control_point_id": "new-cp-uuid"}Parâmetros do Body
Seção intitulada “Parâmetros do Body”Todos os campos são opcionais:
| Campo | Tipo | Descrição |
|---|---|---|
cod | string | Novo código do viveiro |
pond_type | enum | Novo tipo do viveiro |
size_m2 | integer | Novo tamanho em m² |
depth_m | integer | Nova profundidade em metros |
lat | string | Nova latitude |
lng | string | Nova longitude |
aerator_count | integer | Nova quantidade de aeradores |
control_point_id | UUID | Novo ponto de controle associado |
Resposta 200 OK
Seção intitulada “Resposta 200 OK”Retorna o objeto do viveiro atualizado.
Possíveis Erros
Seção intitulada “Possíveis Erros”| Status | Detalhe |
|---|---|
404 | Viveiro não encontrado ou sem permissão |
DELETE /ponds/{pond_id}
Seção intitulada “DELETE /ponds/{pond_id}”Exclui um viveiro.
Parâmetros de URL
Seção intitulada “Parâmetros de URL”| Parâmetro | Tipo | Descrição |
|---|---|---|
pond_id | UUID | ID do viveiro |
Requisição
Seção intitulada “Requisição”DELETE /api/v1/ponds/pond-uuidAuthorization: Bearer <token>Resposta 204 No Content
Seção intitulada “Resposta 204 No Content”Sem corpo de resposta.
Possíveis Erros
Seção intitulada “Possíveis Erros”| Status | Detalhe |
|---|---|
404 | Viveiro não encontrado ou sem permissão |
GET /ponds/summary-cards
Seção intitulada “GET /ponds/summary-cards”Obtém cards de resumo para todos os viveiros com métricas chave.
Requisição
Seção intitulada “Requisição”GET /api/v1/ponds/summary-cards?farm_id={farm_id}Authorization: Bearer <token>Parâmetros de Query
Seção intitulada “Parâmetros de Query”| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
farm_id | UUID | ❌ | Filtrar por fazenda |
Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "ponds": [ { "pond_id": "pond-uuid-1", "cod": "VV-01", "pond_type": "FATTENING", "active_batch": { "id": "batch-uuid", "batch_number": "LOTE-2026-001", "days_active": 45, "current_biomass_kg": 850.0, "average_weight_g": 12.8, "survival_rate": 85.0 }, "water_quality": { "last_measurement": "2026-02-19T06:00:00Z", "temperature": 28.5, "dissolved_oxygen": 5.2, "ph": 7.8, "alerts_count": 0 }, "status": "ACTIVE" }, { "pond_id": "pond-uuid-2", "cod": "VV-02", "pond_type": "NURSERY", "active_batch": null, "water_quality": null, "status": "EMPTY" } ], "summary": { "total_ponds": 2, "active_ponds": 1, "empty_ponds": 1, "total_biomass_kg": 850.0 }}GET /ponds/{pond_id}/summary-card
Seção intitulada “GET /ponds/{pond_id}/summary-card”Obtém card de resumo detalhado para um viveiro específico.
Parâmetros de Path
Seção intitulada “Parâmetros de Path”| Parâmetro | Tipo | Descrição |
|---|---|---|
pond_id | UUID | ID do viveiro |
Requisição
Seção intitulada “Requisição”GET /api/v1/ponds/{pond_id}/summary-cardAuthorization: Bearer <token>Resposta 200 OK
Seção intitulada “Resposta 200 OK”{ "pond_id": "pond-uuid", "cod": "VV-01", "pond_type": "FATTENING", "size_m2": 5000, "depth_m": 2, "aerator_count": 4, "active_batch": { "id": "batch-uuid", "batch_number": "LOTE-2026-001", "start_date": "2026-01-08T00:00:00Z", "expected_harvest_date": "2026-04-08T00:00:00Z", "days_active": 45, "initial_population": 250000, "current_population": 212500, "current_biomass_kg": 850.0, "average_weight_g": 12.8, "survival_rate": 85.0, "fca": 1.45 }, "latest_biometry": { "date": "2026-02-15T10:00:00Z", "average_weight_g": 12.8, "sample_size": 100, "coefficient_variation": 14.5 }, "latest_water_quality": { "date": "2026-02-19T06:00:00Z", "temperature": 28.5, "dissolved_oxygen": 5.2, "ph": 7.8, "ammonia": 0.05, "nitrite": 0.02 }, "feeding_today": { "total_kg": 25.0, "feeds_count": 3, "last_feed": "2026-02-19T14:00:00Z" }, "active_alerts": [], "control_point": { "id": "cp-uuid", "name": "Controlador A", "status": "ONLINE" }}