Pular para conteúdo

EPA - Log de Decisiones y Avances

Formato: Append-only. Cada entrada debe incluir timestamp y contexto.


2025-10-06 - Sesión Inicial: Análisis y Planificación

Contexto

Migración de EPPA (Evaluación Posturográfica de Pie Automatizada) desde MATLAB a stack Python + Next.js/React.

Inventario de Código Actual

Python (Backend): - python/calculations.py - Lógica de cálculos biomecánicos (core) - python/test_calculations.py - Tests unitarios existentes

Frontend (Next.js/React): - src/app/analysis/anterior/page.tsx - Vista Anterior (IMPLEMENTADA) - src/app/marker-capture/page.tsx - Captura de marcadores - src/app/page.tsx - Landing/Home

Componentes Orthoposture: - src/components/orthoposture/anterior/anterior-controls-panel.tsx - src/components/orthoposture/anterior/anterior-results-panel.tsx - src/components/orthoposture/image-display-area.tsx - src/components/orthoposture/image-uploader.tsx - src/components/orthoposture/points-table.tsx - src/components/orthoposture/biomechanical-data-display.tsx

Tipos y Datos: - src/app/types.ts - Definiciones TypeScript - src/app/data/marker-definitions.ts - Definiciones de marcadores anatómicos - src/lib/analysis-calculations.ts - Wrapper/integración con Python

Análisis de Fuentes

crislabis.txt - Requisitos Funcionales Identificados:

  1. Workflow de 2 fases:
  2. Fase 1: Captura de marcadores (4 vistas: anterior, posterior, perfil derecho, perfil izquierdo)
  3. Fase 2: Análisis por vistas con importación de marcadores

  4. Secuencia de Captura de Marcadores:

  5. Vista Anterior → Vista Posterior → Perfil Derecho → Perfil Izquierdo
  6. Cada vista genera archivo con coordenadas X,Y
  7. ID de paciente obligatorio
  8. Orden de captura importante por timestamp

  9. Funcionalidades por Vista:

  10. Abrir imagen
  11. Importar marcadores (macheo X,Y con foto)
  12. Calibrar grilla (conversión píxel → cm)
  13. Trazar rectas de referencia (maleolos obligatorios)
  14. Tomar mediciones de superficie corporal (cursor manual)
  15. Exportar tabla (Excel con regiones/variables/mediciones)
  16. Capturar pantalla (manual por ahora, botón cambia a celeste)

  17. Regiones Anatómicas:

  18. Cérvico-cefálica
  19. Tronco-columna
  20. Cintura pélvica con miembro inferior
  21. Cintura escapular con miembro superior

  22. Variables Medidas:

  23. Angulares (grados, precisión 2 decimales)
  24. Distancias (cm, precisión 2 decimales)
  25. Convención: derecha = positivo, izquierda = negativo
  26. Si punto no visible → medición = 0 (NO colgarse)

  27. Validaciones y UX:

  28. Confirmación visual del marcador seleccionado (nombre aparece)
  29. Tabla X,Y actualizable en tiempo real
  30. Borrar fila si error
  31. Mensajes de "Guardado" confirmatorios
  32. Restore view para zoom
  33. Limpiar imagen (¿con confirmación?)
  34. Navegación de izquierda a derecha (occidental)
  35. Agregar zoom para precisión

  36. Calibración:

  37. Siempre en misma cuadrícula (cerca del ombligo para minimizar dispersión óptica)
  38. Error mínimo: marcación en cruce exacto de cuadrículas

  39. Marcadores Especiales:

  40. Maleolos: obligatorios (referencia vertical)
  41. Ápex: punto de inflexión de curva (cervical y lumbar)
  42. Superficie corporal vs. marcadores físicos (stickers/semiesferas 1cm)
  43. Tragus vs. lóbulo oreja (según piercing u obstáculos)

  44. Output Final:

  45. Excel con 4 hojas (1 por vista)
  46. Columnas: Región, Variable, Tipo (angular/distancia), Unidad, Medición, Diagnóstico
  47. Capturas de pantalla (4 imágenes JPG recortadas)
  48. Informe comparativo (pre/post tratamiento)
  49. Índice de alineación postural (% sobre 12 planos: 4 regiones × 3 planos)

  50. Optimizaciones Pendientes:

    • Captura automática de pantalla (actualmente manual)
    • Manejo de decimales excesivos (cortar en 2do decimal)
    • Mejor navegación/zoom sobre imagen

