\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}