pr0nstar

third

1 +from . import (
2 + acteco,
3 + classifier,
4 + finfun,
5 + objeto,
6 + treemap,
7 +)
......
...@@ -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
......
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)
......
1 from . import ( 1 from . import (
2 + acteco,
3 + classifier,
4 + finfun,
5 + objeto,
6 + treemap,
2 project 7 project
3 ) 8 )
......
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
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
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
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
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