Análisis Detallado de Pantallas (img6.jpg, img8.jpg, img10.jpg):

IMG6.JPG - Muestra 3 pantallas:

1. PANTALLA PRINCIPAL (UI_MENU) - Título: "EVALUACIÓN POSTUROGRÁFICA DE PIE AUTOMATIZADA" - Layout: Imagen ilustrativa a la izquierda (silueta con marcadores), botones a la derecha - Botones verticales: - "Captura de marcadores" - "Vista Anterior" - "Vista Posterior" - "Vista Perfil Derecho" - "Vista Perfil Izquierdo" - "SALIR" - Logos institucionales: LaBIS, UCA (esquina superior derecha) - Color scheme: Fondo azul oscuro/navy, botones blancos

2. VISTA FRONTAL/ANTERIOR (UI_VISTA_ANTERIOR) - Variante 1 - Panel izquierdo con botones verticales: - "Abrir imagen" - "Importar marcadores" - "Calibración Grilla" - "Rectas de Referencia" - "Limpiar imagen" (celeste/destacado) - "Exportar Tabla de Variables a MATLAB" (gris, deshabilitado) - "Edit Text" (texto/input) - "Ángulo respecto a la horizontal" - "Ángulo respecto de la vertical" - "Distancia" - Nota al pie: "1.00 m = esparcimiento / Clic en el cruce exacto de la horizontal / Clic en 2 puntos del maleolo izq / Clic izq a derecha" - Panel central: Gráfico de ejes (0-1 en ambos ejes, vacío inicialmente) - Panel derecho: Tabla con columnas "Región | Variable | Medición | Diagnóstico" - Secciones: "Alineación Cérvico - Cefálica", "Alineación Tronco - Columna", "Alineación C. Escapular - M. Superior", "Alineación C. Pélvica - M. Inferior" - Botones inferiores: "Exportar Imagen" (magenta), "Exportar Vales" - "PANTALLA PRINCIPAL" | "Siguiente Vista" - "Salir"

3. VISTA PERFIL IZQUIERDO (UI_VISTA_PERFIL_IZQ) - Variante similar - Mismo layout que vista anterior - Panel derecho muestra diferentes mediciones: - "Torax-Puntos de Tangente" con datos específicos - "Alineación Cérvico - Cefálica", "Alineación Tronco - Columna" - "Alineación C. Escapular - M. Superior", "Alineación C. Pélvica - M. Inferior" - Botones: "Limpiar Imagen" (celeste), "Exportar Vales" - "PANTALLA PRINCIPAL" | "Siguiente Vista"

IMG8.JPG - Muestra 3 pantallas:

4. VISTA PERFIL IZQUIERDO (continuación) - Mismo layout, vista completa

5. VISTA POSTERIOR (UI_VISTA_POSTERIOR) - Panel izquierdo idéntico a vistas anteriores - Gráfico central vacío - Panel derecho con tabla similar - Botones específicos: "Ángulo Calcáneo Izquierdo", "Ángulo Calcáneo Derecho" - "Limpiar Imagen" (celeste), "Exportar Vales" - "PANTALLA PRINCIPAL" | "Siguiente Vista"

6. CAPTURA DE MARCADORES - Vista de Rostro (UI_CAPTURA_FACIAL) - Panel izquierdo: - Dropdowns: "Marcadores", "Vista Anterior", "Compresas Fronte Media", "Elegir Marcador", etc. - Botón "Seleccionar" - Link: "Marcador Detectado" (azul) - Tabla con columnas "Marcador | Vista | X | Y" - Ejemplo: "1 | Eminencia Fronte Media | A | 268.892 | 301.7342" - Botones: "Borrar Fila" | "Guardar" - Panel derecho: Imagen de rostro frontal con marcadores verdes circulares - Título: "Mia 1 29-12-2024 - copia.jpg" | "Vista Anterior" - Botones: "PANTALLA PRINCIPAL" | "SALIR"

