2.6 KiB
2.6 KiB
numPr Section Continuity Check (2026-07-12 盈浦健康科普案)
Problem Pattern
Contracts where every section's body paragraphs use auto-numbering (numPr) — each chapter heading (一、二、三…) is followed by body paragraphs that all carry a shared numId, rendering as "1." "2." "3." etc.
When workflow inserts new paragraphs via add_clause:
- Missing numPr: New paragraph gets no numPr → breaks numbering sequence (siblings show "1." "2." "3." but new paragraph has no number)
- Wrong numId: New paragraph inherits numPr from wrong section (e.g., clones neighbor paragraph's numId=11 which belongs to "七、不可抗力", making the new "转包" content render as "3." in the wrong sequence)
Diagnosis Steps
- Run
numbering-diagnose.pyon both original and modified files - For each WB INS paragraph, check:
- Does it have numPr? Should it?
- If yes, does its numId match the section it belongs to (not an adjacent section)?
- Map numId → section by looking at which chapter heading precedes the numId's first occurrence
Real Example (盈浦健康科普 2026-07-12)
Original structure:
- 五、保密条款: P59-P61 all numId=9 → renders "1." "2." "3."
- 六、违约责任: P64-P68 all numId=10 → renders "1." "2." "3." "4." "5."
- 七、不可抗力: P71-P72 numId=11 → renders "1." "2."
- 八、争议解决: P75-P78 numId=12 → renders "1." "2." "3." "4."
Workflow output problems:
- P62 (new data breach clause under 五、保密): No numPr at all. Should be numId=9 to continue as "4."
- P75 (转包 body text under new 八、转包): Got numId=11 (不可抗力's sequence!) → renders as "3." continuing 不可抗力's list. Should either have no numPr (single-paragraph section doesn't need numbering) or a fresh numId with start=1.
Reviewer Checklist Item
When reviewing workflow output for contracts with section-level auto-numbering:
- Each new INS paragraph: does it need numPr? (Yes if sibling paragraphs in same section have numPr)
- If it has numPr: does numId match the correct section?
- If it lacks numPr: do sibling paragraphs in the same section have numPr? (If yes → missing, severity: critical)
- New standalone sections (like 转包): body paragraph should NOT inherit previous section's numId
Root Cause
add_clause in ContractEditor clones the adjacent paragraph's pPr. When inserting after the last paragraph of section N (which has numId for section N), the new paragraph for section N+1 inherits section N's numId. The library's A-type strip logic removes numPr for "standalone clauses" but doesn't always fire correctly when the clone source has numPr.