classifier.py 4.98 KB
from sqlalchemy.orm import Mapped, mapped_column
from presupuestov1.model import Base

from sqlalchemy import (
    Integer,
    String,
    Text,
    Numeric,
    Index,
    MetaData,
)
from sqlalchemy.dialects.postgresql import JSONB

from typing import Any


###############################################################################
# Gasto
###############################################################################

class ClasInstitucional(Base):
    __tablename__ = "clas_institucional"
    __table_args__ = (
        Index("idx_clas_institucional_entidad", "entidad"),
        {"schema": "web"},
    )

    entidad: Mapped[int] = mapped_column(Integer, primary_key=True)
    desc_entidad: Mapped[str | None] = mapped_column(Text)
    sigla_entidad: Mapped[str | None] = mapped_column(String(50))

    sector: Mapped[str | None] = mapped_column(String(10))
    desc_sector: Mapped[str | None] = mapped_column(Text)
    sigla_sector: Mapped[str | None] = mapped_column(String(20))

    subsector: Mapped[str | None] = mapped_column(String(10))
    desc_subsector: Mapped[str | None] = mapped_column(Text)
    sigla_subsector: Mapped[str | None] = mapped_column(String(20))

    area: Mapped[str | None] = mapped_column(String(10))
    desc_area: Mapped[str | None] = mapped_column(Text)
    sigla_area: Mapped[str | None] = mapped_column(String(20))

    subarea: Mapped[str | None] = mapped_column(String(10))
    desc_subarea: Mapped[str | None] = mapped_column(Text)
    sigla_subarea: Mapped[str | None] = mapped_column(String(20))

    gestiones: Mapped[str | None] = mapped_column(Text)
    n_gestiones: Mapped[int | None] = mapped_column(Integer)


class ClasBase():
    nivel: Mapped[str | None] = mapped_column(Text)

    gestiones: Mapped[str | None] = mapped_column(Text)
    n_gestiones: Mapped[int | None] = mapped_column(Integer)
    n_variaciones: Mapped[int | None] = mapped_column(Integer)

    descripciones: Mapped[list[dict[str, Any]] | None] = mapped_column(JSONB)


class ClasObjetos(ClasBase, Base):
    __tablename__ = "clas_objetos"
    __table_args__ = (
        Index("idx_clas_objetos_entidad", "objeto"),
        {"schema": "web"},
    )

    objeto: Mapped[str] = mapped_column(Text, primary_key=True)
    desc_objeto: Mapped[str | None] = mapped_column(Text)


class ClasFinfun(ClasBase, Base):
    __tablename__ = "clas_finfun"
    __table_args__ = (
        Index("idx_clas_finfun_entidad", "finfun"),
        {"schema": "web"},
    )

    finfun: Mapped[str] = mapped_column(Text, primary_key=True)
    desc_finfun: Mapped[str | None] = mapped_column(Text)


class ClasActeco(ClasBase, Base):
    __tablename__ = "clas_acteco"
    __table_args__ = (
        Index("idx_clas_acteco_entidad", "acteco"),
        {"schema": "web"},
    )

    acteco: Mapped[str] = mapped_column(Text, primary_key=True)
    desc_acteco: Mapped[str | None] = mapped_column(Text)


class ClasGeografico(ClasBase, Base):
    __tablename__ = "clas_geografico"
    __table_args__ = (
        Index("idx_clas_geografico_ubigeo", "ubigeo"),
        {"schema": "web"},
    )

    ubigeo: Mapped[str] = mapped_column(Text, primary_key=True)

    desc_departamento: Mapped[str] = mapped_column(String(18))
    desc_ubigeo: Mapped[str | None] = mapped_column(Text)

    municipio_ubigeo: Mapped[int | None] = mapped_column(Integer)


###############################################################################
# Ingreso
###############################################################################

class ClasRubros(ClasBase, Base):
    __tablename__ = "clas_rubros"
    __table_args__ = (
        Index("idx_clas_rubros_entidad", "rubro"),
        {"schema": "web"},
    )

    rubro: Mapped[str] = mapped_column(Text, primary_key=True)
    desc_rubro: Mapped[str | None] = mapped_column(Text)


class ClasFuentes(ClasBase, Base):
    __tablename__ = "clas_fuentes"
    __table_args__ = (
        Index("idx_clas_fuentes_fuente", "fuente"),
        {"schema": "web"},
    )

    fuente: Mapped[int] = mapped_column(Integer, primary_key=True)
    desc_fuente: Mapped[str] = mapped_column(Text)

    grupo_fuente: Mapped[int] = mapped_column(Integer)
    desc_grupo_fuente: Mapped[str] = mapped_column(Text)


class ClasOrganismos(Base):
    __tablename__ = "clas_organismos"
    __table_args__ = (
        Index("idx_clas_organismos_organismo", "organismo"),
        {"schema": "web"},
    )

    organismo: Mapped[int] = mapped_column(Integer, primary_key=True)
    desc_organismo: Mapped[str] = mapped_column(Text)
    sigla_organismo: Mapped[str] = mapped_column(String(20))

    organismo_grupo: Mapped[int] = mapped_column(Integer)
    desc_organismo_grupo: Mapped[str] = mapped_column(Text)
    sigla_organismo_grupo: Mapped[str] = mapped_column(String(20))

    organismo_subgrupo: Mapped[int] = mapped_column(Integer)
    desc_organismo_subgrupo: Mapped[str] = mapped_column(Text)
    sigla_organismo_subgrupo: Mapped[str] = mapped_column(String(20))

    gestiones: Mapped[str | None] = mapped_column(Text)
    n_gestiones: Mapped[int | None] = mapped_column(Integer)