IMG10.JPG - Muestra 2 pantallas:

7. CAPTURA DE MARCADORES - Vista Anterior Completa (UI_CAPTURA_ANTERIOR) - Misma estructura que captura facial - Panel izquierdo: - Selector de vistas: "Vista Anterior" (activa) - Lista desplegable: "Tragus Izq", "Vista Posterior", "Elegir Marcador", "Vista Lateral Derecha", "Elegir Marcador", "Vista Lateral Izquierda", "Elegir Marcador" - Botón "Seleccionar" - Link: "Marcador Detectado" - Tabla de marcadores con 4 entradas ejemplo - Botones: "Borrar Fila" | "Guardar" - Mensaje inferior: "Cerrar all de comprobó la pantalla y quedo..." | "Pulsar de Guardar" - Panel derecho: Imagen cuerpo completo frontal sobre grilla, marcadores verdes visibles - Título: "Mia 1 26-12-2024 - copia.jpg" | "Vista Anterior" - Botones: "PANTALLA PRINCIPAL" | "SALIR"

8. CAPTURA DE MARCADORES - Vista Posterior (UI_CAPTURA_POSTERIOR) - Estructura idéntica a captura anterior - Panel izquierdo muestra selector con "Vista Posterior" activa - Opciones: "Vista Anterior", "Elegir Marcador", "Vista Posterior", "Lóbulo Der", "Vista Lateral Derecha", etc. - Botón "Seleccionar", "Lóbulo Der" (link) - Tabla con 1 entrada: "1 | Lóbulo Izq | P | 122.64 | 366.713" - Botones: "Borrar Fila" | "Guardar" - Panel derecho: Imagen posterior del cuello/espalda con marcadores verdes - Título: "Mia 2 26-12-2024 - copia.jpg" | "Vista Posterior" - Mensaje inferior: "Hacer comprobó | La pantalla y q... | Pulsar, Abrir, E-screen, etc | Guardar" - Botones: "PANTALLA PRINCIPAL" | "SALIR"

Resumen de Pantallas Identificadas:

Módulo 1: CAPTURA DE MARCADORES (4 sub-pantallas con misma estructura) 1. UI_CAPTURA_ANTERIOR - Captura de marcadores vista frontal 2. UI_CAPTURA_POSTERIOR - Captura de marcadores vista posterior 3. UI_CAPTURA_PERFIL_DERECHO - Captura de marcadores perfil derecho (no mostrada, inferida) 4. UI_CAPTURA_PERFIL_IZQUIERDO - Captura de marcadores perfil izquierdo (no mostrada, inferida)

Módulo 2: ANÁLISIS POR VISTAS (4 pantallas con misma estructura) 5. UI_VISTA_ANTERIOR - Análisis y mediciones vista anterior (YA IMPLEMENTADA) 6. UI_VISTA_POSTERIOR - Análisis y mediciones vista posterior 7. UI_VISTA_PERFIL_DERECHO - Análisis y mediciones perfil derecho 8. UI_VISTA_PERFIL_IZQUIERDO - Análisis y mediciones perfil izquierdo

Módulo 3: NAVEGACIÓN Y UTILIDADES 9. UI_MENU - Pantalla principal de navegación 10. UI_EXPORTACION - Funcionalidad de exportación Excel/imágenes (integrada en cada vista)

Módulo 4: INFORMES (no mostrado en imágenes, descrito en crislabis.txt) 11. UI_INFORME_COMPARATIVO - Visualización pre/post tratamiento con índice de alineación

Decisiones de Diseño

D1. Reutilización de Componentes: La vista anterior ya implementada servirá como plantilla base para todas las vistas de análisis (posterior, perfil derecho, perfil izquierdo). Los componentes anterior-controls-panel.tsx y anterior-results-panel.tsx se refactorizarán en versiones genéricas parametrizadas por vista.

