Skip to content

Releases: psbella/remediar

v2.2.1

Choose a tag to compare

@psbella psbella released this 12 Jul 08:00

🔒 Seguridad

  • admin.html sacado del repo público por una vulnerabilidad XSS (campos sin sanitizar en innerHTML/handlers inline), en la misma página donde se ingresa un GitHub PAT con scope contents:write. Se sube puntualmente cuando se necesite usar.

✨ Agregado

  • 15 tests unitarios nuevos para las funciones puras de scripts/etl/ (utils, blacklist, outliers, droga_fixes, reparaciones, parser) — 28 tests en total.
  • Ruff y ESLint configurados (set inicial pragmático, sin bloquear CI todavía).

🐛 Corregido

  • presentacion.py: 'pda' estaba definido dos veces (PARCHE y POMADA) — se confirma POMADA como correcto y se elimina la entrada muerta.
  • store.js: indentación incorrecta en el cierre de _extraerFiltros.

📝 Documentado

  • CHANGELOG: se corrige el encabezado faltante de ## [2.2.0], que había quedado como contenido huérfano.

v2.2.0 — Footer con licencia/versión + fix de contraste WCAG AA

Choose a tag to compare

@psbella psbella released this 11 Jul 16:42

✨ Agregado

🐛 Corregido

  • Contraste de --text-5 (#999999 → #6c6c6c) para cumplir WCAG AA en el placeholder del buscador y los íconos de filtros/footer.
  • Declaración duplicada de .celda.valor.uppercase en style.css.
  • Cache del Service Worker (CACHE_NAME) actualizado para forzar la baja de los assets estáticos nuevos.

Full Changelog: v2.1.9...v2.2.0

[2.1.9] - Modularización de pdf_to_json

Choose a tag to compare

@psbella psbella released this 10 Jul 08:04

[2.1.9] - 2026-07-10

♻️ Refactor

  • scripts/pdf_to_json.py modularizado: las 8+ capas de normalización se movieron a un paquete scripts/etl/ de 10 módulos (config, parser, reparaciones, droga_fixes, presentacion, pami, blacklist, outliers, enriquecimiento, utils). pdf_to_json.py queda como orquestador puro (~110 líneas, antes ~2000).

🐛 Corregido

  • github_release_helper.py y snapshot_semanal.py: REPO estaba hardcodeado a psbella/remediar; ahora usa GITHUB_REPOSITORY (seteada automáticamente por Actions), con ese valor como fallback. El hardcodeo rompía la subida de assets con 403 en cualquier repo derivado (detectado al probar en remediar-refactor).

📝 Documentado

  • README: árbol de directorios, diagrama de arquitectura y tabla de scripts actualizados para reflejar el paquete scripts/etl/.

Full Changelog: v2.1.8...v2.1.9

v2.1.8 — CSP sin unsafe-inline + validación formal de schema

Choose a tag to compare

@psbella psbella released this 07 Jul 07:45

🔒 Seguridad

  • Cierra el ítem M1, pendiente desde el inicio de la auditoría técnica: style-src de la CSP ya no necesita 'unsafe-inline'. Se migraron los 12 style="..." inline de index.html/admin.html a clases CSS, y los bloques <style> embebidos de admin.html y mantenimiento.html se movieron a archivos externos (admin.css, mantenimiento.css). Verificado en producción con curl -I y consola del navegador sin errores de CSP.
  • Actualizada la Response Header Transform Rule de Cloudflare con la CSP reforzada.
  • Desactivado Cloudflare Web Analytics (no se usaba; generaba un bloqueo de CSP en consola).

✨ Agregado

  • Validación formal de schema (tests/test_schema.py + tests/medicamentos.schema.json) para medicamentos.json — valida el contrato estructural completo (claves, tipos, opcionalidad) contra un JSON Schema versionado, separado de los umbrales de calidad de negocio que ya cubre test_etl_sanidad.py. La suite de sanity tests pasa de 12 a 13 checks.

📝 Documentado

  • README actualizado: conteo de tests, sección de seguridad, salida de ejemplo de la suite.

Changelog completo: CHANGELOG.md

What's Changed

  • chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #16

Full Changelog: v2.1.7...v2.1.8

What's Changed

  • chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #16

Full Changelog: v2.1.7...v2.1.8

v2.1.7 — Dedup del ETL + consolidación de seguridad, a11y y CI

Choose a tag to compare

@psbella psbella released this 05 Jul 11:12

✨ Agregado

  • Deduplicación de registros exactos del PDF de SIAFAR antes de las capas de reparación del ETL.

🐛 Corregido

  • js/main.js: el listener de pageshow leía timestamp en vez de ts del cache en sessionStorage — la limpieza de cache vieja al volver con el botón "atrás" nunca se ejecutaba.
  • .gitignore: línea concatenada que impedía ignorar data/pami.xlsx y .wrangler/ correctamente.

♻️ Refactor

  • Unificadas las dos heurísticas duplicadas de detección de laboratorio corrupto (filters.js / utils.js) en una sola función.

🔒 Seguridad

  • Confirmado en producción: remedi.ar y www.remedi.ar entregan CSP, X-Frame-Options: DENY y el resto de los headers de seguridad vía Cloudflare Response Header Transform Rules (ambos hosts proxied, GitHub Pages como origen). Verificado con curl -I.
  • Strict-Transport-Security sumado a _headers.

♿ Accesibilidad

  • Contraste de texto teal corregido a AA (WCAG) en 7 selectores de style.css.

⚙️ CI/CD

  • timeout-minutes y concurrency agregados a los 4 workflows — evita corridas superpuestas y jobs colgados sin límite.

🧹 Eliminado

  • pami.xlsx y scripts/__pycache__/ destrackeados de git.

Changelog completo: CHANGELOG.md

v2.1.6 — Permisos en workflows + CodeQL versionado + SEO + filter.js

Choose a tag to compare

@psbella psbella released this 04 Jul 09:45

🔒 Seguridad

  • Bloque permissions: contents: write explícito en maintenance-on.yml — quedó afuera cuando se aplicó el mismo fix a update_prices.yml y maintenance-off.yml en la 2.1.4. Cierra el último de los tres workflows sin permisos acotados del GITHUB_TOKEN.
  • Se versiona .github/workflows/codeql.yml (antes CodeQL corría vía configuración de la pestaña Security sin quedar reflejado en el código del repo). Cubre JS, Python y los propios workflows de Actions.

🔍 SEO

  • robots.txt ya no bloquea /data/ ni /js/

    📝 Documentado

  • SECURITY.md — política de reporte de vulnerabilidades y canal de contacto directo.

  • 🐛 Corregido

  • js/main.js: el listener de pageshow leía timestamp en vez de ts del cache en sessionStorage — la limpieza de cache vieja al volver con el botón "atrás" nunca se ejecutaba.

🧹 Eliminado

scripts/__pycache__/ destrackeados de git (ya estaban en .gitignore, pero seguían en el índice desde antes de esa regla).

♻️ Refactor

  • Unificadas esValorCorrupto (filters.js) y esLaboratorioCorrupto (utils.js) en una sola función — evita que las dos heurísticas diverjan con el tiempo.

Changelog completo: CHANGELOG.md

New Contributors

Full Changelog: v2.1.5...v2.1.6

Historial July 2026

Choose a tag to compare

@github-actions github-actions released this 03 Jul 15:35

Snapshots semanales de precios — Historial July 2026

v2.1.5

Choose a tag to compare

@psbella psbella released this 02 Jul 07:47
  • Fix: onLimpiar() no reseteaba el checkbox visual de #togglePami
  • Elimina variable duplicada todos en main.js (usa getTodos())
  • Refactor: js/core/store.js → js/store.js
  • Agrega skip navigation link
  • admin.html sin Google Fonts externas
  • Sincroniza package.json/README con el CHANGELOG real (2.1.2 → 2.1.5)

Full Changelog: v2.1.4...v2.1.5

v2.1.4 — Permisos de CI, limpieza de commits automáticos y optimizaciones en el ETL

Choose a tag to compare

@psbella psbella released this 02 Jul 04:12

🐛 Corregido

  • update_prices.yml seguía agregando data/pami.xlsx y data/droga_fixes.json
    al commit en cada corrida pese a que un release anterior ya lo daba por
    resuelto — el cambio no había quedado aplicado en el YAML. Ahora ninguno
    de los dos se toca en el paso de commit.

🔒 Seguridad

  • Bloque permissions: contents: write explícito en update_prices.yml
    (hallazgo de CodeQL: el workflow no limitaba los permisos del GITHUB_TOKEN).

⚡ Mejorado

  • _build_re_lab_pegado() ya no se reconstruye dos veces sobre el dataset
    completo en pdf_to_json.py — se cachea una sola vez y se reutiliza entre
    extraer_presentacion_de_marca() y limpiar_dosis_residual_en_marca().
  • Reemplazado iterrows() por to_dict('records')/itertuples() en los
    dos loops del crosswalk PAMI (_build_pami_index() y el fallback de
    dosis desde nombre de marca).

📝 Documentado retroactivamente

  • data/pami.xlsx no se versiona en git desde algún punto entre 2.1.0 y
    2.1.2 (fecha exacta no registrada en el changelog): se descarga fresco
    en cada corrida del ETL desde el portal de datos abiertos de PAMI (CKAN),
    con retry y backoff, y está en .gitignore. Corresponde al ítem de
    roadmap de la auditoría técnica sobre migrar pami.xlsx fuera de git,
    que en los hechos ya estaba resuelto pero nunca había quedado asentado.

v2.1.2

Choose a tag to compare

@psbella psbella released this 02 Jul 02:35
  • Elimina setTodos() (store.js) y ordenarPorPrecio() (filters.js),
    sin referencias en el repo
  • Agrega prefers-reduced-motion en @Keyframes pulse del update-pill
  • Consolida import urllib.parse en snapshot_semanal.py (estaba
    duplicado dentro de main() y del bloque main)
  • Bump version 2.1.1 → 2.1.2 (package.json + badge README)

Full Changelog: v2.1.1...v2.1.2