Skip to content

Guía de campo de alimentación — referencia de fórmulas

Respaldo de las fórmulas de la guía de campo de alimentación del socio (Excel Guia de campo ab LA.xlsx, hoja "Guia de campo ab."), implementadas en el módulo alimentacion (feeding-curves + feeding-guide). Ver también sabana-calculos.md para las fórmulas de la sábana semanal (biometría, FCR, raleo) — este documento cubre específicamente la guía diaria que sugiere cuánto alimentar y proyecta la cosecha.

Ver ADR-0042 para la decisión de unidades del factor, y ADR-0043 para la planificación de raleo (sección 6).

1. Curvas de alimentación (tabla peso → factor)

La Hoja2 "Factores de Alimentacion" del Excel trae 4 curvas de referencia, sembradas (idempotente) para cada organización nueva:

CurvaColumna del ExcelUso
Teórica InviernoKG/100 MIL - IDefault (la que usa el Excel hoy)
Teórica VeranoKG/100 MIL - VAlternativa por estación
Balao 2024 - InviernoI- 2024 BALAOCurva real observada, calibración
Balao 2024 - VeranoV- 2024 BALAOCurva real observada, calibración

Cada curva tiene un punto por peso de camarón (1–42 g). Son editables por organización (CRUD en /feeding-curves); el seed solo carga los 4 valores iniciales del Excel.

Lookup del factor (VLOOKUP aproximado)

factor(peso) = el punto de mayor `weightG` que NO supere `peso`

Réplica exacta del VLOOKUP(peso, tabla, columna, TRUE) del Excel: coincidencia aproximada hacia abajo. Ej.: con la curva Invierno, factor(15.22) = factor(15) = 6.5 (no hay punto entre 15 y 16, se usa el de 15). Por debajo del primer punto → sin factor (igual que el #N/A del Excel, que la celda muestra en blanco). Por encima del último punto → se usa el último factor (comportamiento estándar de un VLOOKUP aproximado).

Implementación: lookupFactor() en feeding-guide.calc.ts.

2. Guía por ciclo (una fila por piscina)

Entradas resueltas por ciclo antes de calcular:

EntradaDe dónde sale
hectaresPool.hectares
pesopeso del último Muestreo del ciclo (g)
cM2override manual (Cycle.populationOverride), o derivado del último Population: sobrevivencia% × sembrados ÷ (ha × 10000)
kgRealeskg del último Feeding (registro diario) del ciclo
factorlookupFactor(curva del ciclo o default de la org, peso)

Fórmulas (semántica del Excel — ver ADR-0042)

DerivadoFórmulaSignificado
Kg sugeridoscM2 × ha × factorración diaria que "debería" darse
DesviaciónkgSugeridos − kgReales> 0 = alimentar más; < 0 = se está dando de más
C/m² a cosechakgReales ÷ ha ÷ factordensidad implícita por el consumo real (censo por consumo)
Libras a cosechacM2Cosecha × ha × 10000 × peso ÷ 454proyección de biomasa a cosechar
# de bineslibrasCosecha ÷ 11001 bin = 1100 lb
Rendimiento/sacolibrasCosecha ÷ (kgReales ÷ 25)lb cosechadas por saco de 25 kg de balanceado
% de rendimiento(librasCosecha ÷ 100) ÷ kgRealesfracción
Lb/ha actualeslibrasCosecha ÷ ha

Constantes: 454 g/lb, 1100 lb/bin, 25 kg/saco, 10 000 m²/ha (mismas que sabana-calculos.md).

Precisión: los intermedios se encadenan en precisión completa (como las celdas del Excel, que guardan el double y solo redondean al mostrar); redondear un intermedio y reusarlo propaga error de forma silenciosa — el redondeo se aplica una sola vez, al construir cada campo de salida. Implementación: computeGuide() en feeding-guide.calc.ts.

Entradas faltantes → null (igual que las celdas en blanco del Excel): sin muestreo, sin población/override, o sin registro de alimentación, el/los derivados que dependen de ese dato quedan null en vez de propagar un error.

Ejemplo verificado (piscina 1 del Excel, fila 3)

Entradas: ha 12.09 · c/m² 24.2 · peso 15.22 g · kg reales 1700 · curva Invierno (factor(15) = 6.5).

DerivadoCálculoResultado
Kg sugeridos24.2 × 12.09 × 6.51901.757
Desviación1901.757 − 1700201.757
C/m² a cosecha1700 / 12.09 / 6.521.6326
Libras a cosecha21.6326 × 12.09 × 10000 × 15.22 / 45487678.75
# de bines87678.75 / 110079.71
Rendimiento/saco87678.75 / (1700/25)1289.39
% de rendimiento(87678.75/100) / 17000.5158
Lb/ha actuales87678.75 / 12.097252.17

Cubierto por el test de regresión feeding-guide.calc.spec.ts (unit, celda por celda) y feeding-guide.e2e-spec.ts (flujo completo vía API).

3. Densidad c/m² derivada del muestreo

cM2 = (sobrevivencia% ÷ 100 × cantidad_sembrada) ÷ (hectareas × 10000)

Misma lógica de "animales vivos" que la biomasa de la sábana (sabana-calculos.md §3), expresada como densidad por m² en vez de biomasa en libras. Implementación: deriveCM2().

4. Curva y override por ciclo

Cada Cycle puede fijar:

  • feedingCurveId — qué curva de la org usa esta piscina (null = la marcada isDefault de la organización).
  • populationOverride — c/m² manual, cuando el técnico tiene mejor dato que el muestreo (null = usar el derivado del último Population).

Ambos se ajustan vía PATCH /cycles/:cycleId/feeding-guide.

5. Raleo planificado — proyecciones del plan

Ver 07-raleos-flow.md para el modelo completo (Harvest.status). Fórmulas del plan (columnas M–R del Excel):

MétricaFórmulaSignificado
Total de raleo (lb)bines × 1100libras proyectadas a sacar
Lb de raleo/hatotalRaleo ÷ ha
C/m² de raleo(lbRaleoHa × 454 ÷ gramajeObjetivo) ÷ 10000densidad que representa el raleo

Entradas: bins (# de bines a sacar) y targetWeightG (gramaje objetivo), cargados al planificar. Un plan sin bins no proyecta (todo null). Implementación: planProjection() en raleos.service.ts.