refactor-buscador.md 17.9 KB

Refactor del Buscador - Landing Page

Naturaleza del Proyecto

¿Para quién? Ciudadanos bolivianos (público general, no técnicos)

¿De quién? Gobierno boliviano - Ministerio de Economía y Finanzas Públicas

¿Qué es? Datos abiertos de contabilidad fiscal (presupuesto público)

El mensaje central: "Puedes buscar donde quieras" - transparencia, accesibilidad, apertura

El buscador de la landing actual es un statement visual de ese mensaje. El nuevo buscador debe mantener ese espíritu.


Nueva Ruta: /nuevo-buscador

Ruta dedicada al buscador completo con todas las capacidades:

  • Selector Ingresos/Gastos
  • Selector Programas/Clasificadores (solo gastos)
  • Selector de clasificador específico
  • Resultados ricos tipo Spotlight

Archivos:

src/routes/nuevo-buscador/
  └── +page.svelte

Command K (Buscador Global) - EFECTO DEL REFACTOR

Descripción

Hay un buscador modal global (tipo Spotlight) que se activa con Cmd+K / Ctrl+K desde cualquier página. Este componente debe sincronizarse con las decisiones del buscador principal.

Archivos involucrados

src/lib/components/ui/SearchModal.svelte    # Componente del modal
src/routes/+layout.svelte                    # Monta el modal globalmente (línea 67)
src/lib/components/ui/Navbar.svelte          # Botón para abrir el modal
src/lib/stores/searchStore.js                # Store compartido con landing

Implementación actual

  • Activación: Cmd+K / Ctrl+K (definido en +layout.svelte:23-28)
  • También: Botón en el Navbar (onOpenSearch)
  • Filtros actuales: 6 clasificadores (entidad, objeto_gasto, rubro, finfun, organismo, fuente)
  • Store: Usa searchStore.js (compartido con landing)
  • NO tiene: Selector Ingresos/Gastos, Programas/Proyectos

Lo que debe cambiar con el refactor

  1. Agregar selector Ingresos/Gastos
  2. Agregar opción Programas/Proyectos (solo en Gastos)
  3. Sincronizar filtros con el buscador principal
  4. Posiblemente: recordar última selección del usuario
  5. Mostrar las 3 variaciones de diseño de resultados

Flujo deseado post-refactor

Usuario en cualquier página
        │
        ▼
    [Cmd+K]
        │
        ▼
┌─────────────────────────────────────┐
│  SearchModal (replica del central)  │
│                                     │
│  [Ingresos] [Gastos]               │
│  [Programas] [Clasificadores]       │
│                                     │
│  Resultados según selección...      │
└─────────────────────────────────────┘

Conceptos Clave

Selector Central: Ingresos vs Gastos

Este es el eje fundamental que contextualiza toda búsqueda. No es un filtro opcional - define el universo de datos.

Clasificadores Compartidos (con contexto distinto)

Clasificador En INGRESOS significa En GASTOS significa
Geográfico (dónde) ¿De dónde vienen los ingresos? ¿Dónde se ejecuta el gasto?
Entidades (quién) ¿Quién recibe? ¿Quién ejecuta?

Árbol de Decisiones de Búsqueda

                        ┌─────────────────┐
                        │    DEFAULT      │
                        │ Gastos+Programas│
                        └────────┬────────┘
                                 │
                 ┌───────────────┴───────────────┐
                 ▼                               ▼
         ┌───────────────┐               ┌───────────────┐
         │   INGRESOS    │               │    GASTOS     │
         └───────┬───────┘               └───────┬───────┘
                 │                               │
                 │                       ┌───────┴───────┐
                 │                       ▼               ▼
                 │               ┌─────────────┐ ┌─────────────┐
                 │               │ PROGRAMAS/  │ │ CLASIFIC.   │
                 │               │ PROYECTOS   │ │             │
                 │               │ (~600k)     │ │             │
                 │               └─────────────┘ └──────┬──────┘
                 │                                      │
                 ▼                                      ▼
         ┌───────────────┐                     ┌───────────────┐
         │ CLASIFICADORES│                     │ CLASIFICADORES│
         │   INGRESOS    │                     │    GASTOS     │
         └───────┬───────┘                     └───────┬───────┘
                 │                                     │
    ┌────────────┼────────────┐         ┌─────────────┼─────────────┐
    ▼            ▼            ▼         ▼             ▼             ▼
