Plan por fases¶
Supuestos de capacidad¶
Verificar antes de comprometer fechas
- 20 horas semanales, dato dado
- Una persona, supuesto no confirmado. Si son dos personas a 10 horas cada una, las estimaciones se degradan por coordinación y cambian
- Estimaciones de un tercero sin visibilidad sobre la fluidez real del equipo: banda de error ±50%
Total hasta fase 5: ~355 horas ≈ 18 semanas ≈ 4 meses y medio. Con la banda de error: entre 3 y 7 meses.
Cronograma¶
gantt
title Plan de implementación (20 h/semana)
dateFormat YYYY-MM-DD
axisFormat %b
section Base
F0 Fundaciones :f0, 2026-10-01, 10d
section Carril A
F1 Ingesta mínima :f1, after f0, 28d
F2 Filtros y decisión :f2, after f1, 14d
section Comercial
F3 Carril C y mapa :f3, after f2, 21d
section Inteligencia
F4 Carril B :f4, after f3, 35d
F5 Scoring LLM :f5, after f4, 14d
section Continuo
F6 Fuentes adicionales :f6, after f5, 21d
Fase 0 — Fundaciones · ~25 h¶
Repo, esqueleto Django, Postgres, MkDocs desplegado, registro de fuentes vacío, CI que corre tests.
Criterio de salida: python manage.py migrate funciona, el admin abre, el sitio de
docs se publica, y hay un test que corre en CI.
- Repo con estructura de proyecto Django
- Postgres local y de producción
- Modelos
fuentes,ingestas,avisosmigrados - MkDocs con despliegue automático
- CI con pytest
Fase 1 — Carril A mínimo · ~80 h¶
Tres fuentes sin autenticación: Banco Mundial procnotices, BID CKAN, TED.
Esta es la fase que valida toda la arquitectura. Si el contrato de normalización aguanta tres fuentes de forma distinta, aguanta las demás.
- Bucle genérico de ingesta que lee de
fuentes - Normalizador BM + fixture + test
- Normalizador BID + fixture + test
- Normalizador TED + fixture + test
- Deduplicación por
fuente_id + id_nativoy hash de contenido - Comando
renormalizarsobre el crudo guardado - Reporte en texto plano por correo
- Arrancar ingesta silenciosa del carril B (Projects API), aunque no se reporte
Por qué la ingesta del carril B arranca acá
Acumular es gratis y el diff necesita historial. Si esperamos a la fase 4 para empezar a guardar snapshots, la fase 4 arranca ciega.
Criterio de salida: un reporte real, con cinco ítems o menos, que alguien lea y encuentre útil.
Fase 2 — Filtros y decisión · ~40 h¶
- Filtros duros con códigos de razón
- Asignación de
escalonen normalización - Filtro por
categoria_adquisicion - Cálculo de
dias_ventanay alerta por ventana corta - Tabla
decisionesexpuesta en el admin de Django - Panel de calibración: cuántos descarta cada filtro
Criterio de salida: la alerta suena entre dos y tres veces al mes. Si suena más, los filtros están flojos.
Fase 3 — Carril C y mapa de base instalada · ~60 h¶
La fase que puede pagar el proyecto
No necesita historial: los datos ya existen. Produce dos entregables comerciales inmediatos, antes de que el carril A gane una sola licitación.
- Ingesta de adjudicaciones (mismos endpoints, distinto tipo de aviso)
- Carga histórica hacia atrás, varios años
- Extracción de WMO Radar Database para países AR IV
- Tablas
radares,empresas,adjudicaciones - Vista: países AR IV con dos o más fabricantes o bandas
- Vista: primes activos en la región, ordenados por volumen adjudicado
- Comando
check_debarmentcontra el dataset de sancionados del BID - Regla de ventana T+3 a T+9 sobre adjudicaciones nuevas
Entregables comerciales:
- Lista de países objetivo para integración, ordenada por heterogeneidad del parque
- Lista de fabricantes a quienes ofrecerse como socio local, con evidencia de su actividad regional
Criterio de salida: ambas listas existen, están revisadas a mano, y contestan la pregunta abierta de si nuestro stack coincide con la base instalada real de la región.
Fase 4 — Carril B · ~110 h¶
La fase más larga. Para acá ya hay meses de snapshots acumulados desde la fase 1.
- Projects API: snapshot semanal y versionado
- Motor de diff: qué constituye cambio reportable
- Documents API con
qtermsobre taxonomía técnica - Descarga y extracción de PDF, con caché por hash
- Filtro de dos etapas: metadata barata antes de extraer
- Vinculación
id_proyecto_padreentre carriles - Ingesta de informes del Comité de Huracanes y páginas AR IV
- Sección "Movimientos de cartera" en el reporte
Criterio de salida: la sección de movimientos de cartera sale vacía muchas semanas. Si sale llena todas las semanas, el diff está mal calibrado.
Fase 5 — Scoring con LLM · ~40 h¶
- Prompt versionado de dictamen estructurado
- Caché por hash de documento + versión de prompt
- Detección de señales de pliego dirigido
- Extracción de campos de decisión faltantes desde el pliego
- Score de reglas con pesos configurables
Criterio de salida: al menos la mitad de lo que llega al reporte merece lectura completa del pliego.
Fase 6 — Fuentes adicionales · continuo¶
Por orden de valor esperado:
- UNGM, preferentemente vía suscripción Pro y parseo del digest
- IATI Datastore, con Full Access solicitado desde fase 1 por la demora de aprobación
- SAM.gov
- Portales nacionales OCDS de la región
- Búsqueda web residual
Trámites que conviene arrancar en fase 0
La clave de SAM.gov y la solicitud de Full Access de IATI no dependen de nosotros y tienen demora. Pedirlas al principio aunque se usen en fase 6.
Qué NO se construye¶
Registrado explícitamente para no reabrirlo cada mes:
- Modelo de machine learning de scoring — no hay datos y no los habrá
- Frontend propio antes de fase 6 — el admin de Django alcanza
- Orquestador de flujos — ver ADR 0003
- Integración con CRM — primero hay que tener qué integrar
- Cobertura mundial — el alcance es AR IV más lo que los bancos financien ahí