DBML — Fuente de verdad para pobreza y hogares
Principios de modelado
- Claves estables:
HOGAR_REF_ID
(hogar),ID
(persona). - Temporalidad:
- Trimestral (Q) para ingresos/pobreza.
- Anual (YEAR/ANO4) para dimensión geográfica (hogares y personas).
- Uniones canónicas:
- Personas (trimestral):
personas_ingresos_Q
⨝pobreza_hogares
por (HOGAR_REF_ID
,Q
), y ⨝ geo por (HOGAR_REF_ID
,YEAR
). - Hogares (trimestral):
pobreza_hogares
⨝hogares_geo
por (HOGAR_REF_ID
,YEAR
).
- Personas (trimestral):
Nota de deduplicación: unificamos nombres y roles:
- Mantener
personas_ingresos_Q
(deprecar aliaspersonas_ingresos_Q_df
).- Mantener
personas_geo
yhogares_geo
como dimensiones anuales.- Mantener
pobreza_hogares
como hecho trimestral a nivel hogar.
Esquema DBML (consolidado)
Project atlas {
database_type: "postgres"
Note: 'Q es ISO-8601 ancla trimestral (p.ej., 2022-05-15). YEAR/ANO4 anual.'
}
/* ===================== DIMENSIONES GEO (ANUAL) ===================== */
Table hogares_geo {
HOGAR_REF_ID varchar [not null] // clave hogar
YEAR int [not null] // año de referencia (geo)
RADIO_REF_ID varchar // radio censal
AGLOMERADO int // código aglomerado
FRAC_REF_ID varchar // fracción
DPTO int // departamento
NOMDPTO varchar // nombre dpto
PROV int // provincia
NOMPROV varchar // nombre prov
Region varchar // región
COD_2010 varchar // clave IGN/CONICET 2010
distrito_id varchar
seccion_id varchar
seccion_nombre varchar
circuito varchar
IN1 varchar
NAM varchar
Note: 'Clave compuesta anual permite cambios de localización.'
Indexes {
(HOGAR_REF_ID, YEAR) [pk]
PROV
DPTO
AGLOMERADO
}
}
Table personas_geo {
ID varchar [not null] // persona
HOGAR_REF_ID varchar [not null] // hogar de la persona
ANO4 int [not null] // año geo de persona
RADIO_REF_ID varchar
AGLOMERADO int
DPTO int
NOMDPTO varchar
PROV int
NOMPROV varchar
Region varchar
COD_2010 varchar
IDFRAC varchar
IN1 varchar
circuito varchar
Indexes {
(ID, ANO4) [pk]
(HOGAR_REF_ID, ANO4)
PROV
DPTO
AGLOMERADO
}
Ref: personas_geo.HOGAR_REF_ID > hogares_geo.HOGAR_REF_ID
}
/* ===================== HECHOS (TRIMESTRAL) ===================== */
Table personas_ingresos_Q {
ID varchar [not null] // persona
HOGAR_REF_ID varchar [not null] // hogar
Q date [not null] // ancla trimestral ISO
P47T_persona numeric // ingreso persona
P02 int
P03 int
P09 int
P10 int
P0910 int
Indexes {
(ID, Q) [pk]
HOGAR_REF_ID
}
Ref: personas_ingresos_Q.HOGAR_REF_ID > hogares_geo.HOGAR_REF_ID
Ref: personas_ingresos_Q.ID > personas_geo.ID
}
Table pobreza_hogares {
HOGAR_REF_ID varchar [not null]
Q date [not null]
P47T_hogar numeric
CBA numeric
CBT numeric
CB_EQUIV numeric
Pobreza boolean
Indigencia boolean
gap_pobreza numeric
gap_indigencia numeric
Indexes {
(HOGAR_REF_ID, Q) [pk]
}
Ref: pobreza_hogares.HOGAR_REF_ID > hogares_geo.HOGAR_REF_ID
}
- Las tres tablas
personas_ingresos_Q
,pobreza_hogares
,hogares_geo
y la dimensiónpersonas_geo
aparecen como el núcleo para combinar ingresos, pobreza y geo, con merges canónicos sobreHOGAR_REF_ID
yQ
. - La dimensión geo se documenta con provincias/departamentos/fracciones/códigos 2010 y se usa para generar GeoJSON y agregaciones espaciales.
Diccionario de claves y temporalidad (contrato)
-
Claves entidad:
- Hogar:
HOGAR_REF_ID
(string estable). - Persona:
ID
(string estable).
- Hogar:
-
Claves geo (anuales):
PROV
,DPTO
,AGLOMERADO
,RADIO_REF_ID
,FRAC_REF_ID
,COD_2010
,Region
. -
Tiempo:
Q
: fecha ISO ancla de trimestre, DATE (ej.2022-05-15
).YEAR/ANO4
: entero anual.
-
Uniones:
- Trimestral: (
HOGAR_REF_ID
,Q
) - Geo anual: (
HOGAR_REF_ID
,YEAR
) / (ID
,ANO4
)
- Trimestral: (
-
Anti-joins obligatorios en build**:** detectar claves que no matchean entre hechos y dimensiones (reportar % faltantes).
Contratos mínimos de datos
Exportables canónicos (contrato de nombres):
downloads/atlas.dbml
— esquema completo DBML (este documento).exports/pobreza_hogares_Q.csv
— hecho trimestral (hogar).exports/personas_ingresos_Q.csv
— hecho trimestral (persona).exports/hogares_geo_YEAR.parquet
— dimensión anual (hogar).exports/personas_geo_YEAR.parquet
— dimensión anual (persona).
Columnas mínimas por exportable:
pobreza_hogares_Q.csv
:HOGAR_REF_ID
,Q
,P47T_hogar
,CBA
,CBT
,CB_EQUIV
,Pobreza
,Indigencia
,gap_pobreza
,gap_indigencia
.personas_ingresos_Q.csv
:ID
,HOGAR_REF_ID
,Q
,P47T_persona
,P02
,P03
,P09
,P10
,P0910
.hogares_geo_YEAR.parquet
:HOGAR_REF_ID
,YEAR
,RADIO_REF_ID
,AGLOMERADO
,FRAC_REF_ID
,DPTO
,NOMDPTO
,PROV
,NOMPROV
,Region
,COD_2010
,distrito_id
,seccion_id
,seccion_nombre
,circuito
,IN1
,NAM
.personas_geo_YEAR.parquet
:ID
,HOGAR_REF_ID
,ANO4
,RADIO_REF_ID
,AGLOMERADO
,DPTO
,NOMDPTO
,PROV
,NOMPROV
,Region
,COD_2010
,IDFRAC
,IN1
,circuito
.
Política temporal y citación:
- Política temporal: hechos trimestrales (
Q
), dimensiones anuales (YEAR/ANO4
); cuando se crucen, usar adaptador A↔Q definido en el módulo temporal (resample/forward-fill explícito). - Fuentes: EPH (trimestral), Censo 2010. Documentadas en CoreRef y catálogos.
QA de integridad (fallar el build si no se cumple)
-
Unicidad:
uniq(HOGAR_REF_ID, Q)
enpobreza_hogares
.uniq(ID, Q)
enpersonas_ingresos_Q
.uniq(HOGAR_REF_ID, YEAR)
enhogares_geo
;uniq(ID, ANO4)
enpersonas_geo
.
-
Cobertura de FKs:
% faltantes
deHOGAR_REF_ID
entre hechos y dimensiones < 0.1%.
-
Consistencia temporal:
- Prohibir joins A↔Q sin adaptador explícito.
-
Dominios:
Pobreza/Indigencia
∈ ;AGLOMERADO
,PROV
,DPTO
numéricos;Region
en catálogo.
-
Drift geo:
- Chequear que cambios en geo (YEAR vs Q) queden documentados (diffs de clave).
-
Reproducibilidad:
sha256
verificado para cada export yschema_ref
.
Snippets de uso (merges canónicos)
-- Hogar trimestral con geo anual (join con YEAR derivado de Q)
SELECT h.*, g.PROV, g.DPTO, g.Region
FROM pobreza_hogares h
JOIN hogares_geo g
ON g.HOGAR_REF_ID = h.HOGAR_REF_ID
AND g.YEAR = EXTRACT(YEAR FROM h.Q);
-- Personas trimestral + hogar trimestral + geo
SELECT p.ID, p.Q, p.P47T_persona, h.Pobreza, h.Indigencia, gg.AGLOMERADO
FROM personas_ingresos_Q p
JOIN pobreza_hogares h USING (HOGAR_REF_ID, Q)
JOIN hogares_geo gg
ON gg.HOGAR_REF_ID = p.HOGAR_REF_ID
AND gg.YEAR = EXTRACT(YEAR FROM p.Q);
- Los merges
info_personas
einfo_hogares
y el set de columnas clave provienen de tus fichas de “Métricas de pobreza por hogar” y “Estructura de datos”. - La presencia de outputs JSON/CSV para resultados y series (con
observable
,sintetico
,Q
,frac
) justificó separar hechos de dimensiones y fijar los contratos de exportación.