Rafael Lopez

ajustes

......@@ -7,7 +7,24 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest
### Motor de búsqueda
- **Tecnología**: Fuse.js (cliente)
- **Razón**: ~2,000-4,000 registros totales, cabe en memoria, búsqueda instantánea sin latencia
- **Razón**: ~1,000 registros totales (~600 entidades + ~450 objetos), cabe en memoria, búsqueda instantánea sin latencia
### Configuración Fuse.js
```javascript
const fuseOptions = {
keys: [
{ name: 'nombre_normalizado', weight: 0.6 },
{ name: 'sigla_normalizada', weight: 0.2 },
{ name: 'codigo_normalizado', weight: 0.2 }
],
threshold: 0.4,
distance: 100,
includeScore: true,
includeMatches: true,
minMatchCharLength: 2,
ignoreLocation: true
};
```
### Tolerancia a errores
- Normalización de acentos ("andres" → "andrés")
......@@ -24,12 +41,13 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest
## Estructura del Índice
### Índice unificado (futuro)
### Índice unificado (implementado)
Todos los clasificadores en un solo array con `tipo`:
```javascript
// src/lib/data/index.js
const indice = [
// src/lib/services/search.js
const searchData = [
// Entidades
{
tipo: 'entidad',
codigo: 139,
......@@ -37,22 +55,28 @@ const indice = [
sigla: 'UMSA',
contexto: 'Universidades Públicas',
años: 20,
// campos normalizados para búsqueda
_nombre_normalizado: 'universidad mayor de san andres',
_sigla_normalizada: 'umsa'
nombre_normalizado: 'universidad mayor de san andres',
sigla_normalizada: 'umsa',
codigo_normalizado: '139'
},
// Objetos de gasto
{
tipo: 'objeto_gasto',
codigo: 25100,
codigo: '25100',
nombre: 'Pasajes',
contexto: 'Servicios',
// ...
sigla: null,
contexto: 'Objeto del Gasto · Partida',
nivel: 'partida',
nombre_normalizado: 'pasajes',
sigla_normalizada: '',
codigo_normalizado: '25100'
}
]
```
### Por ahora (MVP)
Solo clasificador de entidades (`clas_institucional`).
### Fuentes de datos
- **Entidades**: tabla `ppto.clas_institucional`
- **Objetos de gasto**: tabla `ppto.clas_objetos`
## Columnas de Búsqueda
......@@ -65,12 +89,12 @@ Solo clasificador de entidades (`clas_institucional`).
| `n_gestiones` | ✗ | ✓ "X años de datos" |
| `entidad` | ✗ | para URL |
### Objetos de gasto (futuro)
### Objetos de gasto (clas_objetos)
| Columna | Buscar | Mostrar |
|---------|--------|---------|
| `desc_objeto` | ✓ | ✓ nombre principal |
| `codigo_objeto` | ✓ | ✓ código |
| `desc_partida` | ✗ | ✓ contexto |
| `objeto` | ✓ | ✓ código (monospace) |
| `nivel` | ✗ | ✓ contexto ("Objeto del Gasto · Partida") |
## Flujo de Búsqueda
......@@ -92,7 +116,7 @@ Solo clasificador de entidades (`clas_institucional`).
```
/entidad/[codigo] → /entidad/139
/gasto/[codigo] → /gasto/25100 (futuro)
/objeto/[codigo] → /objeto/25100
/area/[codigo] → /area/1.1.4 (futuro, opcional)
```
......@@ -100,18 +124,22 @@ Solo clasificador de entidades (`clas_institucional`).
```
┌─────────────────────────────────────────────────────┐
│ 🔍 [buscar entidad, objeto de gasto...]
│ 🔍 [Buscar entidad u objeto de gasto...]
├─────────────────────────────────────────────────────┤
│ Universidad Mayor De San Andrés (UMSA) │
│ Universidades Públicas · 20 años
│ Universidad Mayor De San Andrés (UMSA) │ ← Entidad
│ Universidades Públicas
├─────────────────────────────────────────────────────┤
Universidad Pública De El Alto (UPEA) │
Universidades Públicas · 21 años
25100 Pasajes │ ← Objeto de gasto
Objeto del Gasto · Partida
├─────────────────────────────────────────────────────┤
│ ... │
└─────────────────────────────────────────────────────┘
```
### Diferencias visuales
- **Entidades**: Nombre + (sigla) en primera línea
- **Objetos de gasto**: Código (monospace) + Nombre en primera línea
## Estados del Buscador
| Estado | Qué mostrar |
......@@ -143,14 +171,19 @@ src/lib/
└── index.js ← Carga y construcción del índice
```
## Estado de Implementación
| Clasificador | Estado | Tabla |
|--------------|--------|-------|
| Entidades | ✅ Implementado | `ppto.clas_institucional` |
| Objetos de gasto | ✅ Implementado | `ppto.clas_objetos` |
| Fuente de financiamiento | ⏳ Pendiente | - |
| Geográfico | ⏳ Pendiente | - |
## Trabajo Futuro
### Índice normalizado
Cuando haya múltiples clasificadores, crear un proceso que:
1. Descargue todos los clasificadores
2. Normalice campos de búsqueda (acentos, minúsculas)
3. Genere un índice unificado optimizado
4. Posiblemente pre-computar en servidor y servir como JSON estático
### Índice pre-computado
Posibilidad de pre-computar el índice en servidor y servir como JSON estático para mejorar tiempo de carga inicial.
### Migración a servidor
Si el índice supera ~20,000 registros:
......
......@@ -7,10 +7,7 @@
</svelte:head>
<div class="max-w-4xl mx-auto p-4">
<h1 class="text-2xl mb-2">Presupuesto Público de Bolivia</h1>
<p class="mb-6 text-gray-600">
20 años de datos fiscales · 600+ entidades · Actualización diaria
</p>
<h1 class="text-2xl mb-6">Presupuesto Público de Bolivia</h1>
<div class="mb-8">
<SearchBox />
......@@ -21,9 +18,9 @@
<strong>Clasificadores</strong>
<p class="text-gray-600">Navegar por instituciones, objetos de gasto, etc.</p>
</a>
<div class="p-4 border rounded opacity-50">
<a href="/historias" class="p-4 border rounded hover:bg-gray-50">
<strong>Historias</strong>
<p class="text-gray-600">Próximamente</p>
</div>
<p class="text-gray-600">Análisis y visualizaciones del gasto público</p>
</a>
</div>
</div>
......