Buyer’s question

The De-duplication Rule That Deletes the Field You Wanted

Yesterday we published a finding and left a hole in it. We had shown that the same judgment can sit in our corpus several times over, and that the copies disagree with each other about the case — so collapsing them is a metadata decision, not a row-count decision. What we did not give was a rule for deciding which copy lives. Without that, the finding is an observation a buyer cannot act on.

Today we implemented the rule almost everyone reaches for first — keep the copy with the most populated fields — and measured what it does to our own data. The short answer: on one date it is excellent, on another it is destructive, and the difference is not in the rule at all. Along the way the measurement forced us to correct one of yesterday’s own published numbers.

Scope, stated once. All figures below were taken on 7 September 2026 against our own index. The four dates — 18 May 2016, 12 June 2019, 27 September 2021 and 11 April 2023 — were enumerated document by document, and the enumerated counts again matched the index totals exactly (49,302 / 53,800 / 77,610 / 32,318). Batch-level figures come from aggregations that read every matching record, with the total-hits cap disabled. The four dates were chosen to span ingest eras, not at random, so treat them as four worked examples and not as an estimate of any annual rate. We publish rates within a named slice rather than corpus-wide totals. Nothing here is a claim about any other provider’s data, because we did not measure one. Case numbers identify courts and dockets, not people. Informational content, not legal advice.

The rule, and the first thing wrong with it

The rule is simple enough to write in a sentence. Group records that share a case number; score each copy by how many of six metadata fields are non-empty — court, cause of action, case type, procedure, province, judgment year; keep the highest scorer. It needs no reference data and no human. That is exactly why it is the default.

Before asking whether its answers are good, ask how often it produces one at all. A rule that ties has not decided anything; it has quietly handed the choice back to whatever order your rows happened to arrive in.

Date enumeratedDocumentsRepeated case numbersRule decidesRule ties
18 May 201649,3024,1153,870245 (6.0%)
12 June 201953,8002,8491,5811,268 (44.5%)
27 September 202177,61011,99311,099894 (7.5%)
11 April 202332,3181962194 (99.0%)

On the most recent date the rule settles two cases out of 196. Everywhere else the copies are equally populated and the tie-break falls through to insertion order — which is to say, to nothing. A rule that is silent 99 per cent of the time is not a policy; it is a coin flip with a policy’s reputation. Hold that date; it turns out to be the interesting one for a different reason.

Same rule, opposite outcomes

Now the quality question. For each repeated case number we compared three strategies on the field buyers filter on most, the cause of action: the expected coverage if you keep an arbitrary copy, the coverage delivered by the most-populated-copy rule, and the coverage available under a field-wise merge that takes any non-empty value from any copy.

DateArbitrary copyMost-populated-copy ruleField-wise merge
18 May 201638.5%76.5%76.9%
12 June 201962.4%39.1%91.9%
27 September 202150.1%97.1%97.1%
11 April 2023100.0%100.0%100.0%

On 27 September 2021 the rule is a large win: it nearly doubles cause-of-action coverage and leaves nothing on the table. On 12 June 2019 the same rule, unchanged, performs worse than picking a copy at random — it drops coverage by 23 percentage points against the arbitrary baseline and forfeits 52.8 percentage points against what was actually available. Concretely: on that date the rule’s chosen survivor has an empty cause of action although another copy in the same group carried one in 1,504 of 2,849 repeated case numbers, 52.8 per cent.

So the useful question is not “is this a good rule”. It is what makes it good on one date and destructive on another.

The answer: batches are complementary, and counting cannot see it

Yesterday we established that in a merged corpus, field completeness is close to binary at the batch level. Put two such batches on the same case and the consequence follows immediately. Here is 12 June 2019 broken out by the batch that supplied each document.

