objeto.py 3.33 KB
from sqlalchemy.orm import Mapped, mapped_column
from presupuestov1.model import Base

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


class EntidadesPorObjeto(Base):
    __tablename__ = "entidades_por_objeto"
    __table_args__ = (
        Index("idx_entidades_por_objeto_objeto", "objeto"),
        Index("idx_entidades_por_objeto_objeto_nivel", "objeto", "nivel"),
        {"schema": "web"},
    )

    entidad: Mapped[int] = mapped_column(Integer, primary_key=True)
    objeto: Mapped[int] = mapped_column(Integer, primary_key=True)
    nivel: Mapped[str] = mapped_column(String(20), primary_key=True)

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


class ObjetoEstado(Base):
    __tablename__ = "objeto_estado"
    __table_args__ = (
        Index("idx_objeto_estado_gestion", "gestion"),
        Index("idx_objeto_estado_objeto", "objeto"),
        Index("idx_objeto_estado_objeto_gestion", "objeto", "gestion"),
        {"schema": "web"},
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)

    gestion: Mapped[int] = mapped_column(Integer)
    objeto: Mapped[str] = mapped_column(Text)

    total: Mapped[float | None] = mapped_column(Numeric(30, 15))
    poblacion: Mapped[int | None] = mapped_column(Numeric)
    n_entidades: Mapped[int | None] = mapped_column(Integer)
    per_capita: Mapped[float | None] = mapped_column(Numeric)
    total_gestion: Mapped[float | None] = mapped_column(Numeric(30, 15))
    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(Numeric)
    top1_entidad_desc: Mapped[str | None] = mapped_column(Text)
    top1_monto: Mapped[float | None] = mapped_column(Numeric(30, 15))
    top1_pct: Mapped[float | None] = mapped_column(Numeric)

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

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



class ObjetoEntidad(Base):
    __tablename__ = "objeto_entidad"
    __table_args__ = (
        Index("idx_objeto_entidad_gestion", "gestion"),
        Index("idx_objeto_entidad_objeto", "objeto"),
        Index("idx_objeto_entidad_objeto_entidad", "objeto", "entidad"),
        {"schema": "web"},
    )

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)

    gestion: Mapped[int] = mapped_column(Integer)
    objeto: Mapped[str] = mapped_column(Text)
    entidad: Mapped[int] = mapped_column(Integer)

    nivel: Mapped[str | None] = mapped_column(Text)
    entidad_desc: Mapped[str | None] = mapped_column(Text)
    monto: Mapped[float | None] = mapped_column(Numeric(30, 15))
    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)