Buyer’s question

The Litigation Trend That Was an Ingest Schedule

Correction, 7 September 2026. This article reported redundant documents sharing a case number at 0.61 per cent of documents on 11 April 2023. A follow-up measurement found that 96.4 per cent of the repeated case numbers on that date are not repeats at all but distinct instruments sharing one docket — a judgment and a ruling, or a ruling and an enforcement notice. Under a de-duplication key that includes the document type, redundancy on that date is 0.02 per cent. The other three dates move by fifteen basis points or less (9.71 to 9.56, 7.33 to 7.23, 16.35 to 16.10 per cent), so the findings below stand; the 0.61 per cent figure for 11 April 2023 does not. Method and figures: The De-duplication Rule That Deletes the Field You Wanted.
Verified, 19 September 2026. The year table below was re-checked against the finding that three of our fifteen ingest batches carry a publication date in the date field. Excluding those three batches entirely changes nothing outside the noise: six of the nine rows draw 0.0 per cent of their records from the affected batches, and the two that do move by at most two per 10,000 (2022: cause filter 235 → 233, text control 280 → 278; 2023: 243 → 243, 299 → 301). The eighty-four per cent fall to 2020 and the ninefold recovery to 2023 are unchanged. Method: We re-ran our own accuracy checks with a better sampler.

Yesterday we found that one Chinese intermediate court sits in our own facets under two different names, and that which name a record carries is decided by which ingest generation loaded it. We closed with an obvious question and left it open: if the batch decides the court’s name, what else does the batch decide?

Today we asked the index directly, batch by batch, field by field, with exact counts rather than a sample. The answer is worse than a naming quirk. For the fields buyers actually filter on, completeness is close to binary at the batch level — a batch either populates a field on nearly every record or on none of them — and because batches are era-shaped, that binary turns into a curve when you plot anything by year. The curve looks like a story about Chinese litigation. It is a picture of our loading history.

Scope, stated once. All figures below were taken on 6 September 2026 against our own index. Batch-level and year-level rates are exact counts over every matching record, not samples: they come from aggregations that read the whole index, and the batch counts sum to the index total with nothing unallocated. The duplicate figures come from four calendar dates enumerated document by document — 18 May 2016, 12 June 2019, 27 September 2021 and 11 April 2023 — where the enumerated count matched the index’s own total on all four (49,302 / 53,800 / 77,610 / 32,318). Those four dates were chosen to span eras, not at random, so treat them as four worked examples rather than an estimate of any annual rate. We deliberately publish rates within a named slice and not corpus-wide totals. Nothing here is a claim about any other vendor’s data, because we did not measure one. Case numbers quoted identify courts and dockets, not people. This is informational content, not legal advice.

The field is never missing. It is present and empty.

Start with the least dramatic finding, because it is the one that defeats the usual test. Our records carry a cause-of-action field. Across fourteen of our fifteen ingest batches, that field is absent on 0.0 per cent of records — it is there, on every single record. A schema conformance check therefore returns full compliance, and a vendor could truthfully say the field is present corpus-wide.

Now ask whether it has anything in it.

Ingest batchCause of action populatedProvince populatedProcedure populatedCourt populated
Largest batch (oldest family, second generation)0.0%78.1%58.5%97.1%
Second largest (oldest family, first generation)84.2%98.4%100.0%99.8%
Third largest (year-named)0.0%92.6%99.9%100.0%
Two legacy batches93.5% / 91.6%0.0% / 0.0%0.0% / 100.0%66.6% / 66.8%
Remaining nine year-named batches95.8% – 100.0%73.9% – 100.0%98.6% – 100.0%98.7% – 100.0%

Read the cause-of-action column as a distribution and it has no middle. Twelve batches sit between 84 and 100 per cent. Two sit at exactly zero, and they are the largest and the third largest batches we hold. There is nothing in between. The same shape appears in the province column, where two legacy batches carry the field at 0.0 per cent because the upstream schema for that generation simply had no province concept, and in the procedure column.

This is what a merged corpus looks like from the inside. Completeness is not a quality level that the corpus has; it is a mixing ratio between batches that each have their own, near-absolute answer. Any single number you are quoted — ours or anyone’s — is that mixing ratio evaluated over whatever population the person quoting it happened to measure.

Batches are era-shaped, so completeness becomes a function of year

