Rafael Lopez

ajustes

...@@ -7,7 +7,24 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest ...@@ -7,7 +7,24 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest
7 7
8 ### Motor de búsqueda 8 ### Motor de búsqueda
9 - **Tecnología**: Fuse.js (cliente) 9 - **Tecnología**: Fuse.js (cliente)
10 -- **Razón**: ~2,000-4,000 registros totales, cabe en memoria, búsqueda instantánea sin latencia 10 +- **Razón**: ~1,000 registros totales (~600 entidades + ~450 objetos), cabe en memoria, búsqueda instantánea sin latencia
11 +
12 +### Configuración Fuse.js
13 +```javascript
14 +const fuseOptions = {
15 + keys: [
16 + { name: 'nombre_normalizado', weight: 0.6 },
17 + { name: 'sigla_normalizada', weight: 0.2 },
18 + { name: 'codigo_normalizado', weight: 0.2 }
19 + ],
20 + threshold: 0.4,
21 + distance: 100,
22 + includeScore: true,
23 + includeMatches: true,
24 + minMatchCharLength: 2,
25 + ignoreLocation: true
26 +};
27 +```
11 28
12 ### Tolerancia a errores 29 ### Tolerancia a errores
13 - Normalización de acentos ("andres" → "andrés") 30 - Normalización de acentos ("andres" → "andrés")
...@@ -24,12 +41,13 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest ...@@ -24,12 +41,13 @@ Buscador instantáneo con Fuse.js en cliente. Busca en clasificadores presupuest
24 41
25 ## Estructura del Índice 42 ## Estructura del Índice
26 43
27 -### Índice unificado (futuro) 44 +### Índice unificado (implementado)
28 Todos los clasificadores en un solo array con `tipo`: 45 Todos los clasificadores en un solo array con `tipo`:
29 46
30 ```javascript 47 ```javascript
31 -// src/lib/data/index.js 48 +// src/lib/services/search.js
32 -const indice = [ 49 +const searchData = [
50 + // Entidades
33 { 51 {
34 tipo: 'entidad', 52 tipo: 'entidad',
35 codigo: 139, 53 codigo: 139,
...@@ -37,22 +55,28 @@ const indice = [ ...@@ -37,22 +55,28 @@ const indice = [
37 sigla: 'UMSA', 55 sigla: 'UMSA',
38 contexto: 'Universidades Públicas', 56 contexto: 'Universidades Públicas',
39 años: 20, 57 años: 20,
40 - // campos normalizados para búsqueda 58 + nombre_normalizado: 'universidad mayor de san andres',
41 - _nombre_normalizado: 'universidad mayor de san andres', 59 + sigla_normalizada: 'umsa',
42 - _sigla_normalizada: 'umsa' 60 + codigo_normalizado: '139'
43 }, 61 },
62 + // Objetos de gasto
44 { 63 {
45 tipo: 'objeto_gasto', 64 tipo: 'objeto_gasto',
46 - codigo: 25100, 65 + codigo: '25100',
47 nombre: 'Pasajes', 66 nombre: 'Pasajes',
48 - contexto: 'Servicios', 67 + sigla: null,
49 - // ... 68 + contexto: 'Objeto del Gasto · Partida',
69 + nivel: 'partida',
70 + nombre_normalizado: 'pasajes',
71 + sigla_normalizada: '',
72 + codigo_normalizado: '25100'
50 } 73 }
51 ] 74 ]
52 ``` 75 ```
53 76
54 -### Por ahora (MVP) 77 +### Fuentes de datos
55 -Solo clasificador de entidades (`clas_institucional`). 78 +- **Entidades**: tabla `ppto.clas_institucional`
79 +- **Objetos de gasto**: tabla `ppto.clas_objetos`
56 80
57 ## Columnas de Búsqueda 81 ## Columnas de Búsqueda
58 82
...@@ -65,12 +89,12 @@ Solo clasificador de entidades (`clas_institucional`). ...@@ -65,12 +89,12 @@ Solo clasificador de entidades (`clas_institucional`).
65 | `n_gestiones` | ✗ | ✓ "X años de datos" | 89 | `n_gestiones` | ✗ | ✓ "X años de datos" |
66 | `entidad` | ✗ | para URL | 90 | `entidad` | ✗ | para URL |
67 91
68 -### Objetos de gasto (futuro) 92 +### Objetos de gasto (clas_objetos)
69 | Columna | Buscar | Mostrar | 93 | Columna | Buscar | Mostrar |
70 |---------|--------|---------| 94 |---------|--------|---------|
71 | `desc_objeto` | ✓ | ✓ nombre principal | 95 | `desc_objeto` | ✓ | ✓ nombre principal |
72 -| `codigo_objeto` | ✓ | ✓ código | 96 +| `objeto` | ✓ | ✓ código (monospace) |
73 -| `desc_partida` | ✗ | ✓ contexto | 97 +| `nivel` | ✗ | ✓ contexto ("Objeto del Gasto · Partida") |
74 98
75 ## Flujo de Búsqueda 99 ## Flujo de Búsqueda
76 100
...@@ -92,7 +116,7 @@ Solo clasificador de entidades (`clas_institucional`). ...@@ -92,7 +116,7 @@ Solo clasificador de entidades (`clas_institucional`).
92 116
93 ``` 117 ```
94 /entidad/[codigo] → /entidad/139 118 /entidad/[codigo] → /entidad/139
95 -/gasto/[codigo] → /gasto/25100 (futuro) 119 +/objeto/[codigo] → /objeto/25100
96 /area/[codigo] → /area/1.1.4 (futuro, opcional) 120 /area/[codigo] → /area/1.1.4 (futuro, opcional)
97 ``` 121 ```
98 122
...@@ -100,18 +124,22 @@ Solo clasificador de entidades (`clas_institucional`). ...@@ -100,18 +124,22 @@ Solo clasificador de entidades (`clas_institucional`).
100 124
101 ``` 125 ```
102 ┌─────────────────────────────────────────────────────┐ 126 ┌─────────────────────────────────────────────────────┐
103 -│ 🔍 [buscar entidad, objeto de gasto...] 127 +│ 🔍 [Buscar entidad u objeto de gasto...]
104 ├─────────────────────────────────────────────────────┤ 128 ├─────────────────────────────────────────────────────┤
105 -│ Universidad Mayor De San Andrés (UMSA) │ 129 +│ Universidad Mayor De San Andrés (UMSA) │ ← Entidad
106 -│ Universidades Públicas · 20 años 130 +│ Universidades Públicas
107 ├─────────────────────────────────────────────────────┤ 131 ├─────────────────────────────────────────────────────┤
108 -Universidad Pública De El Alto (UPEA) │ 132 +25100 Pasajes │ ← Objeto de gasto
109 -Universidades Públicas · 21 años 133 +Objeto del Gasto · Partida
110 ├─────────────────────────────────────────────────────┤ 134 ├─────────────────────────────────────────────────────┤
111 │ ... │ 135 │ ... │
112 └─────────────────────────────────────────────────────┘ 136 └─────────────────────────────────────────────────────┘
113 ``` 137 ```
114 138
139 +### Diferencias visuales
140 +- **Entidades**: Nombre + (sigla) en primera línea
141 +- **Objetos de gasto**: Código (monospace) + Nombre en primera línea
142 +
115 ## Estados del Buscador 143 ## Estados del Buscador
116 144
117 | Estado | Qué mostrar | 145 | Estado | Qué mostrar |
...@@ -143,14 +171,19 @@ src/lib/ ...@@ -143,14 +171,19 @@ src/lib/
143 └── index.js ← Carga y construcción del índice 171 └── index.js ← Carga y construcción del índice
144 ``` 172 ```
145 173
174 +## Estado de Implementación
175 +
176 +| Clasificador | Estado | Tabla |
177 +|--------------|--------|-------|
178 +| Entidades | ✅ Implementado | `ppto.clas_institucional` |
179 +| Objetos de gasto | ✅ Implementado | `ppto.clas_objetos` |
180 +| Fuente de financiamiento | ⏳ Pendiente | - |
181 +| Geográfico | ⏳ Pendiente | - |
182 +
146 ## Trabajo Futuro 183 ## Trabajo Futuro
147 184
148 -### Índice normalizado 185 +### Índice pre-computado
149 -Cuando haya múltiples clasificadores, crear un proceso que: 186 +Posibilidad de pre-computar el índice en servidor y servir como JSON estático para mejorar tiempo de carga inicial.
150 -1. Descargue todos los clasificadores
151 -2. Normalice campos de búsqueda (acentos, minúsculas)
152 -3. Genere un índice unificado optimizado
153 -4. Posiblemente pre-computar en servidor y servir como JSON estático
154 187
155 ### Migración a servidor 188 ### Migración a servidor
156 Si el índice supera ~20,000 registros: 189 Si el índice supera ~20,000 registros:
......
...@@ -7,10 +7,7 @@ ...@@ -7,10 +7,7 @@
7 </svelte:head> 7 </svelte:head>
8 8
9 <div class="max-w-4xl mx-auto p-4"> 9 <div class="max-w-4xl mx-auto p-4">
10 - <h1 class="text-2xl mb-2">Presupuesto Público de Bolivia</h1> 10 + <h1 class="text-2xl mb-6">Presupuesto Público de Bolivia</h1>
11 - <p class="mb-6 text-gray-600">
12 - 20 años de datos fiscales · 600+ entidades · Actualización diaria
13 - </p>
14 11
15 <div class="mb-8"> 12 <div class="mb-8">
16 <SearchBox /> 13 <SearchBox />
...@@ -21,9 +18,9 @@ ...@@ -21,9 +18,9 @@
21 <strong>Clasificadores</strong> 18 <strong>Clasificadores</strong>
22 <p class="text-gray-600">Navegar por instituciones, objetos de gasto, etc.</p> 19 <p class="text-gray-600">Navegar por instituciones, objetos de gasto, etc.</p>
23 </a> 20 </a>
24 - <div class="p-4 border rounded opacity-50"> 21 + <a href="/historias" class="p-4 border rounded hover:bg-gray-50">
25 <strong>Historias</strong> 22 <strong>Historias</strong>
26 - <p class="text-gray-600">Próximamente</p> 23 + <p class="text-gray-600">Análisis y visualizaciones del gasto público</p>
27 - </div> 24 + </a>
28 </div> 25 </div>
29 </div> 26 </div>
......