Claim reconciliation
Where does claim status come from, and what has it not reached?Reading the sample flag from the URL…
MonitorReconciliation
demoThis build is a demo. The catalog and detections are a fixed sample.Scopereading…Sound is used for one thing: a short tone when a long scan finishes while this tab is in the background. The A/B listening check plays audio either way, because there the sound is the evidence.Reading the sample flag from the URL…
MonitorReconciliation
demoThis build is a demo. The catalog and detections are a fixed sample.Scopereading…Sound is used for one thing: a short tone when a long scan finishes while this tab is in the background. The A/B listening check plays audio either way, because there the sound is the evidence.Sample data — Three imports and one summary basis, shaped exactly like GET /api/monitor/reconciliation and the two fields this page reads from GET /api/monitor/summary. One of the three imports was rejected, so its zeros are not measurements. Source: src/lib/fixtures/monitor.ts. Nothing below was measured from your catalog.
Counted at Verve Catalog — tenant node, resolved by sole_tenant.
The headline is the smaller number on purpose. Both withheld populations would raise it, and counting either would overstate what the customer can actually claim — which is why they are reported here beside it rather than folded into it.
| Imported | File | By | Claim rows read | Rows with a video id | Detections adjudicated | Left unreconciled |
|---|---|---|---|---|---|---|
| 25 days ago #1042 | youtube_cms_claims_2026-08-22.csv | a.okonkwo@verve.example | 41,208 | 40,816 | 706 of 824 | 118 of 824 |
| 25 days ago #1041 | meta_rm_export.csv rejected — claim report has no recognisable video id column; saw [asset_id, claim_type, territory] | a.okonkwo@verve.example | 0 | 0 | 0 of 0 | 0 of 0 |
| 29 days ago #1040 | no filename recorded | unauthenticated | 12 | 9 | 4 of 824 | 820 of 824 |
The three counts do not share a denominator. Claim rows read and rows carrying a video id count rows in the file; detections adjudicated and left unreconciled count detections in the catalog. The endpoint stores the third of those in a column called rows_matched, which is named for the wrong population — so nothing here is divided by anything else here.
§13.13's match-rate breakdown cannot be rendered: two of its three groups have no field.
The worked example splits matched rows into matched to catalog, no ISRC — matched on title + artist and unmatched — no recording in scope. GET /api/monitor/reconciliation returns rows_read, rows_parsed and rows_matched and nothing else. The last two groups are not zero and not empty — there is no column they could be stored in, so nothing has ever been measured about them. §13.13 names the unmatched group as the one that matters, because those are claims the customer has that Choon cannot see.
import_claims, and a row with an ISRC but no video id is skipped rather than matched. Rendered rather than reconciled here: the endpoint’s rule is what a file has to satisfy, and which of the two should change is not this page’s call.Nothing was sent. The import is disabled while this page is showing sample data.
POST /api/monitor/reconciliation/imports exists and is reachable — the capability is here, and it is switched off on this path rather than missing. It writes a claim status onto every detection the report names, and a screen labelled sample data must not be able to do that. Read the live surface to import for real.