If batches were scattered randomly across judgment dates, the mixing ratio would be constant and the averages would be honest. They are not. Each batch was loaded from a source that covered a period, so the batch mix changes as you move along the time axis, and the completeness of every field moves with it.

Judgment yearCause of actionProvinceProcedureCourt
201380.1%97.2%97.2%99.3%
201571.0%96.6%94.7%99.5%
201662.8%94.5%91.6%99.4%
201746.8%93.3%84.8%99.1%
201822.0%61.0%52.9%91.0%
201929.1%68.4%66.4%89.8%
202010.7%84.3%91.0%96.7%
202147.6%93.8%100.0%100.0%
202296.7%95.3%100.0%100.0%
202497.1%73.9%99.9%100.0%

Note what this is not. It is not an ageing curve: 2013 scores higher than 2018 on every column, and the years 2000 to 2012 sit between 78 and 98 per cent on cause of action. The damage is in the middle of the corpus, not at the old end. Nor is it monotonic in recency — province coverage is 95.3 per cent in 2022 and 73.9 per cent in 2024, because a recent batch happens to be thinner on that one field.

The mechanism is visible if you break a single year down by the batches that supply it. For 2018, one batch supplies 75.0 per cent of the year and populates cause of action on 0.0 per cent of its records; the batches supplying the next 12.9 and 7.4 per cent populate it on 83.3 and 93.6 per cent. For 2020, one batch supplies 88.7 per cent of the year at 0.0 per cent cause coverage, while the batch supplying the next 8.9 per cent sits at 93.7 per cent. Same year, same courts, same kind of document. The only thing that differs is which load it arrived in.

What this does to a buyer’s first chart

The first thing almost every evaluator does with a corpus is count something by year. So we did that, the way a buyer would: filter on a common cause of action — labour and employment disputes — and normalise per 10,000 documents in that year, so that the changing size of each year cancels out. Then we built a control over the same documents that does not read the cause field at all: a phrase search in the judgment text.

Judgment yearStructured filter, per 10,000 docsText control, per 10,000 docs
2013167304
2015168316
2016145303
201791264
201835238
202027169
2022235280
2023243299
2025217264

The filtered series falls 84 per cent from 2015 to 2020 and then rises nine-fold to 2023. Peak to trough it moves by a factor of nine. The control moves by a factor of 1.8 across the same years, and its dip is both shallower and differently shaped. An analyst who saw only the first column would write a paragraph about a collapse in labour litigation and a post-2021 surge, and every word of it would be about our loading schedule.

Be careful about what the control proves. A phrase in a judgment’s text is not a reliable indicator that the case is of that type — documents mention dispute categories they are not about. The control is not a better estimate of litigation volume, and we are not offering it as one. Its only job is to be a measurement of the same documents that does not depend on the field under suspicion. When two such measurements disagree by a factor of five in their dynamics, the disagreement is information, and here it lines up exactly with the batch mix in the table above.

The same judgment, more than once, in more than one vocabulary

There is a second mechanism underneath the first, and it is the one that makes the first hard to repair. To measure it without sampling error we picked four calendar dates and enumerated every document on each of them, one by one, then grouped by case number. Enumerated counts matched the index total on all four days.

Date enumeratedDocumentsDistinct case numbersRedundant documentsRepeats spanning more than one batch
18 May 201649,30243,9704,785  (9.8%)93.9%
12 June 201953,80049,8583,942  (7.3%)70.1%
27 September 202177,61064,92412,686  (16.3%)96.4%
11 April 202332,31832,121197  (0.6%)17.9%

Two of these numbers deserve emphasis. The first is the spread: 0.6 per cent on one day and 16.3 per cent on another. Redundancy in a merged corpus is not a constant you can subtract; like the completeness rates above, it is a function of which batches overlap on the slice you are looking at. Quote it as a single corpus figure and you will be wrong on most slices in both directions. The second is that these counts are conservative, because we grouped on the exact case-number string; normalising bracket forms and whitespace raised the 2016 figure from 9.8 to 10.2 per cent and the 2023 figure from 0.6 to 0.9 per cent. Repetition also happens within a single batch: documents sharing both a batch label and a case number account for 1.89, 3.57, 1.26 and 0.50 per cent of the documents carrying a case number on those four days, so the cross-batch merge is not the only source.

Now the part that matters more than the row count. The copies do not agree. Taking every case number that appeared more than once on 18 May 2016:

