+page.server.js
2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { error } from '@sveltejs/kit';
import { API_HOST } from '$lib/api.js';
const API_BASE = API_HOST + '/api/finfun';
// Jerarquía finfun: Finalidad → Grupo Función → Función
// Códigos con punto: "1" (finalidad), "1.1" (grpfuncion), "1.1.1" (función)
function getNivel(codigo) {
const parts = String(codigo).split('.');
if (parts.length === 1) return 'finalidad';
if (parts.length === 2) return 'grpfuncion';
return 'funcion';
}
function getFinalidadCode(codigo) {
return String(codigo).split('.')[0];
}
function getGrpFuncionCode(codigo) {
const parts = String(codigo).split('.');
return parts.slice(0, 2).join('.');
}
export async function load({ params }) {
const { codigo } = params;
// Cargar datos del finfun desde la API
const res = await fetch(`${API_BASE}/${codigo}`);
if (!res.ok) throw error(404, 'Finalidad/Función no encontrada');
const finfun = await res.json();
const nivel = finfun.nivel || getNivel(codigo);
// Cargar clasificador completo para derivar padres e hijos
let padres = [];
let hijos = [];
try {
const clasRes = await fetch(`${API_BASE}/clasificador`);
if (clasRes.ok) {
const clasificador = await clasRes.json();
// Padres
if (nivel === 'funcion') {
const finalidadCode = getFinalidadCode(codigo);
const grpCode = getGrpFuncionCode(codigo);
padres = clasificador.filter(c => c.finfun === finalidadCode || c.finfun === grpCode);
} else if (nivel === 'grpfuncion') {
const finalidadCode = getFinalidadCode(codigo);
padres = clasificador.filter(c => c.finfun === finalidadCode);
}
// Hijos
if (nivel === 'finalidad') {
hijos = clasificador.filter(c =>
c.nivel === 'grpfuncion' && getFinalidadCode(c.finfun) === codigo && c.finfun !== codigo
);
} else if (nivel === 'grpfuncion') {
hijos = clasificador.filter(c =>
c.nivel === 'funcion' && getGrpFuncionCode(c.finfun) === codigo
);
}
padres.sort((a, b) => a.finfun.localeCompare(b.finfun));
hijos.sort((a, b) => a.finfun.localeCompare(b.finfun));
}
} catch { /* clasificador optional */ }
return {
finfun,
padres,
hijos
};
}