┌────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Rubro  │ │Organismo │ │ Fuente │ │ Fin/Fun  │ │Obj.Gasto │ │ Sectores │
└────────┘ └──────────┘ └────────┘ └──────────┘ └──────────┘ └──────────┘
                 │                                     │
                 ▼                                     ▼
         ┌───────────────┐                     ┌───────────────┐
         │  Geográfico   │ (compartido)        │  Geográfico   │
         │   (dónde)     │                     │    (dónde)    │
         └───────────────┘                     └───────────────┘
                 │                                     │
                 ▼                                     ▼
         ┌───────────────┐                     ┌───────────────┐
         │   Entidades   │ (compartido)        │   Entidades   │
         │   (quién)     │                     │    (quién)    │
         └───────────────┘                     └───────────────┘

Clasificadores por Modo

INGRESOS (5) GASTOS (5)
Rubro Finalidad y Función
Organismo Objetos de Gasto
Fuente Sectores
Geográfico (dónde) Geográfico (dónde)
Entidades (quién) Entidades (quién)

Nota: Geográfico y Entidades aparecen en ambos pero la vista enfatiza el contexto (ingresos o gastos) según la rama seleccionada.


Tabla de Todas las Búsquedas Posibles

# Modo Submodo Clasificador Qué busca
0 DEFAULT - - Gastos + Programas/Proyectos
INGRESOS
1 Ingresos Clasif. Todos 5 clasificadores de ingresos
2 Ingresos Clasif. Rubro Solo rubros
3 Ingresos Clasif. Organismo Solo organismos
4 Ingresos Clasif. Fuente Solo fuentes
5 Ingresos Clasif. Geográfico Geográfico (contexto ingresos)
6 Ingresos Clasif. Entidades Entidades (contexto ingresos)
GASTOS
7 Gastos Prog/Proy - ~600k registros narrativos
8 Gastos Clasif. Todos 5 clasificadores de gastos
9 Gastos Clasif. Finalidad/Función Solo finfun
10 Gastos Clasif. Objeto de gasto Solo objetos
11 Gastos Clasif. Sectores Solo sectores
12 Gastos Clasif. Geográfico Geográfico (contexto gastos)
13 Gastos Clasif. Entidades Entidades (contexto gastos)

Total: 14 formas de búsqueda (1 default + 6 ingresos + 7 gastos)


Comportamiento Default

┌─────────────────────────────────────────────────────────┐
│  [🔍 Buscar...]                                         │
│                                                         │
│  SIN SELECCIONAR NADA:                                  │
│  → Busca en GASTOS + PROGRAMAS/PROYECTOS               │
│  → Lo más intuitivo para el ciudadano común            │
│                                                         │
└─────────────────────────────────────────────────────────┘

Razón: Los programas/proyectos tienen nombres narrativos como "CONST. PISCINA OLIMPICA MUNICIPAL" que coinciden con cómo la gente piensa sobre el gasto público.


Las 3 Variaciones de Diseño

Aunque hay 14 formas de búsqueda posibles, se reducen a 3 variaciones de diseño de resultados:

Variación Cuándo aplica Características
1. Programas puro Default, Gastos + Programas Cards narrativas ricas, contexto amplio
2. Clasificador individual Cualquier clasificador específico Lista estructurada, jerárquica
3. Todos los clasificadores Ingresos/Gastos + "Todos" Resultados agrupados por tipo

Variación 1: PROGRAMAS PURO

Aplica cuando: Default, o Gastos + Programas/Proyectos

Características:

  • Texto narrativo libre (~600k registros)
  • Cards ricas con mucho contexto
  • Información: entidad, ubicación, monto, período, ejecución
