Vai al contenuto

Tracciabilità normativa

Ogni funzione pubblica di norma-ntc è decorata con @ntc_ref, che registra il riferimento normativo direttamente sulla funzione.

Come funziona

from pyntc.core import get_ntc_ref
from pyntc.actions.wind import wind_base_velocity

ref = get_ntc_ref(wind_base_velocity)
print(ref)
# NtcReference(article='3.3.1', table='Tab.3.3.I', formula='3.3.1', norm='NTC18')

Il decoratore espone tre campi:

Campo Descrizione Esempio
article Articolo NTC18 "3.3.1"
table Tabella di riferimento "Tab.3.3.I"
formula Numero formula "3.3.1"
norm Norma di riferimento "NTC18"

Registro dei dubbi

Le ambiguità riscontrate nella conversione OCR del testo NTC18 sono documentate in DUBBI_NTC18.md nel repository. Per ogni dubbio è riportata:

  • La formula o tabella coinvolta
  • Il valore prodotto dall'OCR
  • L'interpretazione adottata
  • Lo stato (APERTO / CHIUSO)

Questo file è il registro trasparente delle incertezze del progetto.

API decoratore

pyntc.core.reference

Decoratore @ntc_ref per tracciabilita' normativa.

Ogni funzione o classe che implementa un requisito NTC18 deve essere decorata con @ntc_ref indicando articolo, tabella e/o formula di riferimento.

NtcReference dataclass

Riferimento a un articolo della norma.

Source code in src/pyntc/core/reference.py
@dataclass(frozen=True)
class NtcReference:
    """Riferimento a un articolo della norma."""

    article: str
    table: str | None = None
    formula: str | None = None
    latex: str | None = None
    norm: str = "NTC18"

    def __str__(self) -> str:
        parts = [f"{self.norm} §{self.article}"]
        if self.table:
            parts.append(self.table)
        if self.formula:
            parts.append(f"[{self.formula}]")
        return " - ".join(parts)

get_ntc_ref(func)

Restituisce il riferimento normativo di una funzione decorata, o None.

Source code in src/pyntc/core/reference.py
def get_ntc_ref(func) -> NtcReference | None:
    """Restituisce il riferimento normativo di una funzione decorata, o None."""
    return getattr(func, "_ntc_ref", None)

ntc_ref(article, table=None, formula=None, latex=None, norm='NTC18')

Decoratore per tracciabilita' normativa.

Aggiunge un attributo _ntc_ref alla funzione decorata contenente il riferimento normativo strutturato.

Parameters

article : str Numero dell'articolo (es. "3.3.1"). table : str, optional Riferimento tabella (es. "Tab.3.3.I"). formula : str, optional Numero formula (es. "3.3.1"). norm : str Norma di riferimento, default "NTC18".

Example

@ntc_ref(article="3.3.1", table="Tab.3.3.I") ... def wind_base_velocity(zone: int) -> float: ... ...

Source code in src/pyntc/core/reference.py
def ntc_ref(
    article: str,
    table: str | None = None,
    formula: str | None = None,
    latex: str | None = None,
    norm: str = "NTC18",
):
    """Decoratore per tracciabilita' normativa.

    Aggiunge un attributo ``_ntc_ref`` alla funzione decorata contenente
    il riferimento normativo strutturato.

    Parameters
    ----------
    article : str
        Numero dell'articolo (es. "3.3.1").
    table : str, optional
        Riferimento tabella (es. "Tab.3.3.I").
    formula : str, optional
        Numero formula (es. "3.3.1").
    norm : str
        Norma di riferimento, default "NTC18".

    Example
    -------
    >>> @ntc_ref(article="3.3.1", table="Tab.3.3.I")
    ... def wind_base_velocity(zone: int) -> float:
    ...     ...
    """

    ref = NtcReference(article=article, table=table, formula=formula, latex=latex, norm=norm)

    def decorator(func):
        func._ntc_ref = ref

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)

        return wrapper

    return decorator