FieldRepeated case numbers whose copies differOne copy blank, another filledTwo different non-blank values
Case type95.2%03,916
Province94.4%1,3852,499
Procedure93.9%1,9381,926
Cause of action74.4%3,0611
Court34.9%381,399

Almost none of these are contradictions about the case. They are different vocabularies for the same fact. In the case-type column, one batch stores the document type in that position — judgment, ruling — while another stores the case type: civil, criminal, enforcement. In the procedure column, one batch stores numeric codes and another stores labels, so the same first-instance case reads as 1 in one copy and as the words for first instance in the other. In the province column the disagreement is an administrative suffix present or absent. In the court column it is yesterday’s finding, now visible inside a single case rather than across a facet: the province-prefixed official style in one copy and the common short style in the other.

A representative group, one case number, four copies across two batches: the older batch carries a specific cause of action, the province name with its suffix, a numeric procedure code and the document type in the case-type position, and names the court without its province prefix. Three copies from the newer batch carry a blank cause of action, the province name without its suffix, a worded procedure, the case type in the case-type position, and the court name with its province prefix — and one of those three has the province and procedure blank as well, while its two siblings do not.

So de-duplication is not free. If you drop repeats by keeping an arbitrary copy, on 27 September 2021 94.0 per cent of repeated case numbers had one copy with a cause of action and one without, and the expected outcome is a blank cause on 47.0 per cent of them. On 18 May 2016 those figures are 74.4 and 38.4 per cent. Keep the wrong copy and you have not removed a duplicate row; you have destroyed a field. Keep the right copy and you need a rule that knows which vocabulary you are standardising on — that rule is the actual deliverable, and it is not in any record.

The 7,000 documents no filter can reach

One last item, small, exact and complete. One of our fifteen batches holds 7,000 documents whose cause, court, province, procedure, case type and year fields are all absent — not empty, absent, the only place in the corpus where that is true. They carry a title, a case number, a date and full text. They are real judgments: in a 300-document check, 271 named a court or tribunal within the first eighty characters of their text, just not in the court field.

We checked whether they are new material by taking the upstream record identifier of each and looking for it under every other batch label. All 7,000 are re-labelled copies of records that already sit in another batch — not a sample, all of them — and the twins carry the metadata these copies lack: court on 7,000, case type on 7,000, year on 7,000, procedure on 6,998, cause on 6,796, province on 5,996.

The consequence is precise. These documents are reachable by full-text search and unreachable by every structured filter. They inflate any raw document count. They can never appear in a count by court, by province, by year or by cause, so they will never make a facet look wrong. A buyer running coverage tests through filters would never see them; a buyer running retrieval evaluations would hit them and score them as unlabelled noise.

Reproduce any of this on us in one request

Every claim about a specific case above is checkable from outside, without a key and without asking us. Our public search endpoint accepts an exact case number and returns every copy we hold, each stamped with the batch it came from:

GET https://www.wenshucha.com/wscx2/search?caseNo=<case number>

Returns one record per copy, each with: dataset, court,
cause, province, procedure, case_type, doc_id

Take any case number from any judgment you already have, ask for it, and count the rows. If more than one comes back, put the fields side by side and see whether they agree. That is the entire test, it takes one request, and it works the same way on any vendor who will let you look up a case number and see a provenance stamp. If they will not tell you which batch a record came from, you cannot run it — and that is itself the answer to a different question.

Four checks worth minutes of your time

  1. Ask for completeness by batch and by year, never as one number. A corpus-wide average is a mixing ratio. Ours would tell you the cause field is roughly half populated, and there is no query for which that is the right expectation: within a batch it is 0 per cent or above 84 per cent, and within a year it ranges from 10.7 to 97.1 per cent.
  2. Build every count twice, once through the filter and once through a control that does not read that field. Compare shapes, not levels. Divergence in dynamics is the signature of a metadata artefact, and it is cheap to detect long before you can explain it.
  3. Ask whether a judgment can appear twice, what the de-duplication key is, and which copy wins. Then ask for the disagreement rate between copies on the fields you care about. A vendor who has never computed it has not de-duplicated; they have deleted rows.
  4. Ask whether an empty field is stored as empty or as absent. Schema validation cannot tell the difference and will report full compliance either way. This one question separates “the field exists” from “the field is usable”.

What we did not do

