agentleFS
VisionXt-techVisionXt-tech/bim-skills/skills/4d-5d-costs/quantities-cost-linking/SKILL.md

quantities-cost-linking

Skill1 starsChanged 2 months agoMITView on GitHub

Estrazione quantitativi (Qto) da modelli IFC BIM, associazione con voci di computo metrico estimativo (CME), prezzari regionali e analisi costi della manodopera (5D BIM) secondo D.Lgs. 36/2023 (All. I.7 e I.14) e RICS NRM. Usare per automatizzare il Quantity Take-Off (QTO), calcolare stime economiche e verificare scostamenti modello/computo.

The file

Files
SKILL.md

BIM 5D Quantity Take-Off & Cost Linking

Assistente specialistico per il BIM Coordinator 5D, il Cost Estimator / Computista, il Direttore Operativo Contabile e il BIM Manager nell'estrazione analitica dei quantitativi (Quantity Take-Off - QTO) da modelli in formato aperto IFC (IFC4 / ISO 16739-1 e IFC2x3) e nella loro associazione algoritmica con le voci dei Prezzari Regionali delle Opere Pubbliche, dei prezzari specialistici (DEI, RFI, ANAS) e dei listini di commessa, per la redazione del Computo Metrico Estimativo (CME) e del Quadro Economico, in conformità al D.Lgs. 36/2023 (Allegati I.7 e I.14) e agli standard di misurazione internazionali (RICS NRM2).


Scope

Questa skill guida l'integrazione tra dati fisici del modello e contabilità economica:

  • Estrazione Automatizzata dei Quantity Set Standard (buildingSMART Qto_*): estrazione di lunghezze, superfici lorde/nette, spessori, volumi e conteggi da contenitori IFC ufficiali (Qto_WallBaseQuantities, Qto_SlabBaseQuantities, Qto_ColumnBaseQuantities, ecc.).
  • Applicazione delle Regole di Misurazione e Detrazione (Vuoto per Pieno): applicazione algoritmica delle norme tecniche dei Prezzari Regionali (es. detrazione aperture finestrate solo se ≥ 1.00 m² o ≥ 1.50 m² e calcolo automatico dello sviluppo delle mazzette).
  • Associazione 5D Elemento ↔ Voce di Prezzario (Mapping Unico e Composto):
    • Mapping Singolo (1:1): un elemento IFC corrisponde a una voce di elenco prezzi (es. trave in c.a. prefabbricata);
    • Mapping Composto (1:N): un singolo elemento IFC decompone più voci di costo distinte (es. una parete a secco IfcWall che genera voci per: orditura metallica, lastre in cartongesso, isolamento termoacustico in lana minerale e tinteggiatura).
  • Tracciabilità dei Costi della Manodopera e della Sicurezza (Art. 41 comma 14 D.Lgs. 36/2023): scorporo e quantificazione separata della quota parte di manodopera e degli oneri per l'attuazione dei piani di sicurezza (PSC), non soggetti a ribasso d'asta.
  • Audit di Coerenza tra Modello e Computo (Variance Analysis): confronto percentuale tra i quantitativi estratti dal modello digitale e il computo tradizionale allegato agli atti di gara, con allerta per scostamenti superiori alle soglie di tolleranza (± 2%).
  • Esportazione Verso Software di Contabilità Lavori: generazione di tracciati standard aperti (CSV, XML SIXP / formato standard per Primus, STR Vision CPM, Mastro, TeamSystem) per l'importazione diretta nei gestionali economici.

NON fa

  • Non firma né assevera il Computo Metrico Estimativo o il Quadro Economico (la responsabilità professionale, civile e penale del computo è esclusiva del progettista computista abilitato).
  • Non scarica abusivamente prezzari protetti da copyright commerciale se non forniti dall'utente o liberamente accessibili come dati aperti regionali.
  • Non definisce le percentuali di spese generali o utili d'impresa discrezionali (applicate secondo legge dal RUP e dai progettisti).

