\documentclass[11pt,a4paper,oneside]{report} \input{preamble} \begin{document} \makecover \chapter*{Resumen ejecutivo} Este documento define la \textbf{estrategia y la matriz de pruebas} del monorepo IPSExtractor: API Gateway, extraction/workers ARQ, cleaning, count-api, bot-descarga (API + agent Selenium), PostgreSQL, Redis, MinIO y la aplicaci\'on de escritorio. \begin{itemize} \item \textbf{Objetivo:} cerrar el gap entre unitarias aisladas y un plan trazable (UT / IT / E2E / ST / CH) con SLOs y scripts k6. \item \textbf{Arquitectura:} microservicios + API Gateway + cola ARQ + claim del bot (cap.~\ref{ch:arquitectura}). \item \textbf{Entorno de referencia:} host Ubuntu 8\,GiB compartido (sec.~\ref{sec:host-pruebas}); perfiles \texttt{shared8g} / \texttt{lab}. \item \textbf{Estado campa\~na:} smoke PASS; ST-GW-01 PASS; ST-BOT-01 PASS (reintento); ST-EXT-02 LLM medido --- detalle en el \emph{Informe de Pruebas}. \item \textbf{Volumen 100k/mes:} modelo y veredicto en el PDF \emph{Capacidad 100k}. \end{itemize} \tableofcontents \clearpage \input{sections/01_introduccion} \input{sections/02_arquitectura} \input{sections/03_estrategia} \input{sections/04_unitarias} \input{sections/05_integracion} \input{sections/06_e2e} \input{sections/07_estres} \input{sections/08_resiliencia} \input{sections/09_datos_entornos} \input{sections/10_herramientas_ci} \input{sections/11_cronograma_aceptacion} \input{sections/12_informe_2026_07_13} \appendix \chapter{Glosario} \begin{description}[style=nextline,leftmargin=2.2cm,labelwidth=2cm] \item[ARQ] Cola as\'incrona de workers de extracci\'on sobre Redis. \item[Claim] Operaci\'on at\'omica que asigna un job \texttt{pending} a un worker. \item[Gateway] \texttt{api\_gateway}, \'unica puerta HTTP expuesta en el host (:8189). \item[Imaging] Portal web automatizado por Selenium en el PC del bot. \item[k6] Herramienta profesional de pruebas de carga (Grafana Labs). \item[MinIO] Almacenamiento S3-compatible para Excel y PDFs del bot. \item[SLO] Objetivo de nivel de servicio (latencia, error rate, etc.). \end{description} \chapter{Checklist de release} \begin{enumerate} \item Unitarios verdes: bots, bot-descarga store, Vitest, \texttt{go test}. \item Migraciones Alembic en BD limpia. \item Smoke Compose: \texttt{GET /health/live} y \texttt{GET /health}. \item E2E-01 a E2E-05 ejecutados en staging (E2E-05 con agent real si hay Imaging). \item Al menos ST-GW-01, ST-BOT-01, ST-COUNT-01 y ST-EXT-01 con umbrales cumplidos. \item Informe de resultados + PDF Capacidad 100k actualizados si aplica. \item Entorno citado: hostname, \texttt{free -h}, \texttt{docker stats}, perfil k6. \item Sin secretos hardcodeados en compose de prueba. \end{enumerate} \chapter{Mapa de rutas relevantes} \section*{Gateway (\texttt{:8189})} \begin{itemize} \item \texttt{GET /health/live}, \texttt{GET /health} \item Proxy: \texttt{/tasks/*}, \texttt{/cleaning/*}, \texttt{/count/*}, \texttt{/bot-descarga/*} \item Timeout JSON 30\,s; uploads (incl.\ \texttt{POST /bot-descarga/jobs}) 600\,s \end{itemize} \section*{Bot-descarga API (\texttt{:8200}, v\'ia gateway)} \begin{itemize} \item Workers: \texttt{POST /workers/register}, \texttt{POST /workers/heartbeat} \item Workers: \texttt{GET /workers}, \texttt{GET /workers/me/pending} \item Jobs: \texttt{POST /jobs}, \texttt{GET/PATCH /jobs/\{id\}}, events, cancel, file, files MinIO \end{itemize} \end{document}