feat: Update docker-compose configuration to use environment variables for sensitive data, enhance testing documentation with new LaTeX files for capacity planning, and refine README for clarity on compilation and testing processes.

This commit is contained in:
erik
2026-07-17 08:32:00 -05:00
parent e47ef4f8c6
commit dc3fcc2280
89 changed files with 5331 additions and 1210 deletions
+96 -76
View File
@@ -1,77 +1,97 @@
\babel@toc {spanish}{}\relax
\contentsline {chapter}{\numberline {1}Resumen ejecutivo}{5}{chapter.1}%
\contentsline {section}{\numberline {1.1}Veredicto global}{5}{section.1.1}%
\contentsline {section}{\numberline {1.2}KPIs de la campa\~na}{5}{section.1.2}%
\contentsline {section}{\numberline {1.3}Respuesta directa: 100\,000 facturas/mes}{5}{section.1.3}%
\contentsline {section}{\numberline {1.4}Riesgo principal}{6}{section.1.4}%
\contentsline {chapter}{\numberline {2}Objeto y alcance}{7}{chapter.2}%
\contentsline {section}{\numberline {2.1}Objeto}{7}{section.2.1}%
\contentsline {section}{\numberline {2.2}Alcance incluido}{7}{section.2.2}%
\contentsline {section}{\numberline {2.3}Fuera de alcance de esta campa\~na}{7}{section.2.3}%
\contentsline {section}{\numberline {2.4}Definici\'on de factura}{7}{section.2.4}%
\contentsline {chapter}{\numberline {3}Entorno bajo prueba}{8}{chapter.3}%
\contentsline {section}{\numberline {3.1}Hardware y sistema}{8}{section.3.1}%
\contentsline {section}{\numberline {3.2}Baseline de memoria (2026-07-13)}{8}{section.3.2}%
\contentsline {section}{\numberline {3.3}Salud del stack}{8}{section.3.3}%
\contentsline {chapter}{\numberline {4}Metodolog\'ia}{10}{chapter.4}%
\contentsline {section}{\numberline {4.1}Tipos de prueba}{10}{section.4.1}%
\contentsline {section}{\numberline {4.2}Herramientas}{10}{section.4.2}%
\contentsline {section}{\numberline {4.3}SLOs perfil \texttt {shared8g}}{10}{section.4.3}%
\contentsline {section}{\numberline {4.4}Comandos representativos}{10}{section.4.4}%
\contentsline {chapter}{\numberline {5}Resultados --- pruebas unitarias}{11}{chapter.5}%
\contentsline {section}{\numberline {5.1}Scorecard}{11}{section.5.1}%
\contentsline {section}{\numberline {5.2}Cobertura agent}{11}{section.5.2}%
\contentsline {section}{\numberline {5.3}Cobertura API store}{11}{section.5.3}%
\contentsline {section}{\numberline {5.4}Cobertura count-api}{11}{section.5.4}%
\contentsline {chapter}{\numberline {6}Resultados --- humo y funcional}{13}{chapter.6}%
\contentsline {section}{\numberline {6.1}Humo gateway}{13}{section.6.1}%
\contentsline {section}{\numberline {6.2}Funcional E2E-07 (worker offline $\rightarrow $ 409)}{13}{section.6.2}%
\contentsline {section}{\numberline {6.3}Script preparado}{13}{section.6.3}%
\contentsline {chapter}{\numberline {7}Resultados --- pruebas de carga}{14}{chapter.7}%
\contentsline {section}{\numberline {7.1}Tabla consolidada}{14}{section.7.1}%
\contentsline {section}{\numberline {7.2}ST-GW-01}{14}{section.7.2}%
\contentsline {section}{\numberline {7.3}ST-BOT-01 --- comparativa}{14}{section.7.3}%
\contentsline {section}{\numberline {7.4}Throughput gateway}{14}{section.7.4}%
\contentsline {chapter}{\numberline {8}Capacidad: 100\,000 facturas al mes}{16}{chapter.8}%
\contentsline {section}{\numberline {8.1}Traducci\'on del objetivo}{16}{section.8.1}%
\contentsline {section}{\numberline {8.2}Modelo por etapa}{16}{section.8.2}%
\contentsline {section}{\numberline {8.3}Interpretaci\'on}{16}{section.8.3}%
\contentsline {section}{\numberline {8.4}Veredicto}{17}{section.8.4}%
\contentsline {section}{\numberline {8.5}Requisitos m\'inimos sugeridos para 100k/mes}{17}{section.8.5}%
\contentsline {chapter}{\numberline {9}An\'alisis y hallazgos}{18}{chapter.9}%
\contentsline {section}{\numberline {9.1}Hallazgos}{18}{section.9.1}%
\contentsline {section}{\numberline {9.2}Scorecard global}{18}{section.9.2}%
\contentsline {section}{\numberline {9.3}Limitaciones}{18}{section.9.3}%
\contentsline {chapter}{\numberline {10}Conclusiones y recomendaciones}{19}{chapter.10}%
\contentsline {section}{\numberline {10.1}Conclusiones}{19}{section.10.1}%
\contentsline {section}{\numberline {10.2}Recomendaciones}{19}{section.10.2}%
\contentsline {section}{\numberline {10.3}Pr\'oxima campa\~na sugerida}{19}{section.10.3}%
\contentsline {chapter}{\numberline {11}Anexos}{20}{chapter.11}%
\contentsline {section}{\numberline {11.1}Datos fuente}{20}{section.11.1}%
\contentsline {section}{\numberline {11.2}Extracto ST-GW-01}{20}{section.11.2}%
\contentsline {section}{\numberline {11.3}Extracto ST-BOT-01 \#2}{20}{section.11.3}%
\contentsline {section}{\numberline {11.4}Unitarias}{20}{section.11.4}%
\contentsline {section}{\numberline {11.5}Scripts}{20}{section.11.5}%
\contentsline {section}{\numberline {11.6}Reproducibilidad}{21}{section.11.6}%
\contentsline {chapter}{\numberline {12}Count-api: qu\'e eval\'ua cada prueba}{22}{chapter.12}%
\contentsline {section}{\numberline {12.1}Pipeline bajo prueba}{22}{section.12.1}%
\contentsline {section}{\numberline {12.2}Resultado global count-api}{22}{section.12.2}%
\contentsline {section}{\numberline {12.3}Features: qu\'e se eval\'ua (con ejemplo)}{23}{section.12.3}%
\contentsline {subsection}{\numberline {12.3.1}TestExtractRowFeaturesServiceTablePattern --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.1}%
\contentsline {subsection}{\numberline {12.3.2}TestBuildFeaturesContinuation --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.2}%
\contentsline {subsection}{\numberline {12.3.3}TestExtractRowFeaturesHeaderKeyword --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.3}%
\contentsline {subsection}{\numberline {12.3.4}TestExtractRowFeaturesServiceCode --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.4}%
\contentsline {subsection}{\numberline {12.3.5}TestExtractRowFeaturesNoTablePattern --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.5}%
\contentsline {subsection}{\numberline {12.3.6}TestBuildFeatureRowsEmpty --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.6}%
\contentsline {subsection}{\numberline {12.3.7}TestFeatureCount --- \textcolor {passgreen}{\textbf {PASS}}}{23}{subsection.12.3.7}%
\contentsline {section}{\numberline {12.4}Clustering: qu\'e se eval\'ua (con ejemplo)}{24}{section.12.4}%
\contentsline {subsection}{\numberline {12.4.1}TestClusterRowsTwoBands --- \textcolor {passgreen}{\textbf {PASS}}}{24}{subsection.12.4.1}%
\contentsline {subsection}{\numberline {12.4.2}TestClusterRowsSameBand --- \textcolor {passgreen}{\textbf {PASS}}}{24}{subsection.12.4.2}%
\contentsline {subsection}{\numberline {12.4.3}TestClusterRowsEmpty --- \textcolor {passgreen}{\textbf {PASS}}}{24}{subsection.12.4.3}%
\contentsline {subsection}{\numberline {12.4.4}TestClusterRowsNoiseMinSamples --- \textcolor {passgreen}{\textbf {PASS}}}{24}{subsection.12.4.4}%
\contentsline {section}{\numberline {12.5}Pruebas con PDFs reales}{24}{section.12.5}%
\contentsline {subsection}{\numberline {12.5.1}Fixtures}{24}{subsection.12.5.1}%
\contentsline {subsection}{\numberline {12.5.2}TestProcessPDFTimingFixtures}{25}{subsection.12.5.2}%
\contentsline {subsection}{\numberline {12.5.3}Script HTTP \texttt {measure\_count\_latency}}{25}{subsection.12.5.3}%
\contentsline {section}{\numberline {12.6}Resultados de latencia HTTP (medidos)}{25}{section.12.6}%
\contentsline {section}{\numberline {12.7}C\'omo reproducir}{25}{section.12.7}%
\contentsline {chapter}{\numberline {1}Resumen ejecutivo}{4}{chapter.1}%
\contentsline {section}{\numberline {1.1}Veredicto global}{4}{section.1.1}%
\contentsline {section}{\numberline {1.2}KPIs de la campa\~na}{4}{section.1.2}%
\contentsline {section}{\numberline {1.3}Capacidad 100k/mes (resumen)}{5}{section.1.3}%
\contentsline {section}{\numberline {1.4}Riesgo principal}{5}{section.1.4}%
\contentsline {section}{\numberline {1.5}Alcance de esta campa\~na}{5}{section.1.5}%
\contentsline {chapter}{\numberline {2}Arquitectura y patrones (contexto)}{6}{chapter.2}%
\contentsline {section}{\numberline {2.1}Vista de componentes}{6}{section.2.1}%
\contentsline {section}{\numberline {2.2}Patrones de dise\~no}{7}{section.2.2}%
\contentsline {section}{\numberline {2.3}Pipeline de negocio}{7}{section.2.3}%
\contentsline {section}{\numberline {2.4}Definici\'on de factura}{8}{section.2.4}%
\contentsline {chapter}{\numberline {3}Entorno bajo prueba}{9}{chapter.3}%
\contentsline {section}{\numberline {3.1}Hardware y sistema}{9}{section.3.1}%
\contentsline {section}{\numberline {3.2}Baseline de memoria (2026-07-13)}{9}{section.3.2}%
\contentsline {section}{\numberline {3.3}Salud del stack}{9}{section.3.3}%
\contentsline {chapter}{\numberline {4}C\'omo leer este informe}{11}{chapter.4}%
\contentsline {section}{\numberline {4.1}Plantilla de interpretaci\'on}{11}{section.4.1}%
\contentsline {section}{\numberline {4.2}Leyenda de estados}{11}{section.4.2}%
\contentsline {section}{\numberline {4.3}Perfil de carga \texttt {shared8g}}{11}{section.4.3}%
\contentsline {section}{\numberline {4.4}Herramientas}{11}{section.4.4}%
\contentsline {section}{\numberline {4.5}Mapa de cap\'itulos de resultados}{12}{section.4.5}%
\contentsline {chapter}{\numberline {5}Resultados --- pruebas unitarias}{13}{chapter.5}%
\contentsline {section}{\numberline {5.1}Qu\'e eval\'uan}{13}{section.5.1}%
\contentsline {section}{\numberline {5.2}Scorecard}{13}{section.5.2}%
\contentsline {section}{\numberline {5.3}Cobertura agent Selenium}{13}{section.5.3}%
\contentsline {section}{\numberline {5.4}Cobertura API \texttt {bot-descarga} (orquestador)}{14}{section.5.4}%
\contentsline {section}{\numberline {5.5}Cobertura count-api}{14}{section.5.5}%
\contentsline {section}{\numberline {5.6}Cobertura desktop (Vitest)}{14}{section.5.6}%
\contentsline {chapter}{\numberline {6}Resultados --- humo y funcional}{15}{chapter.6}%
\contentsline {section}{\numberline {6.1}Qu\'e eval\'uan}{15}{section.6.1}%
\contentsline {section}{\numberline {6.2}Humo gateway}{15}{section.6.2}%
\contentsline {section}{\numberline {6.3}Funcional E2E-07 (worker offline $\rightarrow $ 409)}{15}{section.6.3}%
\contentsline {section}{\numberline {6.4}Scripts}{16}{section.6.4}%
\contentsline {chapter}{\numberline {7}Resultados --- pruebas de carga}{17}{chapter.7}%
\contentsline {section}{\numberline {7.1}Qu\'e eval\'uan}{17}{section.7.1}%
\contentsline {section}{\numberline {7.2}Tabla consolidada}{17}{section.7.2}%
\contentsline {section}{\numberline {7.3}ST-GW-01}{17}{section.7.3}%
\contentsline {section}{\numberline {7.4}ST-BOT-01 --- comparativa}{18}{section.7.4}%
\contentsline {section}{\numberline {7.5}Throughput gateway}{19}{section.7.5}%
\contentsline {chapter}{\numberline {8}Count-api: qu\'e eval\'ua cada prueba}{20}{chapter.8}%
\contentsline {section}{\numberline {8.1}Qu\'e eval\'ua / resultado / significado}{20}{section.8.1}%
\contentsline {section}{\numberline {8.2}Pipeline bajo prueba}{20}{section.8.2}%
\contentsline {section}{\numberline {8.3}Resultado global count-api}{21}{section.8.3}%
\contentsline {section}{\numberline {8.4}Features: qu\'e se eval\'ua (con ejemplo)}{21}{section.8.4}%
\contentsline {subsection}{\numberline {8.4.1}TestExtractRowFeaturesServiceTablePattern --- \textcolor {passgreen}{\textbf {PASS}}}{21}{subsection.8.4.1}%
\contentsline {subsection}{\numberline {8.4.2}TestBuildFeaturesContinuation --- \textcolor {passgreen}{\textbf {PASS}}}{21}{subsection.8.4.2}%
\contentsline {subsection}{\numberline {8.4.3}TestExtractRowFeaturesHeaderKeyword --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.4.3}%
\contentsline {subsection}{\numberline {8.4.4}TestExtractRowFeaturesServiceCode --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.4.4}%
\contentsline {subsection}{\numberline {8.4.5}TestExtractRowFeaturesNoTablePattern --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.4.5}%
\contentsline {subsection}{\numberline {8.4.6}TestBuildFeatureRowsEmpty --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.4.6}%
\contentsline {subsection}{\numberline {8.4.7}TestFeatureCount --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.4.7}%
\contentsline {section}{\numberline {8.5}Clustering: qu\'e se eval\'ua (con ejemplo)}{22}{section.8.5}%
\contentsline {subsection}{\numberline {8.5.1}TestClusterRowsTwoBands --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.5.1}%
\contentsline {subsection}{\numberline {8.5.2}TestClusterRowsSameBand --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.5.2}%
\contentsline {subsection}{\numberline {8.5.3}TestClusterRowsEmpty --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.5.3}%
\contentsline {subsection}{\numberline {8.5.4}TestClusterRowsNoiseMinSamples --- \textcolor {passgreen}{\textbf {PASS}}}{22}{subsection.8.5.4}%
\contentsline {section}{\numberline {8.6}Pruebas con PDFs reales}{23}{section.8.6}%
\contentsline {subsection}{\numberline {8.6.1}Fixtures}{23}{subsection.8.6.1}%
\contentsline {subsection}{\numberline {8.6.2}TestProcessPDFTimingFixtures}{23}{subsection.8.6.2}%
\contentsline {subsection}{\numberline {8.6.3}Script HTTP \texttt {measure\_count\_latency}}{23}{subsection.8.6.3}%
\contentsline {section}{\numberline {8.7}Resultados agregados (23 PDFs)}{23}{section.8.7}%
\contentsline {section}{\numberline {8.8}Resultados de latencia HTTP}{24}{section.8.8}%
\contentsline {section}{\numberline {8.9}Detalle por archivo}{25}{section.8.9}%
\contentsline {section}{\numberline {8.10}C\'omo reproducir}{25}{section.8.10}%
\contentsline {chapter}{\numberline {9}Extracci\'on LLM: bench de latencia (ST-EXT-02)}{26}{chapter.9}%
\contentsline {section}{\numberline {9.1}Qu\'e eval\'ua / resultado / significado}{26}{section.9.1}%
\contentsline {section}{\numberline {9.2}C\'omo ejecutar}{26}{section.9.2}%
\contentsline {section}{\numberline {9.3}Resultados (2026-07-17)}{27}{section.9.3}%
\contentsline {section}{\numberline {9.4}Lectura para capacidad}{27}{section.9.4}%
\contentsline {chapter}{\numberline {10}Cola ARQ: bench ST-EXT-01 (LLM mock)}{28}{chapter.10}%
\contentsline {section}{\numberline {10.1}Qu\'e eval\'ua / resultado / significado}{28}{section.10.1}%
\contentsline {section}{\numberline {10.2}Condiciones de la corrida}{28}{section.10.2}%
\contentsline {section}{\numberline {10.3}Resultados}{29}{section.10.3}%
\contentsline {section}{\numberline {10.4}Lectura}{29}{section.10.4}%
\contentsline {chapter}{\numberline {11}Count-api bajo carga (ST-COUNT-01)}{30}{chapter.11}%
\contentsline {section}{\numberline {11.1}Qu\'e eval\'ua / resultado / significado}{30}{section.11.1}%
\contentsline {section}{\numberline {11.2}Condiciones}{30}{section.11.2}%
\contentsline {section}{\numberline {11.3}Resultados}{30}{section.11.3}%
\contentsline {section}{\numberline {11.4}Lectura}{30}{section.11.4}%
\contentsline {chapter}{\numberline {12}An\'alisis y hallazgos}{32}{chapter.12}%
\contentsline {section}{\numberline {12.1}Hallazgos}{32}{section.12.1}%
\contentsline {section}{\numberline {12.2}Scorecard global}{32}{section.12.2}%
\contentsline {section}{\numberline {12.3}Limitaciones}{32}{section.12.3}%
\contentsline {chapter}{\numberline {13}Conclusiones y recomendaciones}{34}{chapter.13}%
\contentsline {section}{\numberline {13.1}Conclusiones}{34}{section.13.1}%
\contentsline {section}{\numberline {13.2}Recomendaciones}{34}{section.13.2}%
\contentsline {section}{\numberline {13.3}Documentos relacionados}{34}{section.13.3}%
\contentsline {chapter}{\numberline {14}Anexos}{35}{chapter.14}%
\contentsline {section}{\numberline {14.1}Datos fuente}{35}{section.14.1}%
\contentsline {section}{\numberline {14.2}Extracto ST-GW-01}{35}{section.14.2}%
\contentsline {section}{\numberline {14.3}Extracto ST-BOT-01 \#2}{35}{section.14.3}%
\contentsline {section}{\numberline {14.4}Unitarias}{35}{section.14.4}%
\contentsline {section}{\numberline {14.5}Scripts}{35}{section.14.5}%
\contentsline {section}{\numberline {14.6}Extracto ST-EXT-01}{36}{section.14.6}%
\contentsline {section}{\numberline {14.7}Documentos hermanos}{36}{section.14.7}%
\contentsline {section}{\numberline {14.8}Reproducibilidad}{36}{section.14.8}%