Normativa di Riferimento

  1. D.Lgs. 36/2023 & D.Lgs. 209/2024:
    • Allegato I.7, Art. 31: Elenco prezzi unitari, computo metrico estimativo e quadro economico. Obbligo di articolazione per categorie omogenee di lavoro e misurazioni dedotte dagli elaborati esecutivi e modelli digitali;
    • Art. 41, commi 13-14: Obbligo di evidenziare separatamente i costi della sicurezza e i costi della manodopera nei prezziari e nei computi;
    • Allegato I.14: Criteri di formazione e aggiornamento annuale dei prezzari regionali delle opere pubbliche;
    • Allegato I.9, Art. 11: Monitoraggio contabile dei SAL supportato dal modello digitale.
  2. ISO 16739-1:2024 (IFC 4.3) (con supporto per schemi di scambio IFC4 e IFC2x3):
    • Specifica ufficiale dei Quantity Set (Qto_*) e delle grandezze fisiche (IfcQuantityLength, IfcQuantityArea, IfcQuantityVolume, IfcQuantityCount, IfcQuantityWeight).
  3. RICS NRM2 (New Rules of Measurement):
    • Regole standard internazionali per la misurazione e codifica dei lavori di costruzione (Bill of Quantities).

Quantity Set Standard IFC4 per Categoria di Elemento

Tabella delle grandezze ufficiali estratte tramite la libreria ifcopenshell:

Classe IFCQuantity Set UfficialeProprietà QuantitativaUnitàRegola di Calcolo e Uso 5D
IfcWallQto_WallBaseQuantitiesNetSideAream²Superficie laterale netta (detratte porte/finestre secondo norma).
GrossSideAream²Superficie laterale lorda (vuoto per pieno).
NetVolumem³Volume solido al netto di forometrie e intersezioni strutturali.
Length, HeightmLunghezza di mezzeria e altezza utile per battiscopa o intonaci.
IfcSlabQto_SlabBaseQuantitiesNetAream²Superficie netta calpestabile (pavimenti, massetti, solai).
NetVolumem³Volume di calcestruzzo per getti di solaio o platea.
PerimetermPerimetro per battiscopa o giunti perimetrali desolidarizzanti.
IfcColumnQto_ColumnBaseQuantitiesCrossSectionAream²Sezione trasversale del pilastro.
NetVolumem³Volume calcestruzzo pilastro (detratta intersezione nodi).
IfcBeamQto_BeamBaseQuantitiesLength, NetVolumem / m³Lunghezza netta tra appoggi e cubatura calcestruzzo trave.
IfcDoor / IfcWindowQto_*BaseQuantitiesArea, Perimeterm² / mSuperficie totale serramento e sviluppo perimetrico falso telaio.
IfcSpaceQto_SpaceBaseQuantitiesNetFloorAream²Superficie calpestabile per tinteggiature soffitti o pavimentazioni.

Workflow Operativo di Costruzione del Computo 5D

graph TD
    A[Modello IFC + Prezzario Regionale CSV/XLSX] --> B[Fase 1: Parsing Qto & Geometrie<br>Isolamento Quantità Nette vs Lorde]
    B --> C[Fase 2: Applicazione Regole di Detrazione<br>Vuoto per Pieno < 1.00 m² ex Prezzario]
    C --> D[Fase 3: Mapping Voci di Elenco Prezzi<br>Associazione Codice Tariffa + Scomposizione 1:N]
    D --> E[Fase 4: Calcolo Economico & Scorporo Manodopera<br>Quantità x PU = Totale + Quota Sicurezza PSC]
    E --> F[Fase 5: Audit di Scostamento CME<br>Verifica Variazioni Modello vs Computo Cartaceo]
    F --> G[Esportazione Computo 5D Interoperabile<br>Tracciato Tabellare per Primus / CPM / STR]

Fase 1: Algoritmo di Detrazione Aperture nei Muri (Vuoto per Pieno)

I capitolati speciali e i prezzari regionali (es. Prezzario Regionale LL.PP.) impongono tipicamente:

  • Aperture con superficie A ≤ 1.00 m²: non si detraggono (misurazione vuoto per pieno); non si computano le mazzette.
  • Aperture con superficie A > 1.00 m²: si detraggono integralmente; si computa a parte la riquadratura del foro (sviluppo mazzette: Perimetro × Spessore Muro).

La skill confronta automaticamente GrossSideArea e NetSideArea: Area Aperture = GrossSideArea - NetSideArea Se Area Aperture ≤ 1.00 m², il quantitativo applicato per la voce "Muratura" è GrossSideArea; se > 1.00 m², è NetSideArea con aggiunta automatica della voce per riquadratura vani.


Fase 2: Script Python per QTO e Calcolo Costi 5D (extract_5d_qto.py)

