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
@@ -0,0 +1,91 @@
\chapter{Veredicto}
\label{ch:veredicto}
\section{La respuesta corta}
\begin{center}
\renewcommand{\arraystretch}{1.35}
\begin{tabular}{@{}p{4.2cm}p{2.2cm}p{6.5cm}@{}}
\toprule
\textbf{Escenario} & \textbf{\textquestiondown 100k?} & \textbf{Por qu\'e} \\
\midrule
Host \textbf{actual} (compartido)
& \parcial\ / \fail
& Pipeline $\approx$ OCR $\sim$100--325/h.
Piso $\sim$100 $<$ 139 (no garantizado). \\
Host \textbf{dedicado} + dimensionado, 24$\times$7
& \pass\ \emph{si}
& Estimado $\sim$400/h $>$ 139/h si OCR/agents/LLM OK. \\
Misma infra, jornada 8\,h (570/h)
& \fail
& 400 $<$ 570: falta m\'as OCR, m\'as agents Selenium y cuota LLM. \\
\bottomrule
\end{tabular}
\end{center}
\callout{\large Resumen para decidir}{%
\textbf{Hoy (host compartido): 100k/mes 24$\times$7 no est\'a garantizado}
(pipeline $\approx$ cuello OCR; piso $\sim$100 $<$ 139).\\
\textbf{Con host dedicado + OCR dimensionado: s\'i plausible a 24$\times$7.}\\
\textbf{Jornada 8\,h: no} sin escalar m\'as.\\[0.35em]
\footnotesize El pipeline \textbf{no} se midi\'o E2E a 100k. Ritmo = $\min$ de etapas medidas
(cap.~\ref{ch:modelo}).
}
\begin{figure}[H]
\centering
\begin{tikzpicture}
\begin{axis}[
xbar,
width=0.78\textwidth,
height=4.6cm,
xlabel={Facturas / hora que aguanta el pipeline},
symbolic y coords={dedicado,actual},
ytick=data,
yticklabels={\empty,\empty},
xmin=0, xmax=650,
enlarge y limits=0.45,
bar width=22pt,
bar shift=0pt,
grid=major,
major grid style={ipsgrey!25},
clip=false,
]
\addplot[fill=failred!75, draw=failred] coordinates {(100,actual)};
\addplot[fill=passgreen!75, draw=passgreen] coordinates {(400,dedicado)};
\node[anchor=east, font=\small\bfseries, align=right]
at (axis cs:-5,actual) {Host actual\\(hoy)};
\node[anchor=east, font=\small\bfseries, align=right]
at (axis cs:-5,dedicado) {Host dedicado\\(estimado)};
\node[anchor=west, font=\normalsize\bfseries] at (axis cs:110,actual) {$\sim$100};
\node[anchor=west, font=\normalsize\bfseries] at (axis cs:410,dedicado) {$\sim$400};
\draw[ipsblue, ultra thick, dashed]
(axis cs:139,actual) -- (axis cs:139,dedicado);
\node[font=\scriptsize\bfseries, text=ipsblue, anchor=south, align=center]
at (axis cs:139,dedicado) {meta 139};
\draw[warnorange, ultra thick, dashed]
(axis cs:570,actual) -- (axis cs:570,dedicado);
\node[font=\scriptsize\bfseries, text=warnorange, anchor=south, align=center]
at (axis cs:570,dedicado) {meta 570};
\end{axis}
\end{tikzpicture}
\caption{Barras = capacidad. L\'ineas = metas. Rojo no llega a 139; verde llega a 139 pero no a 570.}
\label{fig:veredicto-brecha}
\end{figure}
\section{Si hoy no est\'a garantizado: qu\'e hace falta}
\begin{enumerate}
\item \textbf{Host dedicado} (sin MLflow/Airflow/n8n); RAM $\geq$16--32\,GiB.
\item \textbf{OCR con margen} hasta sostener $\geq$139 fact/h bajo carga real.
\item \textbf{LLM async} (\texttt{ASYNC\_QUEUE=true}, 1--2 workers; ya $\approx$506/h medidos).
\item \textbf{Agent Selenium:} 1 PC basta para 139/h; $N$ PCs para 570/h.
\item \textbf{Presupuesto LLM} $\approx$ USD\,2\,570/mes si pasan 100k a extracci\'on.
\item \textbf{Validar E2E} de cientos de PDFs punta a punta (a\'un pendiente).
\end{enumerate}
\section{Por meta operativa}
\begin{description}
\item[100k/mes en 24$\times$7 ($\geq$139 fact/h)]
Plausible en host dedicado. En compartido depende de que el OCR no se quede en el piso $\sim$100.
\item[100k/mes en jornada 8\,h ($\geq$570 fact/h)]
No con el estimado dedicado ($\sim$400). Escalar OCR, agents Selenium y LLM, y re-medir.
\end{description}