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
- Agregar selector Ingresos/Gastos
- Agregar opción Programas/Proyectos (solo en Gastos)
- Sincronizar filtros con el buscador principal
- Posiblemente: recordar última selección del usuario
- 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)
- Modo: Ingresos vs Gastos
- Submodo: Programas vs Clasificadores (solo gastos)
- 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