The per-URL fidelity score is computed as \( \text{Fidelity} = \frac{|\text{survived}|}{|\text{survived}| + |\text{lost}| + |\text{distortions}|} \times 100 \), defaulting to \( 100.0\% \) when no claims exist, while the overall aggregate fidelity score is calculated as the arithmetic mean \( \bar{F} = \frac{1}{N} \sum_{i=1}^{N} \text{Fidelity}_i \) across all \( N \) successfully evaluated URLs.

flowchart TD
    subgraph SingleURL["Stage 1: Per-URL Fidelity Calculation"]
        S["survived (count)"]
        L["lost (count)"]
        D["distortions (count)"]

        Sum["Total Claims = S + L + D"]
        S --> Sum
        L --> Sum
        D --> Sum

        Cond{"Total Claims > 0?"}
        Sum --> Cond

        Formula["Fidelity = (S / Total Claims) * 100"]
        Fallback["Fidelity = 100.0% (Zero-claim fallback)"]

        Cond -- Yes --> Formula
        Cond -- No --> Fallback
    end

    subgraph Aggregate["Stage 2: Aggregate Scoring"]
        U1["Fidelity URL 1"]
        U2["Fidelity URL 2"]
        UN["Fidelity URL N"]

        Formula --> U1
        Fallback -.-> U2

        Mean["Aggregate Fidelity = (1 / N) * SUM(Fidelity_i)"]
        U1 --> Mean
        U2 --> Mean
        UN --> Mean
    end