Skip to content

Medidas Corporales — Diseño Antropométrico

Filosofía: el servidor guarda milímetros, no conclusiones

Bodibly registra lo que el usuario midió, no lo que ese número significa.

Una medida corporal es un dato crudo: un valor, su unidad, el sitio anatómico y la fecha en que se tomó. El porcentaje de grasa que sale de una fórmula de pliegues, la relación cintura-cadera, el índice de masa corporal — todo eso es una derivación, y las derivaciones se calculan en el cliente.

Es el mismo principio que ya rige los sets: el récord es el kilo levantado, no el porcentaje de RM con el que el usuario decidió programarlo. El método de entrada es del usuario; el dato es del sistema.

La consecuencia práctica: cuando mañana aparezca una fórmula mejor, se aplica sobre todo el histórico sin migrar una sola fila. Si el servidor hubiera guardado el porcentaje calculado, ese histórico estaría congelado en la fórmula vigente el día que se registró.

La base científica: ISAK

El catálogo de medidas sigue el protocolo ISAK (International Society for the Advancement of Kinanthropometry), el estándar internacional de antropometría. No es una decisión estética: ISAK define dónde exactamente se apoya la cinta o el plicómetro para cada sitio, y esa definición es lo que hace que dos mediciones separadas por tres meses sean comparables.

De ahí salen dos decisiones que a primera vista parecen inconsistentes entre sí.

Los perímetros son lateralizados; los pliegues no

Los perímetros de las extremidades existen por duplicado — Bíceps izquierdo y Bíceps derecho son dos códigos distintos, igual que antebrazo, muslo y pantorrilla. La razón es de producto: quien entrena en un gimnasio se preocupa por la asimetría, y un solo número por extremidad la esconde.

Los pliegues cutáneos no se lateralizan. Todos los protocolos miden el lado derecho por convención, así que el lado no es una decisión del usuario: es parte de la definición del sitio. Ofrecer "pliegue tricipital izquierdo" sería invitar a registrar un dato que ninguna fórmula sabe usar.

La técnica es la definición de la medida, no un campo

Cada código del catálogo lleva una instrucción ISAK: cómo se toma esa medida y en qué punto anatómico. No es texto de ayuda opcional — es lo que el código significa.

Cintura — Perímetro mínimo del torso, entre la última costilla y la cresta ilíaca, al final de una espiración normal y sin meter el abdomen.

Medir la cintura "a la altura del ombligo" da otro número. Ninguno de los dos está mal en abstracto; lo que está mal es alternarlos, porque entonces la gráfica del usuario mide su técnica y no su cuerpo. La consistencia de la medición es lo que hace que el gráfico signifique algo.

Por eso la técnica no es un dato de la fila. Si algún día se quisiera soportar una segunda técnica para el mismo sitio, sería un código nuevo, nunca una columna: dos lecturas del mismo código siguen siendo comparables por construcción.

26 tipos de medida, servidos desde Go — no hay tabla de catálogo, igual que con los permisos del panel. Agregar una medida es una entrada más en el registro: sin migración, sin seeder, sin nada que mantener sincronizado.

El orden del registro es el orden de renderizado, así que los pares izquierda / derecha quedan siempre adyacentes en la app.

Básicas

TipoUnidadesNotas
Pesokg, lbEn ayunas, misma ropa cada vez
Estaturacm, inPlano de Frankfort, al final de una inspiración
% de grasa corporalpctÚnico tipo que acepta método (ver abajo)

Perímetros (13)

Medidos con cinta ajustada a la piel sin comprimirla. (La API expone también Estatura con kind: girth — su naturaleza física es la misma, una longitud en cm/in —, así que un cliente que agrupe la respuesta de tipos por kind verá 14 y no 13.)

Sin lateralizarLateralizados (izq. / der.)
Cuello, Hombros, Pecho, Cintura, CaderaBíceps, Antebrazo, Muslo, Pantorrilla

Pliegues cutáneos (10)

Medidos con plicómetro, siempre en el lado derecho, en milímetros.

Tricipital · Subescapular · Bicipital · Cresta ilíaca · Supraespinal · Abdominal · Muslo anterior · Pantorrilla medial · Pectoral · Medioaxilar

Los ocho primeros son el perfil restringido de ISAK. Los dos últimos — pectoral y medioaxilar — no están en ISAK: los pide Jackson-Pollock. El catálogo es deliberadamente la unión de los sitios que los protocolos soportados necesitan.

Protocolos de pliegues

Un protocolo de pliegues no cambia cómo se mide un sitio. Cambia qué sitios pide y con qué fórmula los convierte en un porcentaje.

ProtocoloSitios que pide
Jackson-Pollock 3 (hombres)Pectoral, abdominal, muslo anterior
Jackson-Pollock 3 (mujeres)Tricipital, supraespinal, muslo anterior
Jackson-Pollock 7Pectoral, medioaxilar, tricipital, subescapular, abdominal, supraespinal, muslo anterior
Durnin-WomersleyBicipital, tricipital, subescapular, cresta ilíaca
ISAK (sumatoria de 8)Los ocho sitios del perfil restringido

El catálogo distingue cresta ilíaca de supraespinal porque lo que cada protocolo llama "suprailíaco" no es el mismo punto: Jackson-Pollock lo toma en el sitio supraespinal y Durnin-Womersley sobre la cresta ilíaca. Fusionarlos en un solo código habría hecho que las dos fórmulas leyeran el mismo número creyendo que es el suyo.