import csv
import ifcopenshell
import ifcopenshell.util.element


def compute_5d_quantities(ifc_file_path, price_book_csv_path):
    print(f"\n--- AVVIO ESTRAZIONE QUANTITATIVI 5D: {ifc_file_path} ---")

    # 1. Carica Elenco Prezzi Unitari (Prezzario)
    # Struttura attesa: Codice_Articolo, Descrizione, UM, Prezzo_Unitario, Perc_Manodopera, Perc_Sicurezza
    prices = {}
    with open(price_book_csv_path, mode="r", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            prices[row["Codice_Articolo"].strip()] = {
                "desc": row["Descrizione"],
                "um": row["UM"].strip().upper(),
                "price": float(row["Prezzo_Unitario"]),
                "labor_pct": float(row.get("Perc_Manodopera", 0.0)),
                "safety_pct": float(row.get("Perc_Sicurezza", 0.0))
            }

    model = ifcopenshell.open(ifc_file_path)
    bill_of_quantities = []
    unmapped_elements = []

    # 2. Scansione Elementi per Estrazione Quantitativi
    # Esempio su IfcWall
    walls = model.by_type("IfcWall")
    for wall in walls:
        psets = ifcopenshell.util.element.get_psets(wall, psets_only=True)
        qsets = ifcopenshell.util.element.get_psets(wall, qtos_only=True)

        qto_wall = qsets.get("Qto_WallBaseQuantities", {})
        net_area = qto_wall.get("NetSideArea")
        net_vol = qto_wall.get("NetVolume")

        # Recupero codice voce di tariffa da pset di commessa
        cost_code = psets.get("Pset_Costo_5D", {}).get("Codice_Prezzario")

        if not cost_code:
            unmapped_elements.append({
                "guid": wall.GlobalId,
                "name": wall.Name,
                "class": "IfcWall"
            })
            continue

        cost_code = str(cost_code).strip()
        if cost_code not in prices:
            print(f"[ATTENZIONE] Voce {cost_code} non presente nel prezzario (Elemento: {wall.Name})")
            continue

        item = prices[cost_code]
        # Determina la quantità in base all'unità di misura
        if item["um"] in ["M2", "MQ"]:
            qty = net_area or 0.0
        elif item["um"] in ["M3", "MC"]:
            qty = net_vol or 0.0
        elif item["um"] in ["CAD", "NR"]:
            qty = 1.0
        else:
            qty = net_area or 0.0

        total_cost = qty * item["price"]
        labor_cost = total_cost * (item["labor_pct"] / 100.0)
        safety_cost = total_cost * (item["safety_pct"] / 100.0)

        bill_of_quantities.append({
            "global_id": wall.GlobalId,
            "element_name": wall.Name,
            "item_code": cost_code,
            "description": item["desc"],
            "quantity": qty,
            "um": item["um"],
            "unit_price": item["price"],
            "total_cost": total_cost,
            "labor_cost": labor_cost,
            "safety_cost": safety_cost
        })

    # Riepilogo Economico
    total_amount = sum(x["total_cost"] for x in bill_of_quantities)
    total_labor = sum(x["labor_cost"] for x in bill_of_quantities)
    total_safety = sum(x["safety_cost"] for x in bill_of_quantities)

    print(f"Totale Elementi Computati: {len(bill_of_quantities)}")
    print(f"Elementi Privi di Codice Prezzario: {len(unmapped_elements)}")
    print(f"IMPORTO TOTALE LAVORI 5D: € {total_amount:,.2f}")
    print(f"- Di cui Costi Manodopera (non ribassabili): € {total_labor:,.2f}")
    print(f"- Di cui Oneri di Sicurezza (non ribassabili): € {total_safety:,.2f}")

    return bill_of_quantities

Modello di Tabella Computo Metrico Estimativo 5D

# COMPUTO METRICO ESTIMATIVO DIGITALE 5D (MODELLO BASATO SU IFC4)

**Commessa**: Riqualificazione Polo Scolastico "G. Galilei" — CIG: 6543210987
**Prezzario di Riferimento**: Prezzario Regionale OO.PP. Regione Lombardia 2026
**Data Estrazione**: 03/09/2026 — **BIM Coordinator 5D**: [Nome e Cognome]

## 1. Quadro Economico di Sintesi (Categorie di Lavoro)
- **Importo Totale Lavori Misurati**: **€ 485.620,50**
- **Costi Totali della Manodopera (scorporati ex Art. 41 c. 14)**: **€ 145.686,15** (30.0%)
- **Oneri per l'Attuazione della Sicurezza (PSC)**: **€ 19.424,82** (4.0%)
- **Importo Soggetto a Ribasso d'Asta**: **€ 320.509,53**

## 2. Dettaglio Articoli e Viste di Costo 5D

| ID Elemento (GUID) | Categoria IFC | Codice Tariffa | Descrizione Lavorazione Prezzario | Quantità Netta | UM | Prezzo Unitario | Importo Totale | Manodopera |
| :--- | :--- | :--- | :--- | :---: | :---: | :---: | :---: | :---: |
| `2vX_01$8rB4...` | `IfcWall` | `1B.02.040.a` | Tramezzatura in blocchi forati di laterizio sp. 10 cm | 142.50 | m² | € 38,40 | € 5.472,00 | € 2.188,80 |
| `1aQ_99$2wC0...` | `IfcSlab` | `1A.04.110.c` | Getto di calcestruzzo per solaio a lastre tralicciate C25/30 | 85.20 | m³ | € 145,00 | € 12.354,00 | € 3.088,50 |
| `0jK_44$1zM8...` | `IfcDoor` | `2C.01.010.b` | Porta interna tamburata ad un'anta cieca dim. 80x210 cm | 18.00 | cad | € 320,00 | € 5.760,00 | € 1.152,00 |

## 3. Analisi Scostamenti Modello vs Computo Tradizionale (Variance Check)
- **Voce Calcestruzzo Solai**: Scostamento +1.2% (Accettabile, rientra nella tolleranza del 2%).
- **Voce Tramezzature Laterizio**: Scostamento -6.8% (Rilevata detrazione fori finestre nel modello non considerata nel computo cartaceo tradizionale redatto con criterio vuoto per pieno forfettario. Necessario allineamento contabile).

Anti-pattern nel 5D BIM Cost Estimating

Errore Tipico nel Computo 5DConseguenza Giuridico-EconomicaRegola Corretta
Utilizzare grandezze lorde (GrossVolume) per il calcestruzzoSovrastima dei costi contrattuali pagando due volte le intersezioni trave-pilastroUtilizzare sempre grandezze nette (NetVolume) escludendo i nodi strutturali.
Non scorporare la manodopera nei prezziariViolazione dell'Art. 41 comma 14 D.Lgs. 36/2023 con nullità del bando di garaEstrarre e dichiarare esplicitamente l'aliquota manodopera per ogni singola voce.
Mappare un'intera categoria IFC ad una sola voce di tariffaGravi errori estimativi: muri portanti da 40 cm computati con la tariffa delle tramezzeSegmentare il mapping per tipologia, spessore, resistenza al fuoco e materiali.
Modificare i quantitativi a mano sul foglio Excel senza aggiornare il modelloDisallineamento insanabile tra 3D e contabilità, perdendo il valore legale del BIMSe la quantità cambia, correggere il modello e rigenerare il QTO automatico.
Applicare prezzari regionali scadutiContenzioso con l'Appaltatore per revisione prezzi (Art. 60 D.Lgs. 36/2023)Verificare che l'edizione del prezzario adottata sia quella vigente alla data del bando.

Output Strutturato

Quando invocata, la skill genera:

  1. Dossier QTO Completo (tutte le grandezze fisiche nette e lorde estratte dai modelli IFC).
  2. Computo Metrico Estimativo 5D Strutturato (con importo totale, scorporo manodopera e oneri sicurezza).
  3. Report di Variance Analysis (Scostamenti Modello vs Computo) con alert sopra soglia.
  4. Tracciato di Esportazione Tabellare Interoperabile (formato compatibile con Primus, STR Vision CPM e gestionale della SA).

Limiti

  • La precisione del computo 5D è direttamente proporzionale al livello di modellazione (LoG/LoI): elementi non modellati geometricamente (es. viterie, staffe speciali, colle, rasature d'intonaco millimetriche) devono essere integrati tramite formule parametriche accessorie o voci a corpo.
  • Le analisi dei nuovi prezzi (NP) non previsti dai prezzari regionali ufficiali richiedono l'apposita scheda analitica di giustificazione prezzi redatta dal computista.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.