Batch supplying that dateDocumentsCourtCause of actionCase typeProcedureProvince
Dominant batch48,611100.0%0.0%100.0%69.3%99.9%
Small batch A3,39577.8%95.1%0.0%0.0%0.0%
Small batch B1,03272.7%92.6%100.0%100.0%0.0%
Small batch C761100.0%98.7%100.0%98.9%93.3%

The dominant batch scores four or five populated fields on almost every record and has no cause of action at all. Small batch A scores two and is the only place the cause of action exists. Counting fields therefore hands the dominant batch a permanent, structural victory, and the surviving record is stripped of the single attribute that made the duplicate worth having. The attribution is unambiguous: of the 1,504 groups that lost a cause of action, 1,451 were the dominant batch beating small batch A.

Compare 27 September 2021, where the rule performed beautifully. There the overlapping batches were not complementary but nested — one simply carried more of everything — so “most populated” and “most correct” pointed the same way. The rule never changed. The batch pair did. Any de-duplication policy quoted to you without the batch pairing it was measured on is a policy whose behaviour is unknown.

Populated is not correct, and the rule rewards populated

There is a worse failure mode hiding inside “most populated”: a field that is filled in with the wrong value scores exactly like a field that is filled in with the right one.

PRC case numbers are useful here, because they carry their own validator. We established the mechanics separately — the case number is the only honest province field we hold, since the number encodes the issuing court including a province character. What is new today is using it as a de-duplication instrument: the court and province fields on a record can be checked against the case number on that same record, with no external reference data and no judgement call, which turns a class of apparent conflicts between copies into a verdict about one of them. We ran that check across every batch appearing on the four dates.

The result was flat — every batch contradicted its own case numbers on 0.0 to 0.1 per cent of testable records — with a single exception. In one batch, 33.3 per cent of the records whose court field names a province contradicted the province encoded in the case number. Widening from that date to the whole batch, about 4.4 million records, the shape of the corruption is plain:

Court valueShare of the affected batchShare of our largest batchShare of our second largest
Court field empty33.4%——
Supreme People’s Court16.74%0.10%0.08%
One provincial high court8.66%0.06%0.06%

A single trial-level docket cannot have been decided by the Supreme People’s Court, and one provincial high court cannot account for a twelfth of a nationwide batch. Two court values are absorbing a quarter of that batch, and the case numbers on those records name district courts in other provinces. This is not sparse data. It is dense, confident, wrong data, and a field-count rule reads it as a point in that copy’s favour.

How often does that actually bite? On 12 June 2019, 779 of 2,849 repeated case numbers (27.3 per cent) contain at least one copy whose court contradicts its own case number. The rule selected that contradicting copy in 70 of them, and in 64 of those a clean copy was sitting in the same group, unselected. Small in absolute terms — and entirely invisible to any check that only counts populated fields.

An instrument error we made and caught, recorded because it is the more useful half. Our first version of this validator required the province name to appear inside the court string. It flagged 90.5 per cent of one batch as contradictory. That is the shape of a broken instrument, not of broken data: Chinese court names routinely omit the province prefix, so a district court in Anhui is correctly named without the word Anhui in it. The rebuilt test compares only when the court string itself names a province or names the Supreme People’s Court, and it returns 0.0 to 0.1 per cent everywhere except the one batch. The 33.3 per cent figure above is from the rebuilt test. Had we published the first number, we would have reported a corpus-wide catastrophe that does not exist.

The correction: some of what we called duplicates were not duplicates

The most recent date, where the rule tied 99 per cent of the time, tied for a reason we had not considered. We inspected the groups instead of counting them.

They are not copies. They are different instruments sharing one case number: a judgment and a ruling on the same docket; an enforcement ruling and an enforcement notice; a decision and a ruling. The copies tie on field count because both are complete records — of different documents. Collapsing them would not have removed redundancy; it would have deleted a document that exists.

DateRepeated case numbersGroups holding 2+ document typesRedundancy, case number aloneRedundancy, case number + document type
18 May 20164,11571 (1.7%)9.71%9.56%
12 June 20192,84951 (1.8%)7.33%7.23%
27 September 202111,993194 (1.6%)16.35%16.10%
11 April 2023196189 (96.4%)0.61%0.02%

