Skip to content

fix(registry): mart multi-anno pubblicati flat (issue #463) - #464

Merged
Gabrymi93 merged 1 commit into
mainfrom
fix/mart-multi-year-flat
Aug 9, 2026
Merged

fix(registry): mart multi-anno pubblicati flat (issue #463)#464
Gabrymi93 merged 1 commit into
mainfrom
fix/mart-multi-year-flat

Conversation

@Gabrymi93

Copy link
Copy Markdown
Member

Tipo

root fix — chiusura issue #463: i mart multi-anno venivano pubblicati nel registry con path anno inesistente.

Problema reale

Incoerenza tra 3 moduli:

  1. Runner (mart/run.py:115,179): mart con years esplicite → scritti flat (data/mart/{dataset}/{table}.parquet, no dir anno)
  2. Sync GCS: copia la struttura flat → gs://.../{slug}/{table}.parquet
  3. Builder (registry/builders.py:259): location con year = max(manifest.years)gs://.../{slug}/{year}/{table}.parquetpath inesistente

Evidenza in produzione: open-conto-annuale pubblica 14 mart_trend con path .../anzianita/2024/mart_trend.parquet ma il file reale sta in .../anzianita/mart_trend.parquet.

Causa root

load_manifest scartava le years esplicite delle mart tables ({name, sql} soltanto) → il builder non poteva distinguere multi-anno da per-anno.

Contratto riusato/sostituito

  • Riusato: MartTableConfig.years (config model, già presente); il comportamento del runner (t.get("years") presenza = multi-anno).
  • Sostituito: PathContract.mart_parquet_url con year=None → flat (era ValueError con mart_layout="year").

Implementazione (opzione A — builder)

File Cosa
toolkit/registry/layout.py load_manifest include years esplicite in mart_tables
toolkit/registry/builders.py Tabella con years → location flat (year=None); per-anno resta year
toolkit/registry/paths.py mart_parquet_url(year=None) → flat anche con mart_layout="year"
tests/test_registry_builder.py +1 contract: mart multi-anno flat, per-anno year

Verifica

  • Evidenza reale (open-conto-annuale anzianita, layout year):
    • mart_trend (years [2020..2024]) → gs://.../anzianita/mart_trend.parquet flat
    • mart_sintesi (no years) → gs://.../anzianita/2024/mart_sintesi.parquet year
  • Test protegge: fallisce senza fix (path anno), passa con fix
  • 1346 test verdi, mypy + ruff puliti

Rischio residuo

  • I registry già committati con path anno errato verranno corretti al prossimo aggiornamento post-merge (il file GCS flat esiste già, cambia solo il path dichiarato).
  • Nessuna rottura contratti: fix additivo (flat solo per mart con years esplicite).

Follow-up

Nessuno obbligatorio. Closes #463.

Il runner scrive i mart con years esplicite flat (data/mart/{dataset}/
{table}.parquet, no dir anno) ma il builder li pubblicava con path anno
inesistente (year=max) → consumer (registry_show, graph) puntavano a
file GCS assenti.

Fix (opzione A — builder):
- layout.py: load_manifest include years esplicite in mart_tables
  (prima scartate, il builder non poteva distinguere multi-anno)
- builders.py: tabella con years → location flat (year=None); per-anno
  resta year
- paths.py: mart_parquet_url con year=None → flat anche con
  mart_layout='year' (era ValueError)

Verificato sull'evidenza reale (open-conto-annuale anzianita):
mart_trend → gs://.../anzianita/mart_trend.parquet (flat) ✅
mart_sintesi → gs://.../anzianita/2024/mart_sintesi.parquet (year) ✅

Test: +1 (mart multi-anno flat, per-anno year). 1346 verdi,
mypy+ruff puliti. Closes #463.
@Gabrymi93
Gabrymi93 merged commit 038b035 into main Aug 9, 2026
3 checks passed
@Gabrymi93
Gabrymi93 deleted the fix/mart-multi-year-flat branch August 9, 2026 13:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

registry: mart multi-anno pubblicati con path GCS anno inesistente (runner scrive flat, builder year=max)

1 participant