BOQ -> borrador de programa (Primavera P6)
Un planificador que comienza una línea base escribe cada actividad, la vincula y la carga con costes manualmente desde el BOQ. Esta skill automatiza ese primer borrador: una actividad por oficio y ubicación, lógica de programas reales, dinero del BOQ en cada actividad, en un XER que P6 importa. El planificador es dueño de las fechas — el borrador es el esqueleto que corrigen, no un pronóstico.
Lo que necesita
- Un BOQ tasado: .xlsx o .csv con descripción + cantidad + importe (o precio unitario). Encabezados como columna o como filas de texto arriba de las líneas, números de partida (1, 1.2, 1.2.3) válidos. Encabezados en inglés, portugués o español.
- Python 3 y
data/rates.json(tarifas y lógica extraídas). Nada más.
Flujo de trabajo (Claude ejecuta cada paso; el planificador valida la clasificación y responde preguntas)
1. Leer el BOQ
py scripts/read_boq.py <boq.xlsx|.csv> --out outputs/<job>
Escribe brief.csv (cada línea con su ruta de capítulo y una palabra clave sugerida) y types.md (los tipos de trabajo
y las reglas para el paso 2). Informa al usuario el número de líneas, el total y la hoja/columnas que usó.
Si el total no coincide con el total del propio BOQ, detente y averigua por qué antes de clasificar nada.
2. Clasificar cada línea (esto es tarea de Claude, no la sugerencia de palabra clave)
Lee types.md, luego lee TODO el brief.csv — capítulo por capítulo, en páginas si es largo. Escribe
outputs/<job>/decisions.csv con columnas key,type,locations,reason:
chapter=<inicio de la ruta del capítulo>cubre un capítulo (mayúsculas/minúsculas/acentos ignorados);id~=<regex>cubre una sección del BOQ por número de partida cuando los nombres de capítulo se repiten (p.ej. dos capítulos ambos llamados "TUBULACOES E CONEXOES"); un id de línea cubre una línea.- Reglas generales primero, excepciones después: una regla posterior anula una anterior; una regla de línea siempre gana.
- Hormigón armado: agrupa encofrado, acero y vertido de un elemento en el tipo del elemento (zapata, pilar, viga de atado, losa), a menos que el BOQ los valore como oficios globales.
- Ubicaciones: establácelas siempre (en blanco distribuye una línea entre todas las ubicaciones, incluida la obra). Plantas del edificio primero las más bajas; montaje de obra, trabajos exteriores, muro perimetral, tanques exteriores -> ubicación obra.
skipsolo para dinero que no sea trabajo de sitio, e indica por qué. Capítulos mixtos o dudosos: elige el mejor tipo y escribe "el planificador puede dividir" en la razón; esos volverán como preguntas.- No confíes en la sugerencia de palabra clave: lee mal ("tapume com telha" -> cubierta, "cabeamento" -> losa, "alumínio" -> luz).
py scripts/apply_types.py outputs/<job> --locations "Site|GF|FF"
Se detiene ante cualquier tipo desconocido, ubicación desconocida o línea sin clasificar. Comprobación de dinero: clasificado + omitido = total del BOQ.
Escribe lines.csv y typing.md (dinero por oficio, quién decidió cada línea, advertencias de unidad). Muestra al
usuario la tabla de dinero por oficio y las advertencias; corrige y vuelve a ejecutar hasta que esté limpio.
3. Preguntar al planificador
py scripts/questions.py outputs/<job> --start 2026-01-05
Construye un primer borrador no calibrado y escribe questions.md + answers.json con respuestas sugeridas.
Plantea las preguntas al usuario en lenguaje llano (AskUserQuestion funciona bien para las de sí/no), luego
rellena answers.json:
| Pregunta | Por qué es importante |
|---|---|
| Fecha de inicio, semana laboral (5/6/7), moneda | Calendario y la moneda del dinero en P6 |
| Ubicaciones, obra, distribución (plantas apiladas / bloques separados), cuáles van en paralelo | La secuencia. Probado: la propia estrategia de secuenciación del borrador es la razón principal por la que los trabajos reales difieren |
| Plazo contractual (meses) | Sin él, la duración era correcta (0.75-1.33x) para 4-6 de 17 trabajos reales; con él, 17 de 17 |
| Tres duraciones que conozcan (una estructura, una envolvente/acabado, un oficio de instalaciones) | Las duraciones del borrador tienen un error de ~2.25x por línea; tres anclas lo reducen a ~1.76x y escalan el resto |
| Trabajos de obra al principio o después de la estructura (muro perimetral, drenaje, tanques, pavimentación) | Mueve dinero real; los contratistas a menudo construyen el muro primero |
| Puntos de clasificación marcados como "el planificador puede dividir" | Líneas que Claude colocó pero un planificador podría dividir |
Las respuestas en blanco mantienen el valor por defecto y el informe lo indica; nunca inventes una respuesta para el planificador.
4. Construir
py scripts/build.py outputs/<job>
Ejecuta plan.py + export.py: schedule.json/.csv, report.md, schedule.xer.
Cada actividad lleva los IDs de las líneas del BOQ y la razón de su duración; cada enlace indica de dónde proviene
(programas reales: n enlaces A->B, orden por defecto, respuesta del planificador).
Importación
- P6: Archivo > Importar > Primavera PM (XER) > Crear nuevo proyecto, luego Herramientas > Programar (F9). Los gastos aparecen por actividad como " BOQ <líneas>" con cantidad, unidad y precio unitario.
Evidencia (todo con datos reales, validación cruzada dejando uno fuera)
- Clasificación: Hassan BOQ 22/22 líneas = la actividad propia del planificador por línea (sugerencia de palabra clave 15/22). Aracaju 643 líneas y Januaria 628 líneas clasificadas, dinero al céntimo.
- Lógica: el 75-80% de los enlaces reales se mantienen en 17 programas reservados; Hassan 18/18.
- P6: el XER del borrador se importa en P6 Professional 25 y programa las mismas fechas que el motor.
- Duraciones: error mediano x2.25, x1.76 con tres duraciones del planificador.
- No es un pronóstico de flujo de caja: la curva mensual del borrador no se acercó más a la real que una curva S de libro de texto. Dilo siempre que alguien pregunte sobre flujo de caja o plazos a partir del borrador.
Límites
- Solo BOQ de texto (sin PDFs escaneados). Una actividad por oficio y ubicación: el planificador divide más fino.
- Las tarifas y la lógica provienen de 73 programas, en su mayoría de edificación; obra civil/infraestructura no está probada.
data/se extrajo de 73 programas públicos de P6 (los XER originales no están incluidos).
Pruebas
py tests/smoke.py - el ejemplo incluido (BOQ de licitación pública de Januaria, 628 líneas) pasa por clasificación, preguntas, construcción y
el XER de P6: líneas, dinero al céntimo, tablas, tareas, gastos, enlaces, calendario del proyecto. Ejecútalo tras cualquier cambio.
Las pruebas de desarrollo (3 BOQ reales, 17 programas reservados, la comprobación de importación en P6) usaron archivos que no están incluidos.