This corrects a number we published yesterday. We reported redundancy of 0.61 per cent on 11 April 2023 as a duplicate rate. Under a key that includes the document type it is 0.02 per cent, because 96.4 per cent of those groups were judgment-and-ruling pairs rather than repeats. The other three dates move by fifteen basis points or less, so yesterday’s substantive finding stands; the most recent date’s figure does not, and we have annotated that article accordingly. The general lesson is the one that costs money: a de-duplication key that does not include the document type will silently destroy real instruments, and it will do so most aggressively on the newest data, where each docket has more of its instruments published.

There is a cheap tell for distinguishing the two cases, and it is worth stating because it costs one comparison per group. Within repeated case numbers, the share whose titles are identical ran 50.1 per cent on 18 May 2016, 43.0 per cent on 12 June 2019, 98.1 per cent on 27 September 2021 and 0.0 per cent on 11 April 2023. The date where the survivorship rule was most useful is the date where the copies are near-identical documents; the date where it was useless is the date where they were never copies at all. A group whose titles all differ deserves inspection before it is collapsed, and titles are one field away in any corpus that has them.

What we would actually ship

Putting the measurements together gives a protocol rather than a rule. Each step below exists because one of the failures above forced it.

  1. Key on case number plus document type. Case number alone over-groups; on one of our four dates it over-grouped 96.4 per cent of the groups it found.
  2. Merge field-wise; never keep one document and discard the rest. Document-level survivorship cost us 52.8 percentage points of cause-of-action coverage on a single date. Field-wise merge recovered it: 91.9 per cent against the rule’s 39.1 per cent.
  3. Assign trust per batch and per field, not per record. Population and correctness are both batch properties. The batch that supplies the cause of action on that date is the same batch whose court field is unreliable — so it should be trusted for one field and distrusted for another. No record-level score can express that.
  4. Run an internal validator before you trust a populated value. The court code inside the case number needs no reference data. On 12 June 2019 it reclassified 684 of 963 apparent court conflicts from “two sources disagree” to “one source is wrong” — which is a repair, not an arbitration.
  5. Publish the residual arbitration budget. After field-wise merge and the validator, what remains is the set of conflicts a machine genuinely cannot settle. That number is the honest measure of how much human work a corpus still owes.

Ours, on the four dates, after steps one to four:

DateConflicts before the validatorResidual conflictsPer 10,000 documentsConcentrated in
18 May 201614914930.2court (94), case type (54)
12 June 201999731558.6court (279), procedure (23)
27 September 202121212.7cause of action (21)
11 April 202319195.9cause of action (19)

Two things are worth reading off that table. The residual is small — between 3 and 59 groups per 10,000 documents, so the arbitration problem is bounded and fundable rather than open-ended. And it is concentrated: most of what looked like disagreement in the raw data was vocabulary rather than contradiction — one batch storing a procedure as a numeric code where another stores a word, one storing the document type where another stores the case type, one writing a province suffix another omits. Those need a crosswalk, written once. What survives a crosswalk and a validator is the real work, and it is a few dozen groups per ten thousand documents.

What we are not claiming

We measured no other provider, so nothing here ranks anyone against anyone. The four dates were chosen to span ingest eras, which makes them worked examples and not an annual rate — the residual budget in particular will move with the batch mix of whatever slice you care about. We have not applied any of this: normalising a vocabulary or choosing a surviving value changes results for anyone who has already joined against current values, so it belongs in a change log with notice, not in a quiet overwrite. The corrupted court field in that one batch is now a known defect on our list rather than a fixed one. And the validator itself only covers court and province, because those are the fields the case number encodes; a cause of action cannot be checked this way, which is precisely why the cause of action is what remains in the residual column on two of the four dates.

