Resumen Ejecutivo - Documentación de Testing Sistema de Posturografía¶
Archivos Creados¶
1. TEST_CASES.md¶
Ubicación: /Users/luis/IdeaProjects/orthoposture/TEST_CASES.md
Documento exhaustivo de casos de uso para pruebas automatizadas de UI que incluye:
Contenido Principal:¶
- Información General: Factor de calibración (FC), líneas de referencia (LRV)
- Calibración del Sistema: Secuencia completa de calibración
- Vista Anterior (Frente):
- 16 marcadores anatómicos
- 4 regiones de análisis (Cérvico-Cefálica, Tronco-Columna, Cintura Escapular, Cintura Pélvica)
- Cálculos paso a paso con fórmulas MATLAB
- Valores esperados y diagnósticos
- Vista Posterior (Espalda):
- 19 marcadores anatómicos
- 6 regiones de análisis incluyendo ángulo calcáneo
- Asimetría escapular, desbalance coronal
- Vista Lateral Derecha:
- 12 marcadores anatómicos
- Tangentes posturales, lordosis cervical y lumbar
- Basculación pélvica, ángulos tibiotarsiano y de rodilla
- Vista Lateral Izquierda:
- Similar a Lateral Derecha con marcadores del lado izquierdo
- Diferencias en cálculos debido a orientación de la foto
- Valores de Referencia Diagnóstica: Umbrales para todos los diagnósticos
- Estructura de Archivos .mat: Formato de datos de marcadores
Datos Específicos Incluidos:¶
- Coordenadas exactas de marcadores (valores aproximados en píxeles)
- Secuencias de clics para cada medición
- Fórmulas matemáticas exactas de MATLAB traducidas
- Rangos normales para cada medición:
- Rotación/Traslación: -1 cm ≤ d ≤ 1 cm
- Inclinación: abs(θ) ≤ 2°
- Ángulo Q: 6° ≤ θ < 27°
- Lordosis: 3 cm ≤ d ≤ 5 cm
- Ángulo Tibiotarsiano: 88° ≤ θ ≤ 92°
- Y más...
2. python/test_matlab_integration.py¶
Ubicación: /Users/luis/IdeaProjects/orthoposture/python/test_matlab_integration.py
Script completo de pruebas automatizadas con pytest que incluye:
Funcionalidades:¶
- Lectura de archivos .mat: Con fallback a datos de prueba si scipy no está disponible
- Funciones de cálculo:
calcular_factor_calibracion(): FC = 10 / D12calcular_angulo_inclinacion(): Para cabeza, hombros, pelviscalcular_rotacion_punto(): Para rotación de puntos respecto a LRVcalcular_angulo_tronco(): Inclinación del troncocalcular_angulo_q(): Ángulo cuadricipitaldiagnosticar_miembro_inferior(): Genu Varo/Valgocalcular_lordosis(): Lordosis cervical y lumbarcalcular_angulo_codo(): Flexión de codocalcular_angulo_tibiotarsiano(): Ángulo de tobillo- Clases de Test:
TestVistaAnterior: 14 tests específicos para vista anteriorTestVistaPerfil: 9 tests específicos para vistas de perfilTestIntegracion: Tests de flujo completo y carga de archivos reales
Tests Incluidos:¶
- Calibración: Test del factor de calibración
- Inclinación Cabeza: Neutra, derecha, izquierda
- Rotación Escotadura: Neutra, derecha, izquierda
- Inclinación Hombros: Neutra
- Inclinación Pelvis: Neutra
- Ángulo Q: Normal, aumentado, disminuido
- Miembro Inferior: Neutro, Genu Varo, Genu Valgo
- Lordosis: Normal, hiperlordosis, rectificación
- Ángulo Codo: Normal, hiperextensión, flexión
- Ángulo Tibiotarsiano: Normal, extensión, flexión
- Flujo Completo: Test de integración end-to-end
- Carga Archivos: Test con archivos .mat reales
3. python/read_mat_markers.py¶
Ubicación: /Users/luis/IdeaProjects/orthoposture/python/read_mat_markers.py
Script auxiliar para leer y explorar archivos .mat de marcadores.
Análisis Realizado¶
Archivos MATLAB Analizados:¶
- InterfazMedicionFrenteJulio2024v2 (1).m (1600 líneas)
- Vista Anterior
-
Botones: TagCervicoCefalico, TagTroncoColumna, TagHombroMSuperior, TagPelvisMInferior
-
InterfazMedicionEspaldaJulio2024v2 (1).m (Similar estructura)
- Vista Posterior
-
Botones adicionales: TagAnguloCalcaneo, TagCinturaEscapular
-
InterfazMedicionPerfilDerechoJulio2024 (1).m (1600 líneas)
- Vista Lateral Derecha
-
Botones: TagTangentes, TagCervicoCefalica, TagTroncoColumna, TagMiembroSuperior, TagPelvisMiembroInferior
-
InterfazMedicionPerfilIzquierdoJulio2024 (1).m (1631 líneas)
- Vista Lateral Izquierda
- Similar a Perfil Derecho con ajustes para orientación
Archivos .mat Identificados:¶
Marcadores_ID_ML_13-2-2025_13-50-55.mat→ Vista Anterior (A)Marcadores_ID_ML_13-2-2025_13-56-2.mat→ Vista Posterior (P)Marcadores_ID_ML_13-2-2025_14-0-12.mat→ Vista Lateral Derecha (LD)Marcadores_ID_Ml_13-2-2025_14-3-33.mat→ Vista Lateral Izquierda (LI)
Flujo de Trabajo Identificado¶
Secuencia General (Todas las Vistas):¶
1. Cargar Imagen (TagAbrirImagen)
↓
2. Calibrar con Grilla (TagCalibracionGrilla)
- Click en 2 puntos separados 10 cm
- Calcula FC = 10 / D12
↓
3. Importar Marcadores (TagMarcadores)
- Carga archivo .mat
- Extrae coordenadas (X, Y) de cada marcador
↓
4. Trazar Líneas de Referencia (ReferenciasTag)
- Línea Horizontal (nivel maleolos)
- Línea Vertical (LRV) perpendicular
↓
5. Análisis por Regiones (Botones específicos)
- Cérvico-Cefálica
- Tronco-Columna
- Cintura Escapular
- Cintura Pélvica
↓
6. Exportar Resultados (TagExportarTabla)
- Guarda en Excel: DatosSujeto{ID}.xlsx
Vista Anterior - Botones y Secuencia:¶
TagAbrirImagen → TagCalibracionGrilla → TagMarcadores → TagRectasRef →
TagCervicoCefalico → TagTroncoColumna → TagHombroMSuperior →
TagPelvisMInferior → TagMedidas (opcional) → TagExportarTabla
Vista Posterior - Botones y Secuencia:¶
TagAbrirImagen → TagCalibracionGrilla → TagMarcadores → ReferenciasTag →
TagCervicoCefalica → TagCinturaEscapular → TagCabeza →
TagTroncoycolumna → TagMiembroInferior → TagAnguloCalcaneo →
TagExportarTabla
Vista Perfil - Botones y Secuencia:¶
TagAbrirImagen → TagCalibracionGrilla → TagMarcadores → ReferenciasTag →
TagTangentes (Cabeza, Dorsal, Sacro) → TagCervicoCefalica →
TagTroncoColumna → TagMiembroSuperior → TagPelvisMiembroInferior →
TagExportarTabla
Cálculos Clave Identificados¶
1. Factor de Calibración (FC)¶
D12 = sqrt((X1-X2)^2 + (Y1-Y2)^2)
FC = 10 / D12
2. Ángulo de Inclinación (Cabeza, Hombros, Pelvis)¶
Si Y_izq < Y_der: # Cae a la derecha
A = [X_der - X_izq, Y_izq - Y_izq]
B = [X_der - X_izq, Y_der - Y_izq]
angulo = rad2deg(acos(dot(A,B) / (norm(A)*norm(B))))
Sino: # Cae a la izquierda
A = [X_izq - X_der, Y_der - Y_der]
B = [X_izq - X_der, Y_izq - Y_der]
angulo = -rad2deg(acos(dot(A,B) / (norm(A)*norm(B))))
3. Rotación de Punto (Respecto a LRV)¶
Distancia = FC * (Vx1 - X_punto)
Si Distancia > 1: 'derecha' (o 'antepulsión' en perfil)
Si Distancia < -1: 'izquierda' (o 'retropulsión' en perfil)
Sino: 'neutro'
4. Ángulo Q¶
A = [X_TAT - X_rotula, Y_TAT - Y_rotula]
B = [X_EIAS - X_rotula, Y_EIAS - Y_rotula]
anguloQ = abs(180 - rad2deg(acos(dot(A,B) / (norm(A)*norm(B)))))
Normal: 6° ≤ θ < 27°
5. Lordosis (Cervical/Lumbar)¶
Distancia = FC * (X_apex - X_tangente)
Normal: 3 cm ≤ d ≤ 5 cm
Aumentada (Hiperlordosis): d > 5 cm
Disminuida (Rectificación): d < 3 cm
6. Ángulo Tibiotarsiano¶
A = [X_tuberculo - X_maleolo, Y_tuberculo - Y_maleolo]
B = [X_horizontal - X_maleolo, Y_horizontal - Y_maleolo]
angulo = rad2deg(acos(dot(A,B) / (norm(A)*norm(B))))
Normal: 88° ≤ θ ≤ 92°
7. Diagnóstico Genu Varo/Valgo¶
Si DistanciaMaleolos < 1 cm:
Si DistanciaCondilos < 1 cm: 'Neutro'
Sino: 'Genu Varo'
Sino:
Si DistanciaMaleolos > DistanciaCondilos: 'Genu Valgo'
Sino: 'Genu Varo'
Marcadores por Vista¶
Vista Anterior (16 marcadores):¶
- Tragus Der./Izq., Lóbulo Oreja Der./Izq.
- Eminencia Frontal Media, Espina Nasal, Punto Mentoniano
- Escotadura Esternal, Apéndice Xifoides, Punto Sínfisis Pubiana
- Punto Acromion Der./Izq.
- Espina Iliaca Anterosuperior Der./Izq.
- Centro Rótula Der./Izq., TAT Der./Izq.
Vista Posterior (19 marcadores):¶
- Tragus, Lóbulo Oreja (Der./Izq.)
- Punto Interno Espina Omóplato (Der./Izq.)
- Ángulo Inferior Omóplato (Der./Izq.)
- Vértebras: C7, T3, T7, T12, L5
- Espina Iliaca Posterosuperior (Der./Izq.)
- Calcáneo, Aquiles (Der./Izq.)
Vista Perfil (12 marcadores por lado):¶
- Tragus, Lóbulo Oreja
- Apex Cervical, Apex Lumbar
- Punto Acromion, Epicóndilo, Base 3er Metacarpiano
- Trocánter Mayor, Tubérculo Ilíaco
- Tubérculo Cóndilo Externo, Borde anterior Maléolo
- Espina Ilíaca Anterosuperior, Espina Ilíaca Posteroinferior
Uso del Documento TEST_CASES.md¶
Para Desarrolladores de UI:¶
- Consultar la sección de cada vista para entender el flujo exacto
- Verificar coordenadas de marcadores esperadas
- Implementar botones en el orden especificado
- Usar las fórmulas MATLAB para validar cálculos
Para Desarrolladores de API:¶
- Implementar endpoints según las funciones en
test_matlab_integration.py - Asegurar que los cálculos replican exactamente MATLAB
- Usar los valores de referencia diagnóstica para validar salidas
- Ejecutar los tests de integración para verificar compatibilidad
Para QA/Testers:¶
- Seguir los workflows paso a paso para cada vista
- Usar las coordenadas de ejemplo para crear datos de prueba
- Verificar que los diagnósticos coinciden con los esperados
- Ejecutar los tests automatizados:
pytest python/test_matlab_integration.py -v
Próximos Pasos Recomendados¶
1. Instalación de Dependencias¶
pip install pytest numpy scipy
2. Ejecutar Tests¶
# Todos los tests
pytest python/test_matlab_integration.py -v
# Solo vista anterior
pytest python/test_matlab_integration.py::TestVistaAnterior -v
# Solo vista perfil
pytest python/test_matlab_integration.py::TestVistaPerfil -v
# Test específico
pytest python/test_matlab_integration.py::TestVistaAnterior::test_angulo_q_normal -v
3. Explorar Marcadores Reales¶
python python/read_mat_markers.py
4. Implementar Endpoints de API¶
Basándose en las funciones de cálculo en test_matlab_integration.py, implementar:
- POST /api/calibration → calcular_factor_calibracion()
- POST /api/cervico-cefalica → calcular_angulo_inclinacion() + calcular_rotacion_punto()
- POST /api/tronco-columna → calcular_angulo_tronco() + calcular_rotacion_punto()
- POST /api/hombros → calcular_angulo_inclinacion()
- POST /api/pelvis-inferior → calcular_angulo_inclinacion() + calcular_angulo_q() + diagnosticar_miembro_inferior()
- POST /api/perfil → calcular_lordosis() + calcular_angulo_codo() + calcular_angulo_tibiotarsiano()
5. Automatización de UI¶
Usar coordenadas de TEST_CASES.md para:
- Selenium/Playwright tests
- Cypress tests
- Robot Framework tests
Estadísticas¶
- Archivos MATLAB analizados: 4 (total ~6400 líneas)
- Total de marcadores identificados: 47 únicos
- Total de cálculos documentados: 25+
- Total de diagnósticos definidos: 20+
- Tests automatizados escritos: 23
- Funciones de cálculo implementadas: 10
- Vistas completas documentadas: 4
- Páginas de documentación: 1 (TEST_CASES.md con ~1000 líneas)
Contacto y Mantenimiento¶
Este documento debe actualizarse cada vez que: - Se agregue un nuevo marcador anatómico - Se modifique una fórmula de cálculo - Se agregue una nueva vista o región - Se cambien los umbrales diagnósticos - Se descubran nuevos casos de prueba
Fecha de creación: 2025-10-07 Versión: 1.0 Autor: Análisis automatizado de código MATLAB