Showing
15 changed files
with
453 additions
and
70 deletions
| ... | @@ -8,58 +8,65 @@ from sqlalchemy import ( | ... | @@ -8,58 +8,65 @@ from sqlalchemy import ( |
| 8 | Numeric, | 8 | Numeric, |
| 9 | Index, | 9 | Index, |
| 10 | MetaData, | 10 | MetaData, |
| 11 | + BigInteger, | ||
| 11 | ) | 12 | ) |
| 12 | 13 | ||
| 13 | 14 | ||
| 14 | class ActecoEstado(Base): | 15 | class ActecoEstado(Base): |
| 15 | - __tablename__ = "finfun_estado" | 16 | + __tablename__ = "acteco_estado" |
| 16 | __table_args__ = ( | 17 | __table_args__ = ( |
| 18 | + Index("idx_acteco_estado_gestion", "gestion"), | ||
| 17 | Index("idx_acteco_estado_acteco", "acteco"), | 19 | Index("idx_acteco_estado_acteco", "acteco"), |
| 18 | Index("idx_acteco_estado_acteco_gestion", "acteco", "gestion"), | 20 | Index("idx_acteco_estado_acteco_gestion", "acteco", "gestion"), |
| 19 | ) | 21 | ) |
| 20 | 22 | ||
| 21 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 23 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 22 | - acteco: Mapped[str] = mapped_column(Text, primary_key=True) | ||
| 23 | 24 | ||
| 24 | - total: Mapped[float | None] = mapped_column(Numeric) | 25 | + gestion: Mapped[int] = mapped_column(Integer) |
| 25 | - poblacion: Mapped[int | None] = mapped_column(Integer) | 26 | + acteco: Mapped[str] = mapped_column(String(9)) |
| 27 | + | ||
| 28 | + total: Mapped[float | None] = mapped_column(Numeric(30, 15)) | ||
| 29 | + poblacion: Mapped[int | None] = mapped_column(Numeric) | ||
| 26 | n_entidades: Mapped[int | None] = mapped_column(Integer) | 30 | n_entidades: Mapped[int | None] = mapped_column(Integer) |
| 27 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 31 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 28 | - total_gestion: Mapped[float | None] = mapped_column(Numeric) | 32 | + total_gestion: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 29 | prop: Mapped[float | None] = mapped_column(Numeric) | 33 | prop: Mapped[float | None] = mapped_column(Numeric) |
| 30 | ranking: Mapped[int | None] = mapped_column(Integer) | 34 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 31 | n_pares: Mapped[int | None] = mapped_column(Integer) | 35 | n_pares: Mapped[int | None] = mapped_column(Integer) |
| 32 | 36 | ||
| 33 | - top1_entidad: Mapped[int | None] = mapped_column(Integer) | 37 | + top1_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 34 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) | 38 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 35 | - top1_monto: Mapped[float | None] = mapped_column(Numeric) | 39 | + top1_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 36 | top1_pct: Mapped[float | None] = mapped_column(Numeric) | 40 | top1_pct: Mapped[float | None] = mapped_column(Numeric) |
| 37 | 41 | ||
| 38 | - top2_entidad: Mapped[int | None] = mapped_column(Integer) | 42 | + top2_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 39 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) | 43 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 40 | - top2_monto: Mapped[float | None] = mapped_column(Numeric) | 44 | + top2_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 41 | top2_pct: Mapped[float | None] = mapped_column(Numeric) | 45 | top2_pct: Mapped[float | None] = mapped_column(Numeric) |
| 42 | 46 | ||
| 43 | - top3_entidad: Mapped[int | None] = mapped_column(Integer) | 47 | + top3_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 44 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) | 48 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 45 | - top3_monto: Mapped[float | None] = mapped_column(Numeric) | 49 | + top3_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 46 | top3_pct: Mapped[float | None] = mapped_column(Numeric) | 50 | top3_pct: Mapped[float | None] = mapped_column(Numeric) |
| 47 | 51 | ||
| 48 | 52 | ||
| 49 | class ActecoEntidad(Base): | 53 | class ActecoEntidad(Base): |
| 50 | __tablename__ = "acteco_entidad" | 54 | __tablename__ = "acteco_entidad" |
| 51 | __table_args__ = ( | 55 | __table_args__ = ( |
| 52 | - Index("idx_finfun_entidad_acteco", "acteco"), | 56 | + Index("idx_acteco_entidad_gestion", "gestion"), |
| 53 | - Index("idx_finfun_entidad_acteco_entidad", "acteco", "entidad"), | 57 | + Index("idx_acteco_entidad_acteco", "acteco"), |
| 58 | + Index("idx_acteco_entidad_acteco_entidad", "acteco", "entidad"), | ||
| 54 | ) | 59 | ) |
| 55 | 60 | ||
| 56 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 61 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 57 | - acteco: Mapped[str] = mapped_column(Text, primary_key=True) | 62 | + |
| 58 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 63 | + gestion: Mapped[int] = mapped_column(Integer) |
| 64 | + acteco: Mapped[str] = mapped_column(String(9)) | ||
| 65 | + entidad: Mapped[int] = mapped_column(Integer) | ||
| 59 | 66 | ||
| 60 | nivel: Mapped[str | None] = mapped_column(Text) | 67 | nivel: Mapped[str | None] = mapped_column(Text) |
| 61 | entidad_desc: Mapped[str | None] = mapped_column(Text) | 68 | entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 62 | - monto: Mapped[float | None] = mapped_column(Numeric) | 69 | + monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 63 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 70 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 64 | ranking: Mapped[int | None] = mapped_column(Integer) | 71 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 65 | prop: Mapped[float | None] = mapped_column(Numeric) | 72 | prop: Mapped[float | None] = mapped_column(Numeric) | ... | ... |
| ... | @@ -11,9 +11,14 @@ from sqlalchemy import ( | ... | @@ -11,9 +11,14 @@ from sqlalchemy import ( |
| 11 | ) | 11 | ) |
| 12 | from sqlalchemy.dialects.postgresql import JSONB | 12 | from sqlalchemy.dialects.postgresql import JSONB |
| 13 | 13 | ||
| 14 | +from typing import Any | ||
| 15 | + | ||
| 14 | 16 | ||
| 15 | class ClasInstitucional(Base): | 17 | class ClasInstitucional(Base): |
| 16 | __tablename__ = "clas_institucional" | 18 | __tablename__ = "clas_institucional" |
| 19 | + __table_args__ = ( | ||
| 20 | + Index("idx_clas_institucional_entidad", "entidad"), | ||
| 21 | + ) | ||
| 17 | 22 | ||
| 18 | entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 23 | entidad: Mapped[int] = mapped_column(Integer, primary_key=True) |
| 19 | desc_entidad: Mapped[str | None] = mapped_column(Text) | 24 | desc_entidad: Mapped[str | None] = mapped_column(Text) |
| ... | @@ -41,6 +46,9 @@ class ClasInstitucional(Base): | ... | @@ -41,6 +46,9 @@ class ClasInstitucional(Base): |
| 41 | 46 | ||
| 42 | class ClasObjetos(Base): | 47 | class ClasObjetos(Base): |
| 43 | __tablename__ = "clas_objetos" | 48 | __tablename__ = "clas_objetos" |
| 49 | + __table_args__ = ( | ||
| 50 | + Index("idx_clas_objetos_entidad", "objeto"), | ||
| 51 | + ) | ||
| 44 | 52 | ||
| 45 | nivel: Mapped[str | None] = mapped_column(Text) | 53 | nivel: Mapped[str | None] = mapped_column(Text) |
| 46 | objeto: Mapped[str] = mapped_column(Text, primary_key=True) | 54 | objeto: Mapped[str] = mapped_column(Text, primary_key=True) |
| ... | @@ -55,6 +63,9 @@ class ClasObjetos(Base): | ... | @@ -55,6 +63,9 @@ class ClasObjetos(Base): |
| 55 | 63 | ||
| 56 | class ClasRubros(Base): | 64 | class ClasRubros(Base): |
| 57 | __tablename__ = "clas_rubros" | 65 | __tablename__ = "clas_rubros" |
| 66 | + __table_args__ = ( | ||
| 67 | + Index("idx_clas_rubros_entidad", "rubro"), | ||
| 68 | + ) | ||
| 58 | 69 | ||
| 59 | nivel: Mapped[str | None] = mapped_column(Text) | 70 | nivel: Mapped[str | None] = mapped_column(Text) |
| 60 | rubro: Mapped[str] = mapped_column(Text, primary_key=True) | 71 | rubro: Mapped[str] = mapped_column(Text, primary_key=True) |
| ... | @@ -69,6 +80,9 @@ class ClasRubros(Base): | ... | @@ -69,6 +80,9 @@ class ClasRubros(Base): |
| 69 | 80 | ||
| 70 | class ClasFinfun(Base): | 81 | class ClasFinfun(Base): |
| 71 | __tablename__ = "clas_finfun" | 82 | __tablename__ = "clas_finfun" |
| 83 | + __table_args__ = ( | ||
| 84 | + Index("idx_clas_finfun_entidad", "finfun"), | ||
| 85 | + ) | ||
| 72 | 86 | ||
| 73 | nivel: Mapped[str | None] = mapped_column(Text) | 87 | nivel: Mapped[str | None] = mapped_column(Text) |
| 74 | finfun: Mapped[str] = mapped_column(Text, primary_key=True) | 88 | finfun: Mapped[str] = mapped_column(Text, primary_key=True) |
| ... | @@ -79,3 +93,20 @@ class ClasFinfun(Base): | ... | @@ -79,3 +93,20 @@ class ClasFinfun(Base): |
| 79 | n_variaciones: Mapped[int | None] = mapped_column(Integer) | 93 | n_variaciones: Mapped[int | None] = mapped_column(Integer) |
| 80 | 94 | ||
| 81 | descripciones: Mapped[list[dict[str, Any]] | None] = mapped_column(JSONB) | 95 | descripciones: Mapped[list[dict[str, Any]] | None] = mapped_column(JSONB) |
| 96 | + | ||
| 97 | + | ||
| 98 | +class ClasActeco(Base): | ||
| 99 | + __tablename__ = "clas_acteco" | ||
| 100 | + __table_args__ = ( | ||
| 101 | + Index("idx_clas_acteco_entidad", "acteco"), | ||
| 102 | + ) | ||
| 103 | + | ||
| 104 | + nivel: Mapped[str | None] = mapped_column(Text) | ||
| 105 | + acteco: Mapped[str] = mapped_column(Text, primary_key=True) | ||
| 106 | + desc_acteco: Mapped[str | None] = mapped_column(Text) | ||
| 107 | + | ||
| 108 | + gestiones: Mapped[str | None] = mapped_column(Text) | ||
| 109 | + n_gestiones: Mapped[int | None] = mapped_column(Integer) | ||
| 110 | + n_variaciones: Mapped[int | None] = mapped_column(Integer) | ||
| 111 | + | ||
| 112 | + descripciones: Mapped[list[dict[str, Any]] | None] = mapped_column(JSONB) | ... | ... |
| ... | @@ -28,52 +28,58 @@ class EntidadesPorFinfun(Base): | ... | @@ -28,52 +28,58 @@ class EntidadesPorFinfun(Base): |
| 28 | class FinfunEstado(Base): | 28 | class FinfunEstado(Base): |
| 29 | __tablename__ = "finfun_estado" | 29 | __tablename__ = "finfun_estado" |
| 30 | __table_args__ = ( | 30 | __table_args__ = ( |
| 31 | + Index("idx_finfun_estado_gestion", "gestion"), | ||
| 31 | Index("idx_finfun_estado_finfun", "finfun"), | 32 | Index("idx_finfun_estado_finfun", "finfun"), |
| 32 | Index("idx_finfun_estado_finfun_gestion", "finfun", "gestion"), | 33 | Index("idx_finfun_estado_finfun_gestion", "finfun", "gestion"), |
| 33 | ) | 34 | ) |
| 34 | 35 | ||
| 35 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 36 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 36 | - finfun: Mapped[str] = mapped_column(Text, primary_key=True) | ||
| 37 | 37 | ||
| 38 | - total: Mapped[float | None] = mapped_column(Numeric) | 38 | + gestion: Mapped[int] = mapped_column(Integer) |
| 39 | - poblacion: Mapped[int | None] = mapped_column(Integer) | 39 | + finfun: Mapped[str] = mapped_column(Text) |
| 40 | + total: Mapped[float | None] = mapped_column(Numeric(30, 15)) | ||
| 41 | + poblacion: Mapped[int | None] = mapped_column(Numeric) | ||
| 40 | n_entidades: Mapped[int | None] = mapped_column(Integer) | 42 | n_entidades: Mapped[int | None] = mapped_column(Integer) |
| 41 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 43 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 42 | - total_gestion: Mapped[float | None] = mapped_column(Numeric) | 44 | + total_gestion: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 43 | prop: Mapped[float | None] = mapped_column(Numeric) | 45 | prop: Mapped[float | None] = mapped_column(Numeric) |
| 44 | ranking: Mapped[int | None] = mapped_column(Integer) | 46 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 45 | n_pares: Mapped[int | None] = mapped_column(Integer) | 47 | n_pares: Mapped[int | None] = mapped_column(Integer) |
| 46 | 48 | ||
| 47 | - top1_entidad: Mapped[int | None] = mapped_column(Integer) | 49 | + top1_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 48 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) | 50 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 49 | - top1_monto: Mapped[float | None] = mapped_column(Numeric) | 51 | + top1_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 50 | top1_pct: Mapped[float | None] = mapped_column(Numeric) | 52 | top1_pct: Mapped[float | None] = mapped_column(Numeric) |
| 51 | 53 | ||
| 52 | - top2_entidad: Mapped[int | None] = mapped_column(Integer) | 54 | + top2_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 53 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) | 55 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 54 | - top2_monto: Mapped[float | None] = mapped_column(Numeric) | 56 | + top2_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 55 | top2_pct: Mapped[float | None] = mapped_column(Numeric) | 57 | top2_pct: Mapped[float | None] = mapped_column(Numeric) |
| 56 | 58 | ||
| 57 | - top3_entidad: Mapped[int | None] = mapped_column(Integer) | 59 | + top3_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 58 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) | 60 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 59 | - top3_monto: Mapped[float | None] = mapped_column(Numeric) | 61 | + top3_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 60 | top3_pct: Mapped[float | None] = mapped_column(Numeric) | 62 | top3_pct: Mapped[float | None] = mapped_column(Numeric) |
| 61 | 63 | ||
| 62 | 64 | ||
| 65 | + | ||
| 63 | class FinfunEntidad(Base): | 66 | class FinfunEntidad(Base): |
| 64 | __tablename__ = "finfun_entidad" | 67 | __tablename__ = "finfun_entidad" |
| 65 | __table_args__ = ( | 68 | __table_args__ = ( |
| 69 | + Index("idx_finfun_entidad_gestion", "gestion"), | ||
| 66 | Index("idx_finfun_entidad_finfun", "finfun"), | 70 | Index("idx_finfun_entidad_finfun", "finfun"), |
| 67 | Index("idx_finfun_entidad_finfun_entidad", "finfun", "entidad"), | 71 | Index("idx_finfun_entidad_finfun_entidad", "finfun", "entidad"), |
| 68 | ) | 72 | ) |
| 69 | 73 | ||
| 70 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 74 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 71 | - finfun: Mapped[str] = mapped_column(Text, primary_key=True) | 75 | + |
| 72 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 76 | + gestion: Mapped[int] = mapped_column(Integer) |
| 77 | + finfun: Mapped[str] = mapped_column(Text) | ||
| 78 | + entidad: Mapped[int] = mapped_column(Integer) | ||
| 73 | 79 | ||
| 74 | nivel: Mapped[str | None] = mapped_column(Text) | 80 | nivel: Mapped[str | None] = mapped_column(Text) |
| 75 | entidad_desc: Mapped[str | None] = mapped_column(Text) | 81 | entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 76 | - monto: Mapped[float | None] = mapped_column(Numeric) | 82 | + monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 77 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 83 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 78 | ranking: Mapped[int | None] = mapped_column(Integer) | 84 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 79 | prop: Mapped[float | None] = mapped_column(Numeric) | 85 | prop: Mapped[float | None] = mapped_column(Numeric) | ... | ... |
| ... | @@ -28,52 +28,59 @@ class EntidadesPorObjeto(Base): | ... | @@ -28,52 +28,59 @@ class EntidadesPorObjeto(Base): |
| 28 | class ObjetoEstado(Base): | 28 | class ObjetoEstado(Base): |
| 29 | __tablename__ = "objeto_estado" | 29 | __tablename__ = "objeto_estado" |
| 30 | __table_args__ = ( | 30 | __table_args__ = ( |
| 31 | + Index("idx_objeto_estado_gestion", "gestion"), | ||
| 31 | Index("idx_objeto_estado_objeto", "objeto"), | 32 | Index("idx_objeto_estado_objeto", "objeto"), |
| 32 | Index("idx_objeto_estado_objeto_gestion", "objeto", "gestion"), | 33 | Index("idx_objeto_estado_objeto_gestion", "objeto", "gestion"), |
| 33 | ) | 34 | ) |
| 34 | 35 | ||
| 35 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 36 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 36 | - objeto: Mapped[str] = mapped_column(Text, primary_key=True) | ||
| 37 | 37 | ||
| 38 | - total: Mapped[float | None] = mapped_column(Numeric) | 38 | + gestion: Mapped[int] = mapped_column(Integer) |
| 39 | - poblacion: Mapped[int | None] = mapped_column(Integer) | 39 | + objeto: Mapped[str] = mapped_column(Text) |
| 40 | + | ||
| 41 | + total: Mapped[float | None] = mapped_column(Numeric(30, 15)) | ||
| 42 | + poblacion: Mapped[int | None] = mapped_column(Numeric) | ||
| 40 | n_entidades: Mapped[int | None] = mapped_column(Integer) | 43 | n_entidades: Mapped[int | None] = mapped_column(Integer) |
| 41 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 44 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 42 | - total_gestion: Mapped[float | None] = mapped_column(Numeric) | 45 | + total_gestion: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 43 | prop: Mapped[float | None] = mapped_column(Numeric) | 46 | prop: Mapped[float | None] = mapped_column(Numeric) |
| 44 | ranking: Mapped[int | None] = mapped_column(Integer) | 47 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 45 | n_pares: Mapped[int | None] = mapped_column(Integer) | 48 | n_pares: Mapped[int | None] = mapped_column(Integer) |
| 46 | 49 | ||
| 47 | - top1_entidad: Mapped[int | None] = mapped_column(Integer) | 50 | + top1_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 48 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) | 51 | top1_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 49 | - top1_monto: Mapped[float | None] = mapped_column(Numeric) | 52 | + top1_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 50 | top1_pct: Mapped[float | None] = mapped_column(Numeric) | 53 | top1_pct: Mapped[float | None] = mapped_column(Numeric) |
| 51 | 54 | ||
| 52 | - top2_entidad: Mapped[int | None] = mapped_column(Integer) | 55 | + top2_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 53 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) | 56 | top2_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 54 | - top2_monto: Mapped[float | None] = mapped_column(Numeric) | 57 | + top2_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 55 | top2_pct: Mapped[float | None] = mapped_column(Numeric) | 58 | top2_pct: Mapped[float | None] = mapped_column(Numeric) |
| 56 | 59 | ||
| 57 | - top3_entidad: Mapped[int | None] = mapped_column(Integer) | 60 | + top3_entidad: Mapped[int | None] = mapped_column(Numeric) |
| 58 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) | 61 | top3_entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 59 | - top3_monto: Mapped[float | None] = mapped_column(Numeric) | 62 | + top3_monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 60 | top3_pct: Mapped[float | None] = mapped_column(Numeric) | 63 | top3_pct: Mapped[float | None] = mapped_column(Numeric) |
| 61 | 64 | ||
| 62 | 65 | ||
| 66 | + | ||
| 63 | class ObjetoEntidad(Base): | 67 | class ObjetoEntidad(Base): |
| 64 | __tablename__ = "objeto_entidad" | 68 | __tablename__ = "objeto_entidad" |
| 65 | __table_args__ = ( | 69 | __table_args__ = ( |
| 66 | - Index("idx_finfun_entidad_objeto", "objeto"), | 70 | + Index("idx_objeto_entidad_gestion", "gestion"), |
| 67 | - Index("idx_finfun_entidad_objeto_entidad", "objeto", "entidad"), | 71 | + Index("idx_objeto_entidad_objeto", "objeto"), |
| 72 | + Index("idx_objeto_entidad_objeto_entidad", "objeto", "entidad"), | ||
| 68 | ) | 73 | ) |
| 69 | 74 | ||
| 70 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 75 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 71 | - objeto: Mapped[str] = mapped_column(Text, primary_key=True) | 76 | + |
| 72 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 77 | + gestion: Mapped[int] = mapped_column(Integer) |
| 78 | + objeto: Mapped[str] = mapped_column(Text) | ||
| 79 | + entidad: Mapped[int] = mapped_column(Integer) | ||
| 73 | 80 | ||
| 74 | nivel: Mapped[str | None] = mapped_column(Text) | 81 | nivel: Mapped[str | None] = mapped_column(Text) |
| 75 | entidad_desc: Mapped[str | None] = mapped_column(Text) | 82 | entidad_desc: Mapped[str | None] = mapped_column(Text) |
| 76 | - monto: Mapped[float | None] = mapped_column(Numeric) | 83 | + monto: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 77 | per_capita: Mapped[float | None] = mapped_column(Numeric) | 84 | per_capita: Mapped[float | None] = mapped_column(Numeric) |
| 78 | ranking: Mapped[int | None] = mapped_column(Integer) | 85 | ranking: Mapped[int | None] = mapped_column(Integer) |
| 79 | prop: Mapped[float | None] = mapped_column(Numeric) | 86 | prop: Mapped[float | None] = mapped_column(Numeric) | ... | ... |
| ... | @@ -15,48 +15,57 @@ class TreemapObjeto(Base): | ... | @@ -15,48 +15,57 @@ class TreemapObjeto(Base): |
| 15 | __tablename__ = "treemap_objeto" | 15 | __tablename__ = "treemap_objeto" |
| 16 | __table_args__ = ( | 16 | __table_args__ = ( |
| 17 | Index("idx_treemap_objeto_gestion_entidad", "gestion", "entidad"), | 17 | Index("idx_treemap_objeto_gestion_entidad", "gestion", "entidad"), |
| 18 | + Index("idx_treemap_objeto_nivel", "nivel"), | ||
| 18 | ) | 19 | ) |
| 19 | 20 | ||
| 20 | # PK compuesta inferida para uso ORM | 21 | # PK compuesta inferida para uso ORM |
| 21 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 22 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 22 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 23 | + |
| 23 | - nivel: Mapped[str] = mapped_column(String(20), primary_key=True) | 24 | + gestion: Mapped[int] = mapped_column(Integer) |
| 24 | - objeto: Mapped[int] = mapped_column(Integer, primary_key=True) | 25 | + entidad: Mapped[int] = mapped_column(Integer) |
| 26 | + objeto: Mapped[int] = mapped_column(Integer) | ||
| 27 | + nivel: Mapped[str | None] = mapped_column(String(20)) | ||
| 25 | 28 | ||
| 26 | desc_objeto: Mapped[str | None] = mapped_column(Text) | 29 | desc_objeto: Mapped[str | None] = mapped_column(Text) |
| 27 | parent: Mapped[int | None] = mapped_column(Integer) | 30 | parent: Mapped[int | None] = mapped_column(Integer) |
| 28 | - devengado: Mapped[float | None] = mapped_column(Numeric) | 31 | + devengado: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 29 | 32 | ||
| 30 | 33 | ||
| 31 | class TreemapFinFun(Base): | 34 | class TreemapFinFun(Base): |
| 32 | __tablename__ = "treemap_finfun" | 35 | __tablename__ = "treemap_finfun" |
| 33 | __table_args__ = ( | 36 | __table_args__ = ( |
| 34 | Index("idx_treemap_finfun_gestion_entidad", "gestion", "entidad"), | 37 | Index("idx_treemap_finfun_gestion_entidad", "gestion", "entidad"), |
| 38 | + Index("idx_treemap_finfun_nivel", "nivel"), | ||
| 35 | ) | 39 | ) |
| 36 | 40 | ||
| 37 | # PK compuesta inferida para uso ORM | 41 | # PK compuesta inferida para uso ORM |
| 38 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 42 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 39 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | 43 | + |
| 40 | - nivel: Mapped[str] = mapped_column(String(20), primary_key=True) | 44 | + gestion: Mapped[int] = mapped_column(Integer) |
| 41 | - finfun: Mapped[int] = mapped_column(String(9), primary_key=True) | 45 | + entidad: Mapped[int] = mapped_column(Integer) |
| 46 | + finfun: Mapped[str] = mapped_column(String(9)) | ||
| 47 | + nivel: Mapped[str | None] = mapped_column(String(20)) | ||
| 42 | 48 | ||
| 43 | desc_finfun: Mapped[str | None] = mapped_column(Text) | 49 | desc_finfun: Mapped[str | None] = mapped_column(Text) |
| 44 | - parent: Mapped[int | None] = mapped_column(Integer) | 50 | + parent: Mapped[str | None] = mapped_column(String(9)) |
| 45 | - devengado: Mapped[float | None] = mapped_column(Numeric) | 51 | + devengado: Mapped[float | None] = mapped_column(Numeric(30, 15)) |
| 46 | 52 | ||
| 47 | 53 | ||
| 48 | class TreemapActeco(Base): | 54 | class TreemapActeco(Base): |
| 49 | __tablename__ = "treemap_acteco" | 55 | __tablename__ = "treemap_acteco" |
| 50 | __table_args__ = ( | 56 | __table_args__ = ( |
| 51 | Index("idx_treemap_acteco_gestion_entidad", "gestion", "entidad"), | 57 | Index("idx_treemap_acteco_gestion_entidad", "gestion", "entidad"), |
| 58 | + Index("idx_treemap_acteco_nivel", "nivel"), | ||
| 52 | ) | 59 | ) |
| 53 | 60 | ||
| 54 | # PK compuesta inferida para uso ORM | 61 | # PK compuesta inferida para uso ORM |
| 55 | - gestion: Mapped[int] = mapped_column(Integer, primary_key=True) | 62 | + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) |
| 56 | - entidad: Mapped[int] = mapped_column(Integer, primary_key=True) | ||
| 57 | - nivel: Mapped[str] = mapped_column(String(20), primary_key=True) | ||
| 58 | - acteco: Mapped[int] = mapped_column(String(9), primary_key=True) | ||
| 59 | 63 | ||
| 60 | - desc_actividad: Mapped[str | None] = mapped_column(Text) | ||
| 61 | - parent: Mapped[int | None] = mapped_column(Integer) | ||
| 62 | - devengado: Mapped[float | None] = mapped_column(Numeric) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 64 | + gestion: Mapped[int] = mapped_column(Integer) | ||
| 65 | + entidad: Mapped[int] = mapped_column(Integer) | ||
| 66 | + acteco: Mapped[str] = mapped_column(String(9)) | ||
| 67 | + nivel: Mapped[str | None] = mapped_column(String(20)) | ||
| 68 | + | ||
| 69 | + desc_acteco: Mapped[str | None] = mapped_column(Text) | ||
| 70 | + parent: Mapped[str | None] = mapped_column(String(9)) | ||
| 71 | + devengado: Mapped[float | None] = mapped_column(Numeric(30, 15)) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
routers/entity.py
0 → 100644
| 1 | +import time | ||
| 2 | + | ||
| 3 | +from typing import List, Any, Optional, Union | ||
| 4 | + | ||
| 5 | +from fastapi import APIRouter, Depends, Request, HTTPException, Body | ||
| 6 | +from sqlalchemy.orm import Session | ||
| 7 | +from sqlalchemy import and_, or_ | ||
| 8 | + | ||
| 9 | +from presupuestov1 import model, schema, constant, schemas, models, search | ||
| 10 | + | ||
| 11 | +from aiocache import cached | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +router = APIRouter( | ||
| 15 | + prefix='/entidad', | ||
| 16 | + tags=['entidad'], | ||
| 17 | +) | ||
| 18 | + | ||
| 19 | + | ||
| 20 | +############################################################################### | ||
| 21 | +# GET | ||
| 22 | +############################################################################### | ||
| 23 | + | ||
| 24 | +@router.get('/{entity_id}', response_model=schemas.classifier.ClasInstitucional) | ||
| 25 | +def fetch_entity( | ||
| 26 | + entity_id: int, | ||
| 27 | + db: Session = Depends(model.get_db), | ||
| 28 | +): | ||
| 29 | + ClasInstitucional = models.classifier.ClasInstitucional | ||
| 30 | + return db.query(ClasInstitucional).filter( | ||
| 31 | + ClasInstitucional.entidad == entity_id | ||
| 32 | + ).one() | ||
| 33 | + | ||
| 34 | + | ||
| 35 | +@router.get('/clasificador', response_model=List[schemas.classifier.ClasInstitucional]) | ||
| 36 | +def fetch_classifier( | ||
| 37 | + db: Session = Depends(model.get_db), | ||
| 38 | +): | ||
| 39 | + return db.query(models.classifier.ClasInstitucional).all() | ||
| 40 | + | ||
| 41 | + | ||
| 42 | +@router.get('/{entity_id}/objetos', response_model=List[schemas.treemap.TreemapObjeto]) | ||
| 43 | +def fetch_entity( | ||
| 44 | + entity_id: int, | ||
| 45 | + db: Session = Depends(model.get_db), | ||
| 46 | + query: schema.QueryParams = Depends(), | ||
| 47 | +): | ||
| 48 | + TreemapObjeto = models.treemap.TreemapObjeto | ||
| 49 | + return get_entity_connections(entity_id, db, query, TreemapObjeto, 'objeto') | ||
| 50 | + | ||
| 51 | + | ||
| 52 | +router.get('/{entity_id}/finfuns', response_model=List[schemas.treemap.TreemapFinfun]) | ||
| 53 | +def fetch_entity( | ||
| 54 | + entity_id: int, | ||
| 55 | + db: Session = Depends(model.get_db), | ||
| 56 | + query: schema.QueryParams = Depends(), | ||
| 57 | +): | ||
| 58 | + TreemapFinFun = models.treemap.TreemapFinFun | ||
| 59 | + return get_entity_connections(entity_id, db, query, TreemapFinFun, 'finfun') | ||
| 60 | + | ||
| 61 | + | ||
| 62 | +@router.get('/{entity_id}/actecos', response_model=List[schemas.treemap.TreemapActeco]) | ||
| 63 | +def fetch_entity( | ||
| 64 | + entity_id: int, | ||
| 65 | + db: Session = Depends(model.get_db), | ||
| 66 | + query: schema.QueryParams = Depends(), | ||
| 67 | +): | ||
| 68 | + TreemapActeco = models.treemap.TreemapActeco | ||
| 69 | + return get_entity_connections(entity_id, db, query, TreemapActeco, 'acteco') | ||
| 70 | + | ||
| 71 | + | ||
| 72 | +############################################################################### | ||
| 73 | +# Private | ||
| 74 | +############################################################################### | ||
| 75 | + | ||
| 76 | +def get_entity_connections(entity_id, db, query, ClassObject, object_id): | ||
| 77 | + if query.gestion is None: | ||
| 78 | + query.gestion = 0 | ||
| 79 | + | ||
| 80 | + query_filters = [ | ||
| 81 | + ClassObject.entidad == entity_id, | ||
| 82 | + ClassObject.gestion == query.gestion, | ||
| 83 | + ] | ||
| 84 | + | ||
| 85 | + if query.id is not None: | ||
| 86 | + ids = query.id.split(',') | ||
| 87 | + ids = [int(_.strip()) for _ in ids] | ||
| 88 | + | ||
| 89 | + ids = or_([getattr(ClassObject, object_id) == _ for _ in ids]) | ||
| 90 | + query_filters.append(ids) | ||
| 91 | + | ||
| 92 | + return db.query(ClassObject).filter(and_(*query_filters)).all() | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| ... | @@ -31,7 +31,7 @@ router = APIRouter( | ... | @@ -31,7 +31,7 @@ router = APIRouter( |
| 31 | 31 | ||
| 32 | @router.get('/search', response_model=schemas.project.Search) | 32 | @router.get('/search', response_model=schemas.project.Search) |
| 33 | def fetch_search( | 33 | def fetch_search( |
| 34 | - query: schema.QueryParams = Depends(), | 34 | + query: schema.SearchQueryParams = Depends(), |
| 35 | ): | 35 | ): |
| 36 | if query.q is None or len(query.q) < 3: | 36 | if query.q is None or len(query.q) < 3: |
| 37 | return [] | 37 | return [] | ... | ... |
| ... | @@ -9,6 +9,10 @@ class OrmBaseModel(BaseModel): | ... | @@ -9,6 +9,10 @@ class OrmBaseModel(BaseModel): |
| 9 | model_config = ConfigDict(from_attributes=True) | 9 | model_config = ConfigDict(from_attributes=True) |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | -class QueryParams(BaseModel): | 12 | +class SearchQueryParams(BaseModel): |
| 13 | page: Optional[int] = Query(default=1) | 13 | page: Optional[int] = Query(default=1) |
| 14 | q: Optional[str] = Query(default=None) | 14 | q: Optional[str] = Query(default=None) |
| 15 | + | ||
| 16 | +class QueryParams(BaseModel): | ||
| 17 | + id: Optional[str] = Query(default=None) | ||
| 18 | + gestion: Optional[int] = Query(default=None) | ... | ... |
schemas/acteco.py
0 → 100644
| 1 | +from presupuestov1.schema import OrmBaseModel | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +class ActecoEstado(OrmBaseModel): | ||
| 5 | + gestion: int | ||
| 6 | + acteco: str | ||
| 7 | + total: float | None | ||
| 8 | + poblacion: int | None | ||
| 9 | + n_entidades: int | None | ||
| 10 | + per_capita: float | None | ||
| 11 | + total_gestion: float | None | ||
| 12 | + prop: float | None | ||
| 13 | + ranking: int | None | ||
| 14 | + n_pares: int | None | ||
| 15 | + top1_entidad: int | None | ||
| 16 | + top1_entidad_desc: str | None | ||
| 17 | + top1_monto: float | None | ||
| 18 | + top1_pct: float | None | ||
| 19 | + top2_entidad: int | None | ||
| 20 | + top2_entidad_desc: str | None | ||
| 21 | + top2_monto: float | None | ||
| 22 | + top2_pct: float | None | ||
| 23 | + top3_entidad: int | None | ||
| 24 | + top3_entidad_desc: str | None | ||
| 25 | + top3_monto: float | None | ||
| 26 | + top3_pct: float | None | ||
| 27 | + | ||
| 28 | + | ||
| 29 | +class ActecoEntidad(OrmBaseModel): | ||
| 30 | + gestion: int | ||
| 31 | + acteco: str | ||
| 32 | + entidad: int | ||
| 33 | + nivel: str | None | ||
| 34 | + entidad_desc: str | None | ||
| 35 | + monto: float | None | ||
| 36 | + per_capita: float | None | ||
| 37 | + ranking: int | None | ||
| 38 | + prop: float | None | ||
| 39 | + n_entidades: int | None |
schemas/classifier.py
0 → 100644
| 1 | +from typing import Any | ||
| 2 | + | ||
| 3 | +from presupuestov1.schema import OrmBaseModel | ||
| 4 | + | ||
| 5 | + | ||
| 6 | +class ClasInstitucional(OrmBaseModel): | ||
| 7 | + entidad: int | ||
| 8 | + desc_entidad: str | None | ||
| 9 | + sigla_entidad: str | None | ||
| 10 | + sector: str | None | ||
| 11 | + desc_sector: str | None | ||
| 12 | + sigla_sector: str | None | ||
| 13 | + subsector: str | None | ||
| 14 | + desc_subsector: str | None | ||
| 15 | + sigla_subsector: str | None | ||
| 16 | + area: str | None | ||
| 17 | + desc_area: str | None | ||
| 18 | + sigla_area: str | None | ||
| 19 | + subarea: str | None | ||
| 20 | + desc_subarea: str | None | ||
| 21 | + sigla_subarea: str | None | ||
| 22 | + gestiones: str | None | ||
| 23 | + n_gestiones: int | None | ||
| 24 | + | ||
| 25 | + | ||
| 26 | +class ClasObjetos(OrmBaseModel): | ||
| 27 | + nivel: str | None | ||
| 28 | + objeto: str | ||
| 29 | + desc_objeto: str | None | ||
| 30 | + gestiones: str | None | ||
| 31 | + n_gestiones: int | None | ||
| 32 | + n_variaciones: int | None | ||
| 33 | + descripciones: list[dict[str, Any]] | None | ||
| 34 | + | ||
| 35 | + | ||
| 36 | +class ClasRubros(OrmBaseModel): | ||
| 37 | + nivel: str | None | ||
| 38 | + rubro: str | ||
| 39 | + desc_rubro: str | None | ||
| 40 | + gestiones: str | None | ||
| 41 | + n_gestiones: int | None | ||
| 42 | + n_variaciones: int | None | ||
| 43 | + descripciones: list[dict[str, Any]] | None | ||
| 44 | + | ||
| 45 | + | ||
| 46 | +class ClasFinfun(OrmBaseModel): | ||
| 47 | + nivel: str | None | ||
| 48 | + finfun: str | ||
| 49 | + desc_finfun: str | None | ||
| 50 | + gestiones: str | None | ||
| 51 | + n_gestiones: int | None | ||
| 52 | + n_variaciones: int | None | ||
| 53 | + descripciones: list[dict[str, Any]] | None |
schemas/finfun.py
0 → 100644
| 1 | +from presupuestov1.schema import OrmBaseModel | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +class EntidadesPorFinfun(OrmBaseModel): | ||
| 5 | + finfun: str | ||
| 6 | + entidad: int | ||
| 7 | + nivel: str | ||
| 8 | + entidad_desc: str | None | ||
| 9 | + | ||
| 10 | + | ||
| 11 | +class FinfunEstado(OrmBaseModel): | ||
| 12 | + gestion: int | ||
| 13 | + finfun: str | ||
| 14 | + total: float | None | ||
| 15 | + poblacion: int | None | ||
| 16 | + n_entidades: int | None | ||
| 17 | + per_capita: float | None | ||
| 18 | + total_gestion: float | None | ||
| 19 | + prop: float | None | ||
| 20 | + ranking: int | None | ||
| 21 | + n_pares: int | None | ||
| 22 | + top1_entidad: int | None | ||
| 23 | + top1_entidad_desc: str | None | ||
| 24 | + top1_monto: float | None | ||
| 25 | + top1_pct: float | None | ||
| 26 | + top2_entidad: int | None | ||
| 27 | + top2_entidad_desc: str | None | ||
| 28 | + top2_monto: float | None | ||
| 29 | + top2_pct: float | None | ||
| 30 | + top3_entidad: int | None | ||
| 31 | + top3_entidad_desc: str | None | ||
| 32 | + top3_monto: float | None | ||
| 33 | + top3_pct: float | None | ||
| 34 | + | ||
| 35 | + | ||
| 36 | +class FinfunEntidad(OrmBaseModel): | ||
| 37 | + gestion: int | ||
| 38 | + finfun: str | ||
| 39 | + entidad: int | ||
| 40 | + nivel: str | None | ||
| 41 | + entidad_desc: str | None | ||
| 42 | + monto: float | None | ||
| 43 | + per_capita: float | None | ||
| 44 | + ranking: int | None | ||
| 45 | + prop: float | None | ||
| 46 | + n_entidades: int | None |
schemas/objeto.py
0 → 100644
| 1 | +from presupuestov1.schema import OrmBaseModel | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +class EntidadesPorObjeto(OrmBaseModel): | ||
| 5 | + entidad: int | ||
| 6 | + objeto: int | ||
| 7 | + nivel: str | ||
| 8 | + entidad_desc: str | None | ||
| 9 | + | ||
| 10 | + | ||
| 11 | +class ObjetoEstado(OrmBaseModel): | ||
| 12 | + gestion: int | ||
| 13 | + objeto: str | ||
| 14 | + total: float | None | ||
| 15 | + poblacion: int | None | ||
| 16 | + n_entidades: int | None | ||
| 17 | + per_capita: float | None | ||
| 18 | + total_gestion: float | None | ||
| 19 | + prop: float | None | ||
| 20 | + ranking: int | None | ||
| 21 | + n_pares: int | None | ||
| 22 | + top1_entidad: int | None | ||
| 23 | + top1_entidad_desc: str | None | ||
| 24 | + top1_monto: float | None | ||
| 25 | + top1_pct: float | None | ||
| 26 | + top2_entidad: int | None | ||
| 27 | + top2_entidad_desc: str | None | ||
| 28 | + top2_monto: float | None | ||
| 29 | + top2_pct: float | None | ||
| 30 | + top3_entidad: int | None | ||
| 31 | + top3_entidad_desc: str | None | ||
| 32 | + top3_monto: float | None | ||
| 33 | + top3_pct: float | None | ||
| 34 | + | ||
| 35 | + | ||
| 36 | +class ObjetoEntidad(OrmBaseModel): | ||
| 37 | + gestion: int | ||
| 38 | + objeto: str | ||
| 39 | + entidad: int | ||
| 40 | + nivel: str | None | ||
| 41 | + entidad_desc: str | None | ||
| 42 | + monto: float | None | ||
| 43 | + per_capita: float | None | ||
| 44 | + ranking: int | None | ||
| 45 | + prop: float | None | ||
| 46 | + n_entidades: int | None |
schemas/treemap.py
0 → 100644
| 1 | +from presupuestov1.schema import OrmBaseModel | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +class TreemapObjeto(OrmBaseModel): | ||
| 5 | + gestion: int | ||
| 6 | + entidad: int | ||
| 7 | + nivel: str | ||
| 8 | + objeto: int | ||
| 9 | + desc_objeto: str | None | ||
| 10 | + parent: int | None | ||
| 11 | + devengado: float | None | ||
| 12 | + | ||
| 13 | + | ||
| 14 | +class TreemapFinFun(OrmBaseModel): | ||
| 15 | + gestion: int | ||
| 16 | + entidad: int | ||
| 17 | + nivel: str | ||
| 18 | + finfun: int | ||
| 19 | + desc_finfun: str | None | ||
| 20 | + parent: int | None | ||
| 21 | + devengado: float | None | ||
| 22 | + | ||
| 23 | + | ||
| 24 | +class TreemapActeco(OrmBaseModel): | ||
| 25 | + gestion: int | ||
| 26 | + entidad: int | ||
| 27 | + nivel: str | ||
| 28 | + acteco: int | ||
| 29 | + desc_actividad: str | None | ||
| 30 | + parent: int | None | ||
| 31 | + devengado: float | None |
-
Please register or login to post a comment