
El laboratorio envía 4,3 gigabytes; el productor recibe una página que entiende
DNA Genética do Brasil es referencia en mejoramiento genético bovino en el sur de Brasil — y decidió ser pionera también en la genómica ovina. El resultado del laboratorio internacional llega como un archivo de 4,3 GB con 59 millones de líneas, ilegible para cualquier hoja de cálculo. Epicora construyó SheepGen: la plataforma que lee ese archivo en streaming, aplica un catálogo de 76 marcadores y 1.103 reglas de interpretación — mantenido por el propio equipo de DNA, sin programador de por medio — y entrega un informe por animal, con nota por compuesto y alerta genética. En la primera carga real: 735 animales de 24 establecimientos, con la cuenta verificada por dos caminos independientes y cero divergencias.
- Cliente
- DNA Genética do Brasil (Chapecó, Brasil)
- Lo que hicimos
- Plataforma web de evaluación genómica: importa el resultado bruto del laboratorio, lo interpreta con un catálogo configurable de marcadores y emite el informe por animal — recalculando el rebaño entero cuando la investigación avanza
- Plataforma
- React + Vite · NestJS · MongoDB · AWS (S3, Elastic Beanstalk, SES) · Terraform
El punto de partida
DNA Genética ya domina la genética bovina — recolectar, interpretar y gestionar datos genómicos es su negocio. Al entrar en el segmento ovino, un mercado aún poco explorado en Brasil, armó la alianza internacional: muestras de cartílago auricular se genotipan en el exterior en un chip de 80 mil SNPs. La ciencia estaba resuelta. El problema era lo que pasaba después.
El resultado vuelve como un Illumina FinalReport: un archivo de texto con una línea por animal × SNP. Para un lote de 735 animales, eso significa 4,3 GB y cerca de 59 millones de líneas — un archivo que Excel no abre (su límite es 1 millón de filas; el archivo lo supera 56 veces) y que ninguna persona puede leer. Y de todo el chip, solo 76 marcadores importan para la evaluación: el resto es ruido para este trabajo.
- Procesamiento manual en hojas de cálculo, animal por animal — inviable al volumen real: el dato útil estaba enterrado en 59 millones de líneas.
- Sin trazabilidad por animal: el historial de cada ovino no existía en ningún lugar — existía un archivo por lote.
- El cliente final recibía dato bruto, no lectura técnica — el valor percibido del servicio quedaba por debajo del valor real de la ciencia.
- La regla de interpretación cambia todo el tiempo. Es la naturaleza de la genómica: con cada publicación científica un marcador "gana dirección" y pasa a puntuar. En palabras del propio cliente: "sale investigación nueva, creamos un campo nuevo, recalculamos y entregamos de nuevo" — no era una función futura, era la premisa de cómo trabaja.
El punto de inflexión
La decisión estructural fue tratar la regla de interpretación como dato, no como código. El equipo de DNA Genética registra los marcadores y, para cada combinación de genotipo × raza, define el compuesto, la puntuación y la clasificación. Ese catálogo — hoy 76 marcadores y 1.103 reglas — es el cerebro del sistema, y quien lo mantiene es el genetista, no el programador. El marcador tiene ciclo de vida (activo · esperando dirección · bloqueado), la sonda causal tiene precedencia sobre la réplica técnica, y el mismo SNP puede puntuar distinto según la raza — porque así funciona la ciencia.
La segunda decisión fue separar el genotipo bruto del cálculo. El archivo del laboratorio sube directo al almacenamiento — 4,3 GB no pasan por el cuerpo de la petición — y la API lee el objeto en streaming, grabando cada lectura útil como dato del animal, independiente de cualquier puntuación. La consecuencia es lo que el cliente pidió sin saber el nombre técnico: recalcular se volvió un botón. Y cuando un marcador se registra después de la importación, el sistema relee el archivo ya guardado y graba solo lo que faltaba — sin pedirle nada nuevo al laboratorio.
La tercera decisión protege el informe: un número equivocado con cara de correcto es el peor defecto posible en un documento genético. El motor de puntuación no solo fue probado — fue verificado contra un oráculo independiente: una implementación separada del cálculo, corriendo fuera del sistema, sobre los mismos datos. Resultado en la carga real: cero divergencias en 735 animales. Y el informe distingue lo que los sistemas descuidados mezclan: cero es "evaluado y no puntuó"; nulo es "no evaluado" — el marcador que el ensayo no leyó aparece como no leído, la réplica descartada aparece como descartada, y nada se pierde en silencio.
La prueba, en vivo
Registramos un marcador nuevo por la API — el "investigación nueva, creamos un campo" del cliente. El sistema respondió en 0,6 segundos, releyó los 4,3 GB guardados en 4 minutos, grabó las 734 lecturas que faltaban y recalculó los 735 informes. La nota del animal verificado cambió exactamente lo que la regla dictaba. Después de la prueba, el marcador de test salió y el recálculo devolvió el número validado — la cuenta cierra al dígito, en ambos sentidos.
Lo que entregamos
01 · El importador que se traga el archivo del laboratorio
Subida directa al almacenamiento y lectura en streaming: los 4,3 GB del FinalReport no pasan por la memoria de nadie. De los 80.366 SNPs del chip, el sistema aprovecha los del catálogo — en la primera carga real, 55.050 lecturas de 734 animales genotipados — y graba el genotipo bruto separado del cálculo. Todo descarte se cuenta y se nombra: la importación dice qué entró, qué quedó fuera y por qué.
02 · El catálogo genético que la propia DNA mantiene
Marcadores con regla por genotipo × raza, compuestos configurables (Producción · Fertilidad · Salud, más los informativos, que aparecen en el informe y quedan fuera de la nota) y el tratamiento que el dato genómico real exige: grupos de sonda causal × réplica técnica, genotipos hemicigotos e indels, tres nomenclaturas de alelo normalizadas en la entrada. Importación de catálogo idempotente y verificable: exportar y reimportar devuelve las mismas reglas — ninguna de más, ninguna de menos.
03 · La alerta genética — la enfermedad separada de la nota
La susceptibilidad a enfermedad no puntúa: es un bloque propio en el informe, con el genotipo del animal y el grado de riesgo de 1 a 5 en la escala internacional (UK National Scrapie Plan), con los colores de la tabla del laboratorio y la fuente científica citada. El scrapie es la primera condición; cuando venga otra enfermedad, es un registro, no un desarrollo.
04 · El informe por animal y el panel del rebaño
En la pantalla del animal: nota por compuesto, puntuación del animal, alerta genética y la tabla de marcadores con estado explícito (evaluado · réplica descartada · no leído), genotipo, calidad de lectura y puntos. El informe en PDF sale al clic, en ~1,4 segundos, siempre actual — tras un recálculo el documento se regenera solo — y lleva en el pie la revisión del catálogo y la fecha del cálculo. Y el panel del rebaño lee el conjunto: nota media por compuesto, distribución de las sumas, riesgo genético por grupo — cada número acompañado de un "cómo leerlo".
Cómo lo garantizamos
Dos caminos independientes hacia el mismo número
El motor de producción y el oráculo de verificación se escribieron separados a propósito — si ambos coinciden en 55.050 lecturas de 735 animales, compuesto por compuesto, la probabilidad de que un error de lógica sobreviva escondido se desploma. La regla está protegida por test automatizado: un cambio en el motor que se despegue del oráculo rompe la suite. Y cuando decisiones del cliente cambiaron la vara a mitad de semana, el oráculo se movió con ella — y la igualdad se mantuvo.
La verificación atrapa hasta lo que llegó mal de afuera
Cuando 71 animales salieron con Producción en cero, la revalidación contra los archivos originales encontró una clasificación equivocada en la planilla de origen — marcadores de músculo y grasa registrados en el compuesto incorrecto. Confirmada y corregida con el cliente, la corrección entró como dato versionado (la planilla de terceros no se edita; la corrección queda nombrada, fechada y reproducible). La suma de cada animal no cambió ni un punto — era una reclasificación, y la prueba de que el resto estaba bien.
Dato genético tratado como confidencial
El informe y el archivo del laboratorio viven en almacenamiento cerrado: toda lectura sale por URL firmada que expira en 15 minutos, y pedir el documento sin sesión devuelve un rechazo, no un archivo. El orden de la implantación se diseñó para eso — primero se cerró la bóveda, después entraron los informes reales. Y la carga de 735 animales corrió con los seguros de quien toca datos ajenos: modo seco por defecto, escritura solo con flag explícita, idempotencia por código del animal y rechazo de fechas imposibles.
El resultado
El número que resume el proyecto no es uno de los grandes — es el pequeño: 4 minutos. Es el tiempo entre "salió investigación nueva sobre este marcador" y "el rebaño entero tiene informe actualizado". En el flujo antiguo, esa frase significaba reprocesar planillas a mano, animal por animal — o simplemente no ocurrir. La genómica ovina va a seguir publicando marcadores nuevos, y la plataforma fue diseñada para que eso sea una buena noticia, no un retrabajo.
Y el informe que llega al productor carga la honestidad del dato: qué fue evaluado, qué no pudo leer el ensayo y por qué, qué revisión del catálogo produjo ese número. En un documento que orienta decisiones de reproducción del rebaño, decir lo que no se sabe vale tanto como decir lo que se sabe. La implantación cerró con el rebaño entero en el ambiente del cliente y la aceptación formal llegó en el plazo acordado, sin reprogramación.
Soluciones relacionadas
Casos relacionados
¿Tu operación recibe datos técnicos que solo viven en planillas?
Epicora construye la plataforma que transforma el dato bruto del laboratorio, del sensor o del socio en un documento que tu cliente entiende — con la regla de interpretación en manos de quien sabe del tema, no en el código.