┌─────────────────────────────────────────────────────────┐
│ 🔍 piscina olimpica                                     │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │ CONST. PISCINA OLIMPICA MUNICIPAL EVO MORALES   │   │
│  │ ▸ Cobija · GAM Cobija · Bs 2.3M · 2019-2023    │   │
│  │   ████████░░ 80% ejecutado                      │   │
│  └─────────────────────────────────────────────────┘   │
│  ┌─────────────────────────────────────────────────┐   │
│  │ PISCINA OLIMPICA DEPARTAMENTAL                  │   │
│  │ ▸ Tarija · Gobernación · Bs 890k · 2021        │   │
│  │   ███░░░░░░░ 30% ejecutado                      │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

Variación 2: CLASIFICADOR INDIVIDUAL

Aplica cuando: Se selecciona UN clasificador específico (rubro, objeto, finfun, etc.)

Características:

  • Lista estructurada y limpia
  • Muestra jerarquía/nivel
  • Código + descripción
┌─────────────────────────────────────────────────────────┐
│ 🔍 construccion                    [Objetos de gasto ▾] │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  42000 · Construcciones y mejoras de bienes             │
│  ▸ Partida · Nivel 2                                   │
│                                                         │
│  42100 · Construcciones de bienes de dominio público    │
│  ▸ Partida específica · Nivel 3                        │
│                                                         │
│  42200 · Construcciones de bienes de dominio privado    │
│  ▸ Partida específica · Nivel 3                        │
│                                                         │
└─────────────────────────────────────────────────────────┘

Variación 3: TODOS LOS CLASIFICADORES

Aplica cuando: Se selecciona "Todos" los clasificadores (de ingresos o de gastos)

Características:

  • Resultados agrupados por tipo de clasificador
  • Secciones visuales separadas
  • Mezcla de estructuras
┌─────────────────────────────────────────────────────────┐
│ 🔍 educacion                          [Todos gastos ▾]  │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  FINALIDAD Y FUNCIÓN                                    │
│  ┌─────────────────────────────────────────────────┐   │
│  │ 09 · Educación                                  │   │
│  │ ▸ Finalidad                                    │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  OBJETOS DE GASTO                                       │
│  ┌─────────────────────────────────────────────────┐   │
│  │ 25800 · Servicios de capacitación               │   │
│  │ ▸ Partida                                      │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ENTIDADES                                              │
│  ┌─────────────────────────────────────────────────┐   │
│  │ Min. de Educación                               │   │
│  │ ▸ Ministerio · MINEDU                          │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

Arquitectura Técnica

Motor de Búsqueda

Typesense para todo:

  • Clasificadores (~1,400 items)
  • Programas/Proyectos (~600,000 items)

Parámetros de Typesense (ya implementados)

  1. Modo: Ingresos vs Gastos
  2. Submodo: Programas vs Clasificadores (solo gastos)
  3. Clasificador específico: Cuál(es) clasificadores consultar

Archivos Principales

src/routes/+page.svelte              # Landing con buscador
src/lib/services/search.js           # Lógica de búsqueda Typesense
src/lib/stores/searchStore.js        # Estado reactivo
src/lib/components/search/
  ├── SearchBox.svelte               # Input reutilizable
  ├── SearchResults.svelte           # Dropdown resultados
  └── SearchResultItem.svelte        # Item individual

Tareas de Implementación

Fase 1: UI del Selector

  • Diseñar selector Ingresos/Gastos (visible pero no obligatorio)
  • Diseñar selector Programas/Clasificadores (solo si Gastos)
  • Diseñar selector de clasificador específico

Fase 2: Conexión UI ↔ Typesense

  • Mapear estado de selectores a parámetros de Typesense
  • Implementar búsqueda default (Gastos + Programas)
  • Implementar cada una de las 14 formas de búsqueda

Fase 3: Diseño de Resultados

  • Diseñar cards ricas para Programas/Proyectos
  • Diseñar cards para cada tipo de clasificador
  • Implementar agrupación visual por tipo

Fase 4: Testing

  • Probar las 14 formas de búsqueda
  • Probar UX del selector
  • Probar performance con resultados mixtos

Documento creado: 2026-04-04 Última actualización: 2026-04-04