---
title: "Catalogo di beni culturali"
url: "https://edoardogabrielli.com/it/progetti/catalogo-beni-culturali"
lang: "it"
updated: "2026-11-02"
---

# Catalogo di beni culturali

> Migrazione di un software di catalogazione di beni culturali, nato nel 2006, da Python/Twisted ed ExtJS a FastAPI e Vue 3, condotta con l'aiuto di agenti AI.

Un'applicazione web per catalogare opere, archivi, biblioteche e fotografie con le schede previste dagli standard nazionali. Nel 2026 ne ho guidato la migrazione a una tecnologia nuova.

## A cosa serve e cosa può fare

Per enti e cooperative che catalogano patrimonio culturale con schede normate. Rientra nell'offerta di catalogazione che ETT presenta con la linea Scripta, insieme a digitalizzazione e conservazione.

- Compila schede secondo gli standard ICCD, con vocabolari controllati e campi obbligatori.
- Organizza il lavoro in campagne di catalogazione, con assegnazione e validazione delle schede.
- Gestisce ruoli diversi: catalogatori, coordinatori, archivisti.
- Esporta le schede consegnate.
- Si integra con gli altri standard di catalogazione e metadati usati dagli enti.

[Scopri la soluzione su ETT](https://ettsolutions.com/scripta/)

## Il contesto

Enti e cooperative che catalogano il patrimonio culturale compilano schede normate: centinaia di campi, vocabolari controllati, regole di obbligatorietà. Le schede vanno validate, assegnate e consegnate. Il software è dell'azienda in cui lavoro come sviluppatore ed esiste dal 2006, scritto da molte persone.

Il sistema vecchio aveva un'interfaccia del 2007 su una libreria che nessuno sviluppatore conosceva più e che ormai non funzionava sui browser moderni, e circa 57.000 righe di Python su Twisted senza specifiche scritte: il codice era l'unica specifica.

## Prima e dopo: la scheda

![Una scheda nella vecchia interfaccia del 2007](https://edoardogabrielli.com/media/originals/2026/11/ea8ce44f773845afa764e143eb59e1ce/catalogo-scheda-prima.webp)

![Una scheda in lettura nella nuova interfaccia, con l'albero dei campi](https://edoardogabrielli.com/media/originals/2026/11/ce63b8c689a64046958f816a791490c8/catalogo-scheda-dopo.webp)

Una scheda in lettura, con la vecchia e la nuova interfaccia. Dati di esempio; la vecchia schermata è ritagliata.

## La migrazione

Ho seguito la strategia «strangler fig»: invece di riscrivere tutto, ho sostituito il vecchio sistema un pezzo alla volta. Prima ho scritto una wiki del dominio e i test che fissano il comportamento attuale; poi ho portato il backend su FastAPI e l'interfaccia su Vue 3, finché nel luglio 2026 Twisted ed ExtJS sono usciti dal programma in esecuzione. Le regole di catalogazione vecchie di vent'anni sono state mantenute e coperte da test, non reinventate.

## Il sistema oggi (dati di esempio)

![Pagina iniziale del catalogo con il patrimonio catalogato per tipologia di scheda, dati di esempio](https://edoardogabrielli.com/media/originals/2026/11/c065224f12fc443f815470e449bd3516/catalogo-dashboard.webp)

![Scheda in modifica con campi obbligatori, vocabolari controllati e contatore degli errori](https://edoardogabrielli.com/media/originals/2026/11/db5ac89fc57d48ed88bae14b8592bc2e/catalogo-validazione.webp)

## Alcune scelte tecniche

- Cinque livelli (dominio, repository, servizi, schemi, API) con regole di import controllate da un programma, e 14 decisioni di architettura scritte.
- Il contenuto di una scheda è un valore immutabile; il contratto JSON tra backend e interfaccia è generato dall'OpenAPI.
- Un database per ogni cliente, con i vocabolari di riferimento condivisi.
- Un unico importatore per formati diversi (EAD, ArCo, schede digitalizzate) che riconosce i doppioni: 56.910 schede importate in circa 45 minuti, 28 millisecondi a scheda.

## Cosa è mio e cosa no

Il programma ha più di 7.000 commit dal 2006, quasi tutti di altri colleghi. Miei sono due piccole correzioni a marzo 2026 e, da giugno, la migrazione: circa 1.600 commit, tra piani, decisioni di architettura, test, backend e interfaccia. Non ho scritto il software, ho ereditato e portato avanti un codice che esisteva già.

Ho lavorato con un agente AI (Claude Code): dalla migrazione compare come coautore in circa sei commit su dieci. Io ho fissato i piani e le decisioni e ho verificato i risultati; il codice lo hanno scritto in gran parte gli agenti.

## Limiti e stato

È in uso e in sviluppo, ma non è pubblico e non c'è una demo. Il numero di versione dichiarato e le etichette del repository non sono allineati, e alcune funzioni descritte nei documenti sono studi realizzati solo in parte. Due dei tracciati sono rimasti fuori dalla prima fase.

### Stack

Python · FastAPI · SQLAlchemy · PostgreSQL/PostGIS · Pydantic · Celery · Redis · Vue 3 · TypeScript · Pinia · OpenLayers · Docker · pytest · Playwright

[← Tutti i progetti](https://edoardogabrielli.com/it/progetti)