LuzFija.es
July 2, 2026 · View on GitHub
Suite frontend avanzada para analizar la factura electrica en Espana: comparador principal, observatorio PVPC, simulador solar/BV, guias y alertas regulatorias. Gratis, sin registro, con calculo local en navegador y sin monetizacion del ranking: no hay referidos, comisiones, publicidad, lead gen ni acuerdos comerciales que alteren resultados.
- Web:
https://luzfija.es - Comparador principal:
https://luzfija.es/ - Observatorio PVPC:
https://luzfija.es/estadisticas/ - Comparador tarifas solares (BV):
https://luzfija.es/comparador-tarifas-solares.html - Qué hace y cómo funciona:
https://luzfija.es/como-funciona-luzfija.html - Guias:
https://luzfija.es/guias.html - Contacto:
hola@luzfija.es
LuzFija.es nace para resolver problemas de facturación y comparación eléctrica que la web comercial todavía no ha resuelto bien: privacidad real, datos reales, autoconsumo, PVPC, indexadas y batería virtual sin convertir al usuario en lead.
En ese sentido, es una web del 2005 que resuelve los problemas del 2030.
Si eres una IA o entras al repo por primera vez, empieza por AGENTS.md y CAPACIDADES-WEB.md.
Licencia Y Uso
LuzFija.es es un proyecto source-available: el código está publicado para transparencia, auditoría y colaboración, pero no es una licencia open source permisiva tipo MIT.
- Código fuente: PolyForm Shield License 1.0.0, ver
LICENSE. No se permite usarlo para proporcionar productos o servicios que compitan con LuzFija.es. - Contenido, guías, documentación, microcopy, diseño y datasets curados: todos los derechos reservados, ver
CONTENT-LICENSE.md. - Fuentes oficiales y datos de terceros conservan sus propios derechos; LuzFija.es protege su selección, normalización, estructura, comentarios, comparaciones y trabajo de curación.
- Para permisos comerciales, integraciones, republicación o usos competitivos:
hola@luzfija.es.
Las versiones anteriores del repositorio pudieron publicarse bajo otros términos. Esta licencia aplica desde la versión que introduce este cambio en adelante, sin revocar permisos concedidos válidamente para versiones previas.
Estado Actual (2026-07-02)
- 34 paginas HTML publicas:
- 9 en raiz.
- 1 en
estadisticas/. - 24 en
guias/(indice + 23 guias).
- 33 modulos JavaScript en
js/(incluyejs/bv/). - 21.262 lineas JS aproximadas.
- 99 tarifas en
tarifas.json. - Suite de tests Vitest con 57 archivos y 448 casos.
Que Incluye La Web (Inventario Completo)
1. Comparador Principal (/)
- Compara tarifas 1P y 3P del mercado libre.
- Incluye PVPC estimado en el ranking (datos horarios oficiales ya publicados en dataset local).
- Limite de modelo PVPC: no computable cuando potencia contratada > 10 kW.
- Soporta:
- discriminacion horaria,
- placas solares,
- compensacion de excedentes,
- bateria virtual,
- bono social,
- tarifa personalizada del usuario.
- Extrae datos de factura PDF (texto + QR + OCR opcional).
- Importa consumos desde CSV/XLSX (incluye clasificacion P1/P2/P3 y soporte formatos distribuidoras).
- Modal de aplicacion CSV con opcion de aplicar solo consumos o consumos+excedentes.
- Opcion de comparar PVPC usando precios horarios del periodo importado.
- Tabla con filtros, ordenacion por columnas, top 5 visual y modal de desglose.
- Menu de utilidades:
- compartir configuracion por URL,
- refrescar tarifas,
- limpiar cache,
- reset de formulario.
- Boton de instalacion PWA cuando el navegador expone
beforeinstallprompt. - Banner de donacion a la AECC (solo escritorio, tras calcular): muestra el codigo Bizum
11244con boton de copia; LuzFija no recibe dinero, comision ni datos de la donacion. Detalle enCAPACIDADES-WEB.mdseccion 3.6.
2. Observatorio PVPC (/estadisticas/)
- Selector de tipo de dato:
pvpcosurplus. - Selector geografia (8741..8745), ano y mes.
- KPIs dinamicos (ultimo dia, medias/ extremos, rolling 12m, YoY).
- Graficos:
- evolucion (diaria o mensual),
- perfil horario promedio,
- comparativa multianual por chips.
- Importador CSV/XLSX de excedentes del usuario con:
- KPIs anuales,
- tabla mensual con energia/precio/importe,
- tramo horario principal (80% del vertido),
- hora pico.
- Esta seccion CSV se habilita en modo
surplus.
3. Simulador BV Independiente (/comparador-tarifas-solares.html)
- Simulacion mes a mes con datos reales de autoconsumo.
- Modo hibrido:
- importas CSV/XLSX,
- se auto-rellena tabla manual mensual,
- puedes editar y simular escenarios.
- Ranking del periodo simulado:
- anual cuando hay 12 meses razonablemente completos,
- orden por coste pagado,
- desempate por mayor saldo BV final,
- metrica secundaria de coste neto (pagado menos saldo BV final) en tarifas con BV cuando queda saldo final relevante; no altera el orden.
- Selector de mes de inicio del contrato para simular la hucha desde la contratacion.
- Simulacion por patron anual: si el ciclo empieza en junio, los meses enero-mayo del final representan la continuacion del ciclo con los mismos datos historicos.
- Desglose completo por tarifa en desktop (tabla) y movil (tarjetas).
- Persistencia local avanzada:
- autoguardado tabla manual,
- export/import JSON de backup,
- reset de datos manuales,
- tarifa personalizada propia del simulador con guardado local.
4. Contenido Y Soporte
guias.html+ 23 guias educativas.- Landings de apoyo:
como-funciona-luzfija.htmlcalcular-factura-luz.htmlcomparar-pvpc-tarifa-fija.html404.htmlcon enlaces rapidos y buscador hacia guias.aviso-legal.htmlyprivacidad.html(incluye opt-out de analitica GoatCounter).
Documentacion De Referencia
Inventario funcional (fuente de verdad)
CAPACIDADES-WEB.md:- mapa pagina por pagina,
- flujos completos de usuario,
- capacidades para asistentes IA,
- reglas anti-lagunas.
Contexto para agentes y mantenimiento
AGENTS.md:- mapa rapido del producto y del codigo,
- invariantes que no se deben romper,
- rutas de lectura para auditorias y cambios,
- recordatorios para evitar falsos positivos.
MANTENIMIENTO-NORMATIVO.md:- checklist de normativa, datos vivos, fuentes oficiales, cadencias de revision e impacto en codigo/guias.
ANALITICA-GOATCOUNTER.md:- taxonomia de eventos GoatCounter,
- reglas de privacidad,
- saneo de pageviews/referrers,
- checklist para anadir tracking sin filtrar datos sensibles.
Calculo y normativa
ARQUITECTURA-CALCULOS.mdCALC-FAQS.md
Esquemas de datos
JSON-SCHEMA.mdPVPC-SCHEMA.md
Simulador BV
SIMULADOR-BV.md
Documento para asistentes IA
llms.txt(referencia publica breve para asistentes)llms-full.txt(referencia publica ampliada para asistentes)
Arquitectura Tecnica
- Stack: HTML + CSS + Vanilla JS modular.
- Hosting: GitHub Pages (sitio estatico).
- Dependencias autoalojadas en
vendor/: - PDF.js (lazy),
- Tesseract (lazy),
- jsQR,
- SheetJS/xlsx (lazy),
- Chart.js.
- Sin backend para calculos: todo se ejecuta en cliente.
Datasets versionados
tarifas.json(ofertas comerciales)./data/pvpc/(REE/ESIOS indicador 1001)./data/surplus/(REE/ESIOS indicador 1739)./data/ssaa/(REE/ESIOS indicador 10328, servicios de ajuste medios mensuales).
Notas de tarifas:
fv.exces el precio de excedentes en €/kWh;-1significa precio indexado. Sin curva horaria se usa 0,020 €/kWh solo como referencia orientativa; con CSV horario trazable el simulador puede valorar el periodo importado contradata/surplus/.- La columna privada
Activade la Excel no se publica en JSON:noexcluye una tarifa detarifas.jsony del post de Facebook, pero el validador privado la sigue revisando. - La columna privada recomendada
incluyeServiciosAjustedebe ser booleana (SI/NO); cuando valeNO, el comparador aplica/data/ssaa/como mayor coste de energia antes de IEE e IVA/IGIC/IPSI.
PWA, Cache Y Offline
- Service Worker en
sw.jscon versionado por despliegue (CACHE_VERSION). - Precache en dos niveles:
CORE_ASSETS(obligatorio).ASSETSopcionales best-effort.- Estrategias de cache:
- HTML: network-first.
tarifas.json: network-only (sin cache para evitar datos obsoletos).- JS/CSS: network-first (evita ejecutar codigo obsoleto durante horas).
- datasets PVPC/surplus/SSAA e indice de busqueda de guias: network-first.
- resto de recursos (imagenes y otros estaticos): stale-while-revalidate.
- Cliente con actualizacion agresiva de SW para aplicar nuevas versiones rapidamente.
- App Android (TWA):
.well-known/assetlinks.jsondeclara el paquetees.luzfija.twapara que la app abra el dominio verificado a pantalla completa.
Privacidad Y Seguridad
- Procesamiento local para:
- calculos,
- parsing CSV,
- parsing PDF/QR/OCR.
- Politica de minimizacion:
- no hay registro obligatorio,
- no se envian facturas a backend propio.
- Superficie sensible principal: extractor de factura PDF en
/, con CSP reforzada por hashes, modo privacidad y sin tracking de eventos del modal. - CSV/XLSX se procesa en local y solo se muestran/persisten agregados numericos; no se renderizan strings libres ni valores CUPS.
- Guias, paginas legales, 404 y contenido editorial no procesan facturas/CSV ni datos sensibles del usuario; su CSP es hardening general, no proteccion directa de datos personales.
- Analitica con GoatCounter (sin cookies de terceros), con opt-out de usuario.
- CSP por pagina + sanitizacion en renderizado dinamico + validacion de URL segura.
Testing
Ejecutar:
npm test
Cobertura principal:
- motor de calculo e impuestos,
- PVPC y cache,
- importadores CSV/XLSX,
- factura PDF + QR/OCR,
- desglose e integraciones UI,
- seguridad URL/XSS,
- privacidad/tracking.
Lint
ESLint (flat config en eslint.config.mjs) analiza js/ con reglas de deteccion de bugs, sin reglas de estilo:
npm run lint
- El CI ejecuta el lint antes de los tests y falla con cualquier error. Todas las reglas activas estan en nivel
error; no hay avisos pendientes. - Los globals compartidos entre ficheros (
toast,runCalculation,crearTarifaPVPC, etc.) estan declarados eneslint.config.mjs; si defines una funcion global nueva usada desde otro fichero, anadela a esa lista. - Convenciones: los
catchsin usar la variable de error estan permitidos (guardrails deliberados); un parametro deliberadamente sin usar se prefija con_(ej._reason); el resto de variables sin usar son error y deben eliminarse.
Desarrollo Local
Tras clonar el repositorio, activa el hook de pre-commit:
npm run setup:hooks
El hook (scripts/pre-commit-sync.mjs) regenera y re-stagea automáticamente el sitemap, el índice de búsqueda y los documentos del repo (README.md, llms.txt, etc.) cuando un commit incluye cambios en HTML, JS, CSS u otros inputs gestionados. Sin este paso, Git ignora el hook y los documentos derivados pueden quedar desactualizados.
Para verificar que la documentacion derivada esta sincronizada (regenera y falla si el resultado difiere de lo commiteado):
npm run check:repo-docs
Despliegue
El sitio se publica en GitHub Pages en modo workflow desde .github/workflows/tests.yml:
- Cada push a
main(oworkflow_dispatch) ejecuta el jobtest:npm ci, lint, tests y verificacion de repo sincronizado. - Si
testpasa,build_pagessube el sitio como artefacto de Pages. deploy_pagespublica el artefacto con un grupo de concurrencia serializado (cancel-in-progress: false): los despliegues no se pisan y, con varios push seguidos, solo queda en cola el ultimo.- Si lint o tests fallan, no se publica nada: produccion conserva la version anterior.
El workflow pvpc.yml (diario, 20:00 UTC) actualiza data/pvpc/, data/surplus/ y data/ssaa/; si hay cambios, los commitea y dispara tests.yml para publicarlos.
Importante: el CI no actualiza el build ID. Los parametros ?v= de JS/CSS/vendor y el CACHE_VERSION de sw.js se actualizan con el script local de despliegue (commits Deploy vYYYYMMDD-HHMMSS). Tras cambiar JS, CSS o vendor/, hay que ejecutar ese script antes de publicar; si no, los navegadores con cache antigua no recibiran los assets nuevos.
Mantenimiento De Datos
- Actualizaciones de datasets PVPC/surplus/SSAA via GitHub Actions.
- Checklist completo de normativa, fuentes y cadencias en
MANTENIMIENTO-NORMATIVO.md. - Recomendacion operativa:
- mantener
tarifas.jsonactualizado con fechaupdatedAt, - usar
Activa=noen la Excel para retirar temporalmente tarifas sin borrar su fila, - revisar cambios fiscales electricos posteriores al 01/06/2026: tras confirmarse el condicionante de IPC de abril, el comparador queda en IVA 21% e IEE 5,11269632%,
- validar cambios con
npm run lintynpm testantes de publicar.