El flujo real es al revés de lo que sugiere la tabla. El usuario no elige un protocolo y luego mide: va a un profesional, ese profesional toma los pliegues que su método pide, y el usuario registra los milímetros que le dieron. La app recibe un puñado de pliegues con fecha y calcula, del lado del cliente, los porcentajes de aquellos protocolos cuyos sitios estén completos. Si midieron siete sitios, se puede ofrecer JP7 y JP3; si midieron cuatro, Durnin-Womersley.

El servidor no participa de esa decisión. Guarda los milímetros.

% de grasa corporal y el campo method

El porcentaje de grasa es la excepción: además de calcularse desde pliegues, también se registra directamente. Una báscula de bioimpedancia da un número, un DEXA da otro, la fórmula Navy da un tercero — y el usuario legítimamente quiere anotar ese número tal cual.

Es también la única medida donde la técnica cambia el número materialmente. Un perímetro de cintura tomado según ISAK es el mismo con cualquier cinta. Un 18% por bioimpedancia y un 18% por DEXA no son el mismo 18%, y de la misma persona el mismo día pueden diferir varios puntos.

Por eso body_fat — y solo body_fat — lleva un campo método opcional:

bioimpedance · dexa · skinfold_jp3 · skinfold_jp7 · skinfold_durnin · navy · other

Existe para que la gráfica pueda filtrar o anotar por método en lugar de mentir mezclándolos. Una línea que sube de 15 a 19 porque el usuario cambió de báscula a DEXA no es una línea, es un artefacto.

La base de datos sostiene la regla por su cuenta: hay un CHECK que impide que cualquier tipo distinto de body_fat lleve método.

Unidades

Cada fila guarda lo que el usuario escribió — valor + unidad — y además un valor canónico en métrico derivado de ese par. Es la misma forma que ya usan los sets (weight / weight_unit / weight_kg): registrar en libras o en kilogramos no puede cambiar la forma de la gráfica.

Ese valor canónico no se serializa en las respuestas: es una columna de almacenamiento y agregación cuya dimensión depende del tipo, y el cliente ya tiene el par valor + unidad que el usuario escribió.

Qué unidades acepta un tipo lo decide su naturaleza física, no una lista por código: peso admite kg/lb, longitudes cm/in, pliegues solo mm, porcentaje solo pct.

No se agregó ninguna preferencia nueva. En los tipos que admiten dos unidades — peso y perímetros — la que el usuario ve es la que ya dicta su Sistema de Medición (métrico / imperial) del perfil, el mismo que decide la unidad por defecto al loggear un set. En pliegues (mm) y porcentaje (pct) no hay nada que elegir: tienen una sola unidad.

Semántica del historial

  • Varias entradas del mismo tipo el mismo día son válidas. Pesarse en la mañana y en la noche es un caso real, no un error de dedo. El agrupado por día que necesita una gráfica lo hace el cliente, que es quien sabe qué está dibujando.
  • measured_at es retroactivo pero nunca futuro. El usuario puede cargar hoy la medición que le hicieron el mes pasado. Hacia adelante no: una fecha futura solo puede ser un error de tipeo, y el servidor tolera unos minutos de desfase de reloj del teléfono antes de rechazarla.
  • CRUD completo con borrado duro. Nada referencia una medida corporal — ningún récord, ninguna sesión, ninguna publicación — así que corregir un error no puede dejar residuo. Una medida mal escrita se borra y desaparece: dejarla como fila anulada solo serviría para envenenar la gráfica de por vida.
  • La actualización reemplaza todo. Un PUT manda la medida completa; omitir el método lo borra. No hay actualización parcial porque una medida son cuatro escalares — la ambigüedad entre "no lo mandé" y "quiero limpiarlo" costaría más que lo que ahorra.

El catálogo llega a la app ya traducido y con la instrucción ISAK de cada sitio, así que el "cómo se mide" se muestra junto al campo donde se escribe — que es exactamente donde importa.

Todas las medidas son del usuario autenticado. No hay forma de leer las medidas de otro: la antropometría no es contenido social. Los contratos técnicos viven en la referencia OpenAPI del servidor.

Lo que no existe (y por qué)

  • Cálculo de porcentaje de grasa en el servidor. Las fórmulas de pliegues necesitan sexo y edad además de los milímetros, y el resultado es una derivación. Se calcula en el cliente, que ya tiene el perfil cargado.
  • IMC, relación cintura-cadera, masa magra. Mismo argumento: son funciones puras de datos que el cliente ya tiene.
  • Elegir un protocolo y guardarlo. El protocolo no es un atributo de la medición, es una lente sobre un conjunto de mediciones. Guardarlo obligaría a decidir el protocolo antes de medir, que es al revés de como ocurre.
  • Fotos de progreso. Otro dominio: pesa bytes, necesita blob store y privacidad propia. No se mezcla con datos numéricos.
  • Metas y recordatorios. "Llegar a 80 kg", "recordarme pesarme los lunes". Post-MVP; requiere notificaciones, que todavía no existen.
  • Pliegues lateralizados. Ver arriba: ningún protocolo los usa.
  • Importar desde báscula o wearable. Integraciones con Health / Google Fit quedan fuera de alcance. Hoy todo dato entra a mano.