Historical coverage of the corpus
This page documents — proudly and with no fine print — how far back the neutral INAPI corpus reaches
and from which year it is dense. Honesty is part of the contract: a consumer deserves to know "up to when"
the data is reliable before building on it. The corpus is neutral — zero RMC fields or cross-references
(enforced by pnpm neutrality).
The figures below were measured against production on 2026-07-08 (snapshot). They are re-runnable with the read-only audit in
scripts/data-quality-audit.sql. Corpus total at snapshot time: 829,757instanciarows.
The coverage frontier, in one sentence
The corpus is dense from ~2007-2009 onward and residual before that (1994-2006). This is not a gap to patch nor a defect: it is the real shape of INAPI's public source, and we document it as-is so nobody is caught by surprise.
Density by filing year
| Range | Coverage | Typical volume per year |
|---|---|---|
| 1994-2006 | Residual | on the order of 1 / 3 / 6 / … 474 filings/year (grows slowly toward the end of the range) |
| ~2007-2009 | Starts to densify | thousands of filings/year |
| 2010 → today | Dense | tens of thousands of filings/year |
Key reading: the ~2007 frontier separates "the corpus is substantially complete" from "coverage is residual". An analysis that starts before ~2007 will see few rows because the source has few rows, not because ingestion is missing.
How the read contract exposes this frontier
Under the contract-honesty work (CONTRACT-01), every insights response stops being a bare array and is wrapped in an envelope with freshness metadata:
{
"data": [ /* … the same aggregation rows, untouched … */ ],
"dataAsOf": "2026-03-06T10:05:00.000Z",
"coverageThrough": "2026-03-05"
}
data— exactly the rows the aggregation returned before (same rows, same order, same counts). The envelope wraps, never mutates.dataAsOf— ISO timestamp of the last successful sync: up to when ingestion ran.coverageThrough— the enriched frontier: the most recent filing date among the already-enriched instancias (with class/holder). Beyond that date live the fresh Buscador stubs, seen but not yet enriched — reporting THEIR newer date would overstate coverage.
Both fields are omitted (never surfaced as null) when there is no datum, additively and
backward-compatibly — the same convention as detail and similar. REST and MCP return the same envelope
by construction (a single layer in the shared query layer), proven with a deep-equal parity test.
The historical scoring inherits the frontier
The product's second moat — the historical decision scoring — leans on INAPI's history of resolutions. By definition it inherits this same frontier: a historical analysis before ~2007 has residual coverage, and that is expected, not a gap. The more recent the period analyzed, the denser the evidence the score rests on. This is documented here so a historical score is read with the correct coverage context.
Related quality notes
- The
estadogap (~126k rows without estado at snapshot, ≈15.2%) is a long tail spread across every year, not a single-year/single-source hole — seeSCHEMA-MAPPING.md(internal engineering reference). It is closed by the authoritative daily Sheets sweep, not by re-scraping the Buscador. - The "99x" numbering series (~20,315 rows, mostly foreign marks) is legitimate — consistent with international registrations / Madrid Protocol into Chile — and is treated the same as the normal series for read purposes.
In short: the corpus is honest about its own frontier. Dense from ~2007, residual before, and every insights response says so out loud via
coverageThroughanddataAsOf.