Aplicación web para mediciones, presupuesto y certificación de obra. Organiza el trabajo en un árbol de capítulos y partidas con líneas de medición, justificación de precios, resumen económico y certificaciones por periodos, con exportación de listados e intercambio estándar FIEBDC-3 (.bc3).
Funciona 100 % en el navegador: sin servidor ni cuenta. La obra se guarda en local (IndexedDB) y se exporta/importa como fichero.
- Presupuesto en árbol — capítulos y subcapítulos a N niveles, partidas con unidad, rendimiento y precio; numeración automática estilo Arquimedes/CYPE.
- Mediciones detalladas — líneas con comentario, unidades, dimensiones (largo × ancho × alto) y fórmulas; el total se propaga al presupuesto.
- Medir sobre planos PDF — adjunta el PDF del proyecto, calibra cada página con
una cota (y compruébala con otra) y mide longitudes, superficies, rectángulos y
recuentos con clics: cada medida entra como línea de la partida abierta, con su
comentario («P1 · Salón») y de dónde sale, y se vuelve a ella desde la línea. Los PDF
se guardan en el navegador aparte de la obra; la copia
.ziplos lleva con ella. - Justificación de precios — descomposición de partidas (mano de obra, materiales, maquinaria) con edición copy-on-write sobre el banco de precios.
- Coeficiente K — escala global de precios unitarios para cuadrar el PEM a una cifra objetivo.
- Resumen económico — PEM, gastos generales, beneficio industrial, IVA y PEC.
- Certificaciones — certificación por periodos marcando líneas o introduciendo el porcentaje ejecutado, con desglose por capítulo.
- Referencia / bancos de precios — panel para navegar bancos
.bc3y copiar partidas (o partidas sueltas del Generador de Precios de CYPE) al presupuesto, arrastrando o con preflight de colisiones. - Importar / Exportar — importación y exportación FIEBDC-3 (
.bc3) compatible con Presto, CYPE/Arquimedes y similares; exportación de listados a PDF, Excel (.xlsx) y Word (.docx). - Multi-obra y copia de seguridad — cambio entre obras y backup/restauración del
proyecto completo (
.json, o.zipcon los planos). - UI adaptable — escritorio y móvil, tema claro/oscuro, atajos de teclado y centro de ayuda integrado.
Vite 7 · React 19 · TypeScript · Zustand · Immer · CSS Modules · IndexedDB
(idb-keyval) · Vitest. Exportación con write-excel-file (XLSX) y docx (DOCX); el
intercambio FIEBDC-3 usa un parser forkado en src/vendor/bc3 y un writer propio. Los
planos se pintan con pdfjs-dist (se carga solo al abrir el visor) y la copia .zip
comprime con fflate.
src/
core/ Dominio puro: medición, precios, certificación, FIEBDC-3 (.bc3)
store/ Estado de la obra (Zustand + Immer) y selectores
persist/ Persistencia en IndexedDB, hidratación y transferencia
features/ presupuesto · certificaciones · resumen · referencia ·
importar · exportar · obra · planos · print
layout/ TopBar, sidebar, drawer, barras de estado
components/ Primitivas de UI
hooks/ Hooks compartidos (atajos, breakpoints, tema…)
vendor/bc3/ Parser FIEBDC-3 forkado
public/ Assets estáticos
docs/ Documentación, diseño y planes
.github/ Workflow de deploy a GitHub Pages
Requiere Node 22+.
npm install
npm run dev # servidor de desarrollo (Vite)
npm run build # typecheck (tsc -b) + build de producción
npm run preview # servir el build localmente
npm test # tests (Vitest)
npm run test:node # tests en Node: pdf.js real y formato de la copia .zip
npm run lint # ESLint
npm run format # PrettierLa galería de primitivas de UI está en /#sandbox; su botón «Abrir el ejemplo de
planos» carga un plano A3 a 1:50 ya calibrado, con dos partidas, para probar el visor
sin tocar tus obras (?planos=0 apaga el visor).
Nota: muy de vez en cuando el primer
npm testen frío falla entero con un error espurio de Vitest («"vitest" is imported inside "globalSetup"»). Es un fallo de arranque (transform frío), no de los tests: re-ejecuta y pasa.
Distribuido bajo la PolyForm Noncommercial License 1.0.0. Se permite usar, copiar, modificar y distribuir el software para cualquier fin no comercial (uso personal, investigación, educación, organizaciones sin ánimo de lucro…). El uso comercial no está permitido sin una licencia aparte del autor.
Copyright © Javier Ramírez Bandera.