If you are evaluating any Chinese case law corpus, including ours, the four questions that follow from all of this are cheap to ask and hard to answer vaguely: what is your de-duplication key; what happens to a field the surviving copy does not have; how do you distinguish a populated field from a correct one; and what is your residual arbitration count. We have now answered all four on our own data, in public, with the failures included.

Ask us the four questions.

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 defects written down before anything is signed. Records carry the court’s own case number as a stable identifier, which is also what makes the validator above runnable by you rather than only by us. Write to chenjiaxin@wenshucha.com or use the form.

Request trial access

Frequently asked questions

What is a survivorship rule in legal data de-duplication?

It is the rule that decides which copy of a repeated record is kept when a corpus collapses duplicates. The most common one is to keep the copy with the most populated metadata fields. We implemented exactly that rule on our own PRC judgment corpus on 7 September 2026 across six fields and measured it on four dates enumerated document by document. It produced opposite outcomes on different dates: on 27 September 2021 it raised cause-of-action coverage across repeated case numbers from an expected 50.1 per cent under an arbitrary pick to 97.1 per cent, while on 12 June 2019 it cut that coverage from an expected 62.4 per cent to 39.1 per cent. A survivorship rule has no fixed quality; its outcome is a property of which ingest batches happen to overlap.

Why can keeping the most complete copy of a judgment lose data?

Because completeness is counted, not weighted, and batches are complementary. On 12 June 2019 in our corpus, the batch supplying most documents that day populated court, case type, province and year on essentially every record but populated the cause of action on 0.0 per cent of them. A much smaller batch populated the cause of action on 95.1 per cent of its records and case type, procedure and province on 0.0 per cent. Counting populated fields makes the first batch win every time, so the surviving record loses the one field only the loser carried. That happened in 52.8 per cent of repeated case numbers that day, and in 1,451 of those 1,504 cases the winner came from the batch with no cause of action at all.

Is a case number a safe primary key for Chinese court judgments?

No, and treating it as one deletes real documents. A single Chinese case number can carry several distinct instruments: a judgment and a ruling, a ruling and an enforcement notice, a decision and a ruling. On 11 April 2023 we found 196 repeated case numbers in our corpus, and 189 of them, 96.4 per cent, contained two or more different document types rather than two copies of one document. Collapsing that date on case number alone would have destroyed distinct instruments. Once the document type is part of the key, the redundancy on that date falls from 0.61 per cent of documents to 0.02 per cent. On three other dates the same correction was small, moving 9.71 to 9.56, 7.33 to 7.23 and 16.35 to 16.10 per cent.

How can you tell whether a metadata field is populated but wrong?

Use a validator the data carries internally. A PRC case number encodes the court that issued it, including a province character, so the court and province fields can be checked against the case number on the same record without any external reference. Running that check by ingest batch on 7 September 2026, every batch we hold contradicted its own case numbers on 0.0 to 0.1 per cent of testable records, except one: in that batch, 33.3 per cent of records whose court field names a province contradicted the province encoded in the case number. Across that whole batch of about 4.4 million records, 16.74 per cent name the Supreme People’s Court and 8.66 per cent name a single provincial high court, against 0.10 per cent and 0.06 per cent in our largest batch. A field-count survivorship rule cannot see any of this, because a wrong value counts as a populated one.

What should a de-duplication protocol for a merged case law corpus contain?

Five things, in order. First, a key that includes the document type, not the case number alone. Second, field-wise merge rather than document-level survivorship, so no field is lost to a copy that never had it. Third, trust assigned per batch and per field rather than per record, because population and correctness are both batch properties. Fourth, an independent validator such as the court code inside the case number, which on our data resolved 684 of 963 apparent court conflicts on one date. Fifth, a published arbitration budget: the count of conflicts a rule genuinely cannot settle. On our four dates that residual ran at 30.2, 58.6, 2.7 and 5.9 groups per 10,000 documents, and the remainder was concentrated in the court and cause-of-action fields.