# Scoring, coverage, grades and trust labels

The score tracks progress between audits of the same property. The change list is the deliverable. Always print score, grade, coverage and caps together; a score without coverage misleads.

## Points and areas

- Rule points: PASS 1, WARN 0.5, FAIL 0. NOT CHECKED and N/A are left out of the score; NOT CHECKED is listed.
- Rule status: the worst sub-finding. Each sub-finding scores in one rule only.
- Areas and weights (sum 100):
  - A Property and streams (G01 to G03): 8
  - B Retention and identity (G04, G05): 6
  - C Traffic hygiene (G06 to G10): 14
  - D Key events and values (G11 to G14): 16
  - E Google Ads integration (G15, G16): 10
  - F BigQuery export (G17, G18): 8
  - G Custom definitions (G19, G20): 6
  - H Attribution and channels (G21, G22): 10
  - I Consent and privacy (G23, G24): 16
  - J Reporting integrity (G25, G26): 6

## Formula

- Area score: the mean of the points of its checked rules.
- Overall: the sum of weight times area score over areas with at least one checked rule, divided by the sum of those weights, times 100, rounded half up (24.5 becomes 25, not 24).
- Coverage: checked applicable rules divided by applicable rules (N/A rules are not applicable).

## Grades and caps

- 90 to 100: decision-grade. 75 to 89: usable with caveats. 50 to 74: material issues. Below 50: not decision-grade.
- The grade is withheld ("partial audit") when coverage is below 70% or any core rule is NOT CHECKED. Core rules: G04, G06, G07, G08, G11, G12, G23, G24. A core rule that is N/A does not withhold it.
- Any FAIL caps the grade at usable with caveats.
- Any FAIL in G23 or G24, or a Data loss in progress banner, caps the grade at material issues.
- Data loss in progress banner above the score: an Active filter excluding real traffic (G07 drop after activation, G08 Active Include filter missing a host) or an export that is paused, expiring or stale (G18: a default or table expiration shorter than the history needed, the newest daily table more than 3 days old, or a table missing on or after the first day over the export limit).
- Data loss risk banner: days over the standard export limit while the BigQuery results show complete, fresh daily tables, or while no BigQuery results or no BQ1 table list were supplied. The FAIL stands; the export has not paused yet.

## Trust summary

One label per report family, from the statuses of its mapped rules: trust (all PASS), use with caveat (any WARN, no FAIL), do not use until fixed (any FAIL), not assessed (none checked). NOT CHECKED rules are named next to the label. Revenue and ecommerce stops at use with caveat when purchases exist but the config has no `backend_orders` count, because nothing compared GA4 with the order system.

- Acquisition by session: G06, G07, G08, G09, G10, G15, G22.
- Key events and conversion rates: G06, G07, G11, G12, G14.
- Revenue and ecommerce: G08, G12, G13.
- Explorations and long date ranges: G04, G25.
- Google Ads imports and bidding signals: G11, G15, G16, G23.
- BigQuery and warehouse models: G17, G18, G20.
- EEA audiences and remarketing: G15, G23.

## Change priority

- P1 privacy and permanent data loss: G24, G23, G07, G06 broad Testing filter, G08 Active Include filter, G18.
- P2 double counting and wrong values: G02, G06 (other findings), G08 (other findings), G11, G12, G13, G14, G16.
- P3 attribution and missing data: G04, G05, G09, G10, G15, G17, G21, G22.
- P4 hygiene: G01, G03, G19, G20, G25, G26.
- Within a priority: FAIL before WARN, then by key events affected.

## Worked calculation: Acme Store

Statuses from [worked-example.md](worked-example.md): 15 FAIL, 8 WARN, 3 PASS, nothing NOT CHECKED or N/A.

- A: G01 PASS 1, G02 FAIL 0, G03 WARN 0.5, mean 0.5, so 8 x 0.5 = 4.
- B: G04 FAIL 0, G05 PASS 1, mean 0.5, so 6 x 0.5 = 3.
- C: G06 to G10 all FAIL, mean 0, so 0.
- D: G11 to G14 all FAIL, so 0.
- E: G15 WARN 0.5, G16 FAIL 0, mean 0.25, so 10 x 0.25 = 2.5.
- F: G17 PASS 1, G18 FAIL 0, mean 0.5, so 4.
- G: G19 and G20 WARN, mean 0.5, so 3.
- H: G21 and G22 WARN, mean 0.5, so 5.
- I: G23 and G24 FAIL, so 0.
- J: G25 and G26 WARN, mean 0.5, so 3.
- Sum 24.5 over weights 100, so 24.5, rounded half up to 25. Grade: not decision-grade (the G23 and G24 cap does not change it). Data loss risk banner: G18, 22 days over the export limit with daily tables still complete; no data loss banner.

## Worked calculation: an area with nothing checked

The app-only case in [../assets/regression-snapshot.json](../assets/regression-snapshot.json) has 13 N/A rules, including both Google Ads rules. Area E drops out, so the denominator is 90: A 8, B 6, C 14, D 16, F 8 x 0.5 = 4 (G17 WARN), G 6, H 10, I 16, J 6, sum 86. Score 86 / 90 x 100 = 95.6, rounded to 96, decision-grade, coverage 13 of 13.
