finfun.py 3.03 KB
from sqlalchemy.orm import Mapped, mapped_column
from presupuestov1.schema import BaseModel

from sqlalchemy import (
    Integer,
    String,
    Text,
    Numeric,
    Index,
    MetaData,
)


class EntidadesPorFinfun(BaseModel):
    __tablename__ = "entidades_por_finfun"
    __table_args__ = (
        Index("idx_entidades_por_finfun_finfun", "finfun"),
        Index("idx_entidades_por_finfun_finfun_nivel", "finfun", "nivel"),
    )

    finfun: Mapped[str] = mapped_column(Text, primary_key=True)
    entidad: Mapped[int] = mapped_column(Integer, primary_key=True)
    nivel: Mapped[str] = mapped_column(Text, primary_key=True)

    entidad_desc: Mapped[str | None] = mapped_column(Text)


class FinfunEstado(BaseModel):
    __tablename__ = "finfun_estado"
    __table_args__ = (
        Index("idx_finfun_estado_finfun", "finfun"),
        Index("idx_finfun_estado_finfun_gestion", "finfun", "gestion"),
    )

    gestion: Mapped[int] = mapped_column(Integer, primary_key=True)
    finfun: Mapped[str] = mapped_column(Text, primary_key=True)

    total: Mapped[float | None] = mapped_column(Numeric)
    poblacion: Mapped[int | None] = mapped_column(Integer)
    n_entidades: Mapped[int | None] = mapped_column(Integer)
    per_capita: Mapped[float | None] = mapped_column(Numeric)
    total_gestion: Mapped[float | None] = mapped_column(Numeric)
    prop: Mapped[float | None] = mapped_column(Numeric)
    ranking: Mapped[int | None] = mapped_column(Integer)
    n_pares: Mapped[int | None] = mapped_column(Integer)

    top1_entidad: Mapped[int | None] = mapped_column(Integer)
    top1_entidad_desc: Mapped[str | None] = mapped_column(Text)
    top1_monto: Mapped[float | None] = mapped_column(Numeric)
    top1_pct: Mapped[float | None] = mapped_column(Numeric)

    top2_entidad: Mapped[int | None] = mapped_column(Integer)
    top2_entidad_desc: Mapped[str | None] = mapped_column(Text)
    top2_monto: Mapped[float | None] = mapped_column(Numeric)
    top2_pct: Mapped[float | None] = mapped_column(Numeric)

    top3_entidad: Mapped[int | None] = mapped_column(Integer)
    top3_entidad_desc: Mapped[str | None] = mapped_column(Text)
    top3_monto: Mapped[float | None] = mapped_column(Numeric)
    top3_pct: Mapped[float | None] = mapped_column(Numeric)


class FinfunEntidad(BaseModel):
    __tablename__ = "finfun_entidad"
    __table_args__ = (
        Index("idx_finfun_entidad_finfun", "finfun"),
        Index("idx_finfun_entidad_finfun_entidad", "finfun", "entidad"),
    )

    gestion: Mapped[int] = mapped_column(Integer, primary_key=True)
    finfun: Mapped[str] = mapped_column(Text, primary_key=True)
    entidad: Mapped[int] = mapped_column(Integer, primary_key=True)

    nivel: Mapped[str | None] = mapped_column(Text)
    entidad_desc: Mapped[str | None] = mapped_column(Text)
    monto: Mapped[float | None] = mapped_column(Numeric)
    per_capita: Mapped[float | None] = mapped_column(Numeric)
    ranking: Mapped[int | None] = mapped_column(Integer)
    prop: Mapped[float | None] = mapped_column(Numeric)
    n_entidades: Mapped[int | None] = mapped_column(Integer)