D2. Manejo de Rutas PDF: Se normalizará internamente a "epa-imagenes-0-fusionado.pdf" aunque el archivo físico tenga acento. Verificar existencia de ambas variantes en lectura.

D3. Validaciones de Puntos No Visibles: Todos los cálculos deben contemplar ausencia de marcadores opcionales. Solo maleolos y puntos de recta de referencia son obligatorios. Retornar 0 con nota explicativa si punto ausente.

D4. Precisión Numérica: Todos los valores numéricos (angulares y distancias) se redondearán a 2 decimales en presentación y exportación.

D5. Flujo de Navegación: - Pantalla principal → Captura de marcadores → Vista Anterior → Vista Posterior → Perfil Derecho → Perfil Izquierdo → Pantalla principal - Cada pantalla debe tener botón "PANTALLA PRINCIPAL" explícito

D6. Estructura de Tests: - Unit tests: un archivo por componente/función, nombrado test_{ID}.py o {component}.test.tsx - Integration tests: flujos completos de usuario, nombrados test_{ID}_integration.py - Todos los tests incluirán marcador de ticket EPPA-### en nombre o metadata

D7. Formato de Resultados: JSON en results/{EPPA-###}/{timestamp}-{commit_hash}.json con esquema:

{
  "ticket": "EPPA-###",
  "commit": "<hash>",
  "status": "passed|failed",
  "tests_total": N,
  "tests_passed": M,
  "duration_s": X,
  "notes": ""
}

D8. Convención de Commits: Formato estándar documentado en .commit-convencion.md (ver archivo separado).

Glosario de Términos de Dominio

  • Anatomía palpatoria: Identificación de estructuras óseas mediante palpación física
  • Ápex/Ápice: Punto de máxima inflexión de una curva (cervical, lumbar)
  • Calibración: Conversión de píxeles a centímetros usando grilla de referencia
  • Desbalance coronal: Desalineación en plano frontal (vista anterior/posterior)
  • Desbalance sagital: Desalineación en plano sagital (vista de perfil)
  • Genu valgo/varo: Rodillas hacia adentro/afuera
  • Maleolo: Prominencia ósea del tobillo (referencia obligatoria)
  • Plano coronal: Plano frontal que divide cuerpo en anterior/posterior
  • Plano sagital: Plano lateral que divide cuerpo en derecho/izquierdo
  • Plano horizontal/transversal: Plano que divide cuerpo en superior/inferior
  • Poplíteo: Pliegue posterior de la rodilla
  • Recta de referencia: Línea vertical trazada desde maleolos
  • Sacro: Hueso triangular en base de columna vertebral
  • Superficie corporal: Mediciones tomadas directamente sobre piel sin marcador físico
  • Tragus: Cartílago pequeño en entrada del canal auditivo
  • Trocánter: Prominencia ósea del fémur (cadera)

Riesgos Identificados

R1. Complejidad de Calibración: La conversión píxel→cm requiere precisión. Mitigación: reutilizar lógica existente de MATLAB, validar con casos conocidos.

R2. Gestión de Marcadores Opcionales: Fallas si código asume presencia de todos los marcadores. Mitigación: validaciones explícitas, tests con marcadores faltantes.

R3. Exportación Excel: Formato específico esperado por usuarios. Mitigación: generar ejemplos de referencia desde MATLAB, comparar outputs.

R4. Performance de Imágenes: Navegación/zoom en imágenes de alta resolución. Mitigación: optimización de carga, canvas HTML5 o librerías especializadas.

R5. Sincronización Python-Frontend: API calls pueden fallar o tardar. Mitigación: loading states, manejo de errores, timeouts configurables.


2025-10-06 - Análisis de Código MATLAB y Resolución de Dudas

Análisis del Código Fuente MATLAB

Archivos analizados: - old/matlab/posturografiaMARAJulio2024 (1).m - Módulo de captura de marcadores - old/matlab/InterfazMedicionFrenteJulio2024v2 (1).m - Vista Anterior - old/matlab/InterfazMedicionEspaldaJulio2024v2 (1).m - Vista Posterior - old/matlab/InterfazMedicionPerfilDerechoJulio2024 (1).m - Perfil Derecho - old/matlab/InterfazMedicionPerfilIzquierdoJulio2024 (1).m - Perfil Izquierdo - old/matlab/PantallaPpalEPPA (1).m - Pantalla Principal

Marcadores Identificados por Vista

Vista Anterior (marcadores 12-28): 1. Eminencia Frontal Media (12) 2. Espina Nasal (13) 3. Punto Mentoniano (14) 4. Tragus Izq (15) 5. Tragus Der (16) 6. Punto Acromion Izq (17) 7. Punto Acromion Der (18) 8. Escotadura Esternal (19) 9. Apéndice Xifoides (20) 10. Ombligo (21) 11. Punto Sínfisis Pubiana (22) 12. Espina Ilíaca Anterosuperior Izq (23) 13. Espina Ilíaca Anterosuperior Der (24) 14. Centro Rótula Izq (25) 15. Centro Rótula Der (26) 16. TAT Izq (27) 17. TAT Der (28)

Vista Posterior (marcadores 72-90): 1. Lóbulo Izq (72) 2. Lóbulo Der (73) 3. Punto Interno Espina Omóplato Izq (línea medial) (74) 4. Ángulo Inferior Omóplato Izq (75) 5. Punto Interno Espina Omóplato Der (línea medial) (76) 6. Ángulo Inferior Omóplato Der (77) 7. Cervical 7 (78) 8. Torácica 3 (79) 9. Torácica 7 (80) 10. Torácica 12 (81) 11. Lumbar 5 (82) 12. Espina ilíaca posterosuperior izquierda (83) 13. Espina ilíaca posterosuperior derecha (84) 14. Espina ilíaca posteroinferior izquierda (85) 15. Espina ilíaca posteroinferior derecha (86) 16. Aquiles Izq (87) 17. Aquiles Der (88) 18. Calcáneo Izq (89) 19. Calcáneo Der (90)

Vista Lateral Izquierda (marcadores 52-65): 1. Tragus Izq (52) 2. Lóbulo Oreja Izq (53) 3. Apex Cervical Izq (54) 4. Punto Acromion Izq (55) 5. Punto Epicóndilo Izq (56) 6. Base 3er Metacarpiano Izq (57) 7. Apex Lumbar Izq (58) 8. Tubérculo Ilíaco Izq (59) 9. Espina Ilíaca Anterosuperior Izq (60) 10. Espina Ilíaca Posterosuperior Izq (61) 11. Espina Ilíaca Posteroinferior Izq (62) 12. Trocánter Mayor (borde superior) Izq (63) 13. Tubérculo Cóndilo Externo Izq (64) 14. Borde anterior de Maléolo Izq (65)

Vista Lateral Derecha (marcadores 32-45): 1. Tragus Der (32) 2. Lóbulo Oreja Der (33) 3. Apex Cervical Der (34) 4. Punto Acromion Der (35) 5. Punto Epicóndilo Der (36) 6. Base 3er Metacarpiano Der (37) 7. Apex Lumbar Der (38) 8. Tubérculo Ilíaco Der (39) 9. Espina Ilíaca Anterosuperior (40) 10. Espina Ilíaca Posterosuperior (41) 11. Espina Ilíaca Posteroinferior (42) 12. Trocánter Mayor (borde superior) Der (43) 13. Tubérculo Cóndilo Externo Der (44) 14. Borde anterior de Maléolo Der (45)

Codificación de Marcadores en MATLAB

Sistema de IDs: - Vista Anterior: base 10 (marcadores 11-28, se usa marcador+10 en código línea 115) - Perfil Derecho: base 30 (marcadores 31-45, línea 151) - Perfil Izquierdo: base 50 (marcadores 51-65, línea 250) - Vista Posterior: base 70 (marcadores 71-90, línea 382)

Codificación en archivo:

tabla_res(index,1) = marcador + 100*tipo_img;
Donde tipo_img: 1=Anterior, 2=Posterior, 3=Lateral Izq, 4=Lateral Der

Ejemplo: Marcador "Tragus Izq" en Vista Anterior: - ID en UI: 15 - Guardado en archivo: 15 + 100*1 = 115

Formato de Archivos de Marcadores (.mat)

Estructura del archivo guardado (líneas 232-234):

fname = strcat('Marcadores', '_','ID','_', string(ID), '_', fecha_timestamp);
save(savefile, 'reloj', 'ID', 'tabla_res', 'index', 'cell_res')

Variables guardadas: - reloj: timestamp [año, mes, día, hora, min, seg] - ID: identificador del paciente (string) - tabla_res: matriz Nx3 [marcador_codificado, x, y] - index: número de marcadores + 1 - cell_res: cell array Nx4 {nombre, vista, x, y}

Decisión D9: Formato de archivo JSON para migración En lugar de .mat, usaremos JSON con esquema equivalente:

{
  "pacienteId": "ML",
  "timestamp": "2025-02-13T13:50:55Z",
  "vista": "anterior",
  "marcadores": [
    {
      "id": 15,
      "nombre": "Tragus Izq",
      "vista": "A",
      "x": 180.50,
      "y": 320.00,
      "codigo": 115
    }
  ]
}

Formato Exacto de Excel Exportado

Análisis de imágenes en datos/372-379/:

Estructura general (4 hojas): - Hoja1: "Vista Frente" - Hoja2: "Vista Posterior" - Hoja3: "Vista Lateral - Perfil Derecho" - Hoja4: "Vista Lateral - Perfil Izquierdo"

Formato por hoja: - Fila 1: Sujeto Nº | ML (ID del paciente) - Fila 2: (vacía) - Fila 3: Vista Frente (nombre de la vista) - Fila 4: (vacía) - Fila 5: Headers: Región | Variable | Medición | Diagnóstico - Fila 6+: Datos de mediciones

Columnas: - Región: Nombre de región anatómica (ej: "Cérvico - cefálica", "Tronco - Columna", etc.) - Variable: Nombre de variable medida (ej: "Ángulo de inclinación", "Rotación Eminencia", etc.) - Medición: Valor numérico con hasta 8 decimales (en archivo), mostrar 2 decimales en UI - Diagnóstico: Texto (ej: "neutro", "derecha", "izquierda", "Genu Valgo", "normal", "Punto no visible")

Observaciones: - No hay fórmulas embebidas - No hay gráficos en Excel - No hay metadatos adicionales (evaluador, fecha) en headers/footers - Formato simple: solo texto y números - Algunos diagnósticos incluyen valores (ej: "Calcáneo valgo + supinado")

Decisión D10: Implementación de Excel - Usar librería xlsx (SheetJS) - Replicar estructura exacta: 4 hojas con formato descrito - Headers en negrita (opcional, por estética) - Valores numéricos: guardar con precisión completa, formatear celda a 2 decimales - Sin fórmulas, sin gráficos, sin macros

Resolución de Dudas del Usuario

Q001 - Flujo de navegación: ✅ RESUELTO - Respuesta: Navegación libre, usuario puede saltar entre vistas arbitrariamente - Decisión: Mantener libertad total con botón "PANTALLA PRINCIPAL" en cada vista

Q002 - Persistencia de datos: ✅ RESUELTO - Respuesta: Organización manual de carpetas, NO hay sistema de gestión de pacientes - Decisión: Replicar workflow actual con filesystem, CRUD de pacientes va a mejoras futuras (M007)

Q003 - Captura automática vs manual: ✅ RESUELTO - Respuesta: Mantener flujo manual por ahora - Decisión: Captura automática va a mejoras futuras (M001)

Q004 - Formato Excel: ✅ RESUELTO - Análisis de imágenes datos/372-379/hoja*.png completado - Estructura documentada arriba - Sin fórmulas, sin gráficos, sin metadatos adicionales

Q005 - Marcadores obligatorios: ✅ RESUELTO (parcial) - Extraído del código MATLAB: 17 marcadores vista anterior, 19 posterior, 14 por perfil - Pendiente: identificar cuáles son obligatorios vs opcionales (requiere análisis de validaciones en código de medición) - Por ahora: asumir que maleolos son obligatorios (mencionado en crislabis.txt)

Q006 - Comportamiento "Limpiar imagen": ✅ RESUELTO - Basado en comentarios de la evaluadora clínica: parece que SÍ borra marcadores (problemático si ya marcaste 3/4 partes) - Decisión: Implementar como "reset zoom/pan" (mejora sobre MATLAB), NO borrar marcadores - Confirmación pendiente va a mejoras futuras (M003)

Q007 - Gráfico central: ✅ RESUELTO - Respuesta del usuario: Ahí se carga la imagen del paciente donde se van marcando/visualizando - No es un gráfico de variables, es el área de display de imagen

Q008 - "Marcador Detectado": ✅ RESUELTO - Análisis de código línea 206: set(handles.Mselect,'String', 'Marcador Detectado'); - Es un label que cambia a "Marcador Detectado" después de agregar marcador exitosamente - No es un link clickeable, es solo feedback visual

Q009 - Orden de marcadores: ✅ RESUELTO - Respuesta: Dejar orden fijo como aparece en MATLAB - Orden actual (extraído de código): por número de ID ascendente - No personalizable, no agrupado por región (por ahora)

Q010 - Estados de botones: ⏳ PENDIENTE - Requiere análisis más profundo del código de medición (InterfazMedicion*.m) - Por ahora: implementar lógica básica (ej: "Exportar Tabla" habilitado solo si hay mediciones)

Q011-Q014 - Cálculos y algoritmos: ⏳ PENDIENTE - Requiere análisis de archivos de medición (InterfazMedicion*.m) - Próxima sesión: extraer fórmulas de calibración, cálculos de índice, etc.

Q016 - Formato de archivos de marcadores: ✅ RESUELTO - Archivos .mat (MATLAB) - Estructura documentada arriba - Migración a JSON definida (decisión D9)

Q018-Q020 - Informe comparativo: ✅ RESUELTO - Respuesta del usuario: NO generar informe en esta iteración, la aplicación actual no lo hace - Va a mejoras futuras (M008, M009, M011)

Archivos de Mejoras Futuras

Creado docs/mejoras-futuras.md con 30 ideas de mejoras post-reingeniería, categorizadas y priorizadas en 5 fases.

Incluye mejoras mencionadas por usuario: - M001: Captura automática de pantalla (Q003) - M002: Undo/Redo (Q006) - M003: Confirmación antes de limpiar (Q006) - M007: CRUD de pacientes (Q002) - M008: Informe comparativo (Q018) - M012: Importación desde MATLAB (Q023)


Próximas Sesiones

Sesión 2 - Análisis de Cálculos Biomecánicos: - Revisar archivos InterfazMedicion*.m para extraer fórmulas - Resolver Q011 (calibración pixel→cm) - Resolver Q012 (índice de alineación postural) - Resolver Q013 (convención de signos) - Resolver Q014 (rotaciones) - Documentar algoritmos en docs/calculations-reference.md

Sesión 3 - Inicio de Implementación: - EPPA-029: Revisar convención de commits - EPPA-004: Completar definiciones de marcadores en código - EPPA-001: Implementar pantalla principal - EPPA-002: Crear layout genérico


2025-10-06 (Continuación): Extracción de Algoritmos Vista Posterior

Algoritmos Extraídos de InterfazMedicionEspaldaJulio2024v2.m

Se completó la extracción de 7 algoritmos clave de la vista posterior, documentando líneas exactas del código MATLAB:

  1. Ángulo Calcáneo Izquierdo (líneas 1499-1522)
  2. Calcula ángulo entre tendón de Aquiles y calcáneo
  3. Requiere punto medio del pliegue poplíteo
  4. Diagnóstico: valgo/varo según apertura del ángulo
  5. Fórmula: rad2deg(acos(dot(A,B)/(norm(A)*norm(B))))

  6. Ángulo Calcáneo Derecho (líneas 1673-1697)

  7. Similar a izquierdo pero con orden de vectores diferente
  8. IMPORTANTE: Criterio de diagnóstico invertido vs lado izquierdo
  9. Vector A: [XfinalDer-XCALDER, YfinalDer-YCALDER]
  10. Vector B: [XCALDER-XAQUILESDER, YCALDER-YAQUILESDER]

  11. Desbalance Coronal C7 (líneas 942-948)

  12. Distancia horizontal de vértebra C7 a línea de referencia vertical (LRV)
  13. Fórmula: FC * (XC7 - LRV_X)
  14. Positivo = derecha, Negativo = izquierda

  15. Desbalance Coronal T7 (líneas 1013-1017)

  16. Distancia horizontal de vértebra T7 a LRV
  17. Fórmula: FC * (XT7 - LRV_X)

  18. Desbalance Coronal L5 (líneas 1084-1088)

  19. Distancia horizontal de vértebra L5 a LRV
  20. Fórmula: FC * (XL5 - LRV_X)

  21. Ángulo Pelvis Posterior (líneas 1238-1251)

  22. Entre espinas ilíacas posterosuperiores (EIPS)
  23. Algoritmo usa función angle() compleja de MATLAB
  24. Convención diferente a vista anterior

    if Y1 > Y2
        gradosPelvis = -(180 - ((angle((X1-X2)+(Y1-Y2)*i))*180 / pi))
    else
        gradosPelvis = 180 - abs(angle((X1-X2)+(Y1-Y2)*i) * 180 / pi)
    end
    

  25. Ángulo Cabeza Posterior (líneas 866-890)

  26. Entre lóbulos de orejas
  27. Convención de signos según lado que cae
    if Y1 < Y2
        A=[X2-X1 Y1-Y1]; B=[X2-X1 Y2-Y1];
        gradosCabeza = rad2deg(acos(dot(A,B)/(norm(A)*norm(B))));
    else
        A=[X1-X2 Y2-Y2]; B=[X1-X2 Y1-Y2];
        gradosCabeza = -rad2deg(acos(dot(A,B)/(norm(A)*norm(B))));
    end
    

Archivos Creados

  • matlab_validation/generate_test_cases_posterior.m: Script completo con 7 casos de prueba extraídos con precisión de 15 decimales
  • Los algoritmos están listos para uso, solo faltan datos de muestra reales de un paciente

Observaciones Técnicas

  1. Ángulo calcáneo: Requiere cálculo geométrico previo del punto medio del pliegue poplíteo. En MATLAB original se hace con ginput manual (líneas 1402-1437 para izquierdo, 1576-1611 para derecho). El punto medio se calcula como:

    Mitad = DistPopliIzq/2;
    alfa = angle((x1-x2)+(y1-y2)*i);
    X = abs(Mitad*cos(alfa));
    Y = abs(Mitad*sin(alfa));
    XfinalIzq = X+x1; YfinalIzq = y1-Y;
    

  2. Convención de signos: Vista posterior tiene criterios diagnósticos diferentes a vista anterior:

  3. Calcáneo izquierdo: si XAQUILESIZQ < XCALIZQ → varo (negativo)
  4. Calcáneo derecho: si XAQUILESDER < XCALDER → valgo (positivo)

  5. Línea de referencia vertical (LRV):

  6. Se calcula como punto medio entre maleolos en eje X (línea 310-311)
  7. Variable: handles.p1x

  8. Factor de conversión (FC):

  9. 10 cm / distancia en píxeles de cuadrícula de calibración (línea 1809)
  10. Guardado en handles.FC

Archivos Actualizados

  • matlab_validation/README.md: Actualizado con lista de 7 algoritmos extraídos
  • docs/matlab-python-validation.md: Actualizado con estado de vista posterior (Script listo, pendiente datos)

Próximo Paso

Completar puntos de muestra con datos reales de un paciente para generar el JSON de casos de prueba. El script está completo y funcionará con solo llenar las coordenadas en las líneas 26-44 del archivo generate_test_cases_posterior.m.