+page.js 1.9 KB
import { supabase } from '$lib/supabase';
import { error } from '@sveltejs/kit';

export async function load({ params }) {
  const codigo = params.codigo;
  const isDA = codigo.includes('.');
  const entidadCode = isDA ? codigo.split('.')[0] : codigo;
  const entidadNum = parseInt(entidadCode);

  if (isNaN(entidadNum)) {
    throw error(400, 'Código de entidad inválido');
  }

  // Cargar metadata y resumen en paralelo
  const [entidadRes, resumenRes] = await Promise.all([
    supabase
      .schema('ppto')
      .from('clas_institucional')
      .select('*')
      .eq('entidad', entidadNum)
      .single(),

    supabase
      .schema('ppto')
      .from('entidad_resumen')
      .select('tipo, tipo_codigo, codigo, desc, desc_padre, gestion, devengado, ranking')
      .eq('codigo', codigo)
  ]);

  if (entidadRes.error || !entidadRes.data) {
    throw error(404, 'Entidad no encontrada');
  }

  // Determinar última gestión disponible
  const gestiones = [...new Set((resumenRes.data || []).map(d => d.gestion))].sort((a, b) => b - a);
  const ultimaGestion = gestiones[0] || 2025;

  // Cargar distribuciones solo de la última gestión
  const distRes = await supabase
    .schema('ppto')
    .from('entidad_distribuciones')
    .select('tipo, dimension, gestion, padre, desc_padre, hijo, desc_hijo, devengado')
    .eq('codigo', codigo)
    .eq('gestion', ultimaGestion);

  // Resolver nombre de DA desde el resumen
  let nombreDA = null;
  let nombreEntidadMadre = null;
  if (isDA && resumenRes.data?.length > 0) {
    const firstRow = resumenRes.data[0];
    nombreDA = firstRow.desc || null;
    nombreEntidadMadre = firstRow.desc_padre || null;
  }

  return {
    entidad: entidadRes.data,
    isDA,
    nombreDA,
    nombreEntidadMadre,
    codigoEntidadPadre: isDA ? entidadCode : null,
    resumenData: resumenRes.data || [],
    distribucionesData: distRes.data || [],
    gestionInicial: ultimaGestion
  };
}