We fixed nothing today. Normalising vocabularies across batches, and choosing a surviving copy for each duplicate, both change values that anyone joining on the current data already depends on; that belongs in a change log with notice, not in a quiet edit, and it needs a decision about which vocabulary wins rather than a script. We did not measure any other vendor’s corpus and make no comparison. The four enumerated dates were chosen to span eras, not sampled, so their duplicate rates are four worked examples and not an annual estimate. The text control is a control, not a truth: it does not measure how much labour litigation occurred, and we have not claimed it does. And every rate here is a rate within the slice named beside it.

We publish this for the same reason as yesterday’s finding. Every corpus assembled from more than one source generation carries these seams, almost none of them are visible in a single record, and the tests that buyers habitually run — schema validation, spot-checking documents, eyeballing a facet — are all structurally blind to them. The chart is the giveaway. If a legal data time series has a cliff in it, check the loading history before you write the analysis.

Run the four checks on us.

SinoVerdict licenses PRC judgment data to teams building legal AI — bulk delivery, a REST API and an MCP endpoint over a 160M+ record corpus, English-indexed, with every record stamped with the batch it came from and the known gaps written down before anything is signed. The endpoint used above is public and needs no key. If your audit finds something not listed here, send it and we will publish it. Write to chenjiaxin@wenshucha.com or use the form.

Request trial access

Frequently asked questions

Why does a cause-of-action time series built on Chinese judgment data show a collapse and a recovery?

Usually because the field is empty for the years in the trough, not because litigation moved. On our own corpus on 6 September 2026, records carrying a labour dispute cause of action ran at 167 per 10,000 documents in 2013, fell to 27 per 10,000 in 2020, and rose to 243 per 10,000 in 2023. A text-based control over the same documents, which does not read the cause field at all, ran at 304, 169 and 299 per 10,000 across the same three years. The filtered series swings nine-fold peak to trough; the control swings 1.8-fold. The extra motion is the share of each year supplied by ingest batches that leave the cause field empty on every record.

Is metadata completeness a property of the documents or of the vendor’s loading process?

In our corpus it is overwhelmingly a property of the batch. Measured across all fifteen ingest batches on 6 September 2026, the cause-of-action field is populated on 84 to 100 per cent of records in twelve batches and on 0.0 per cent of records in two of the three largest. Nothing sits between. Within a single judgment year the same split holds: for 2018, the batch supplying 75 per cent of that year populates the cause field on 0.0 per cent of its records while the batches supplying the next 12.9 and 7.4 per cent populate it on 83.3 and 93.6 per cent. Ask any vendor for completeness broken out by batch, not as a corpus-wide average, because the average is a mixing ratio and describes no query you will actually run.

Can the same judgment appear more than once in a legal data corpus?

Yes, and in ours it does. We enumerated every document on four calendar dates, document by document, with the enumerated count matching the index total on all four. Redundant documents sharing a case number ran at 0.6 per cent of one day, 7.3 per cent of another, 9.8 per cent of a third and 16.3 per cent of a fourth. Most repeats span more than one ingest batch: 93.9 per cent of repeated case numbers on 18 May 2016 and 96.4 per cent on 27 September 2021. Repetition is not only a cross-batch effect: documents sharing both a batch label and a case number account for between 0.50 and 3.57 per cent of the documents carrying a case number on those four days.

Why is de-duplicating a merged case law corpus not just a matter of dropping rows?

Because the copies disagree about the case, so whichever copy survives changes your metadata. On 27 September 2021, 94.0 per cent of repeated case numbers had at least one copy carrying a cause of action and at least one copy with that field blank; keeping an arbitrary copy leaves the cause blank on an expected 47.0 per cent of those case numbers. On 18 May 2016 the same figures were 74.4 per cent and 38.4 per cent, and 95.2 per cent of repeated case numbers carried two different non-blank values in the case-type field, because one batch stores the document type there and another stores the case type. De-duplication in a merged corpus is a metadata decision, not a row-count decision.

How can I check a legal data vendor for batch artefacts before signing?

Four checks, all cheap. First, ask for completeness of every field you intend to filter on, broken out by ingest batch and by judgment year, not as one corpus-wide number. Second, build the same count twice, once with a structured filter and once with a text-based control that does not read that field, and compare the shapes rather than the levels. Third, ask whether one judgment can appear more than once, what the de-duplication key is, and which copy wins when copies disagree. Fourth, ask whether an empty field is stored as an empty value or as an absent one, because a schema validator reports full compliance in the first case: in our corpus the cause field is present on every record in fourteen of fifteen batches and empty on every record in two of them.