Skip to content

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,757 instancia rows.

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.

  • The estado gap (~126k rows without estado at snapshot, ≈15.2%) is a long tail spread across every year, not a single-year/single-source hole — see SCHEMA-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 coverageThrough and dataAsOf.