界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
文档与办公 · SKILL.md

mqc-timeline-master

mqc-timeline-master

【文档与办公】Turn raw case materials into a faithful, court-ready case timeline (SVG + PNG + PPTX + VSDX + drawio, plus a traceability index in Word). Use this whenever the user hands over litigation materials — a judgment, complaint, defence, evidence list, contract, bank or Alipay statement, WeChat screenshots, scanned exhibits, photos, or just a spoken account…

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: mqc-timeline-master tags: [法律, 诉讼可视化, 律师, 时间轴, 案件经过, 制图] metadata: author: 缪奇川 version: 2.0.1 last_updated: 2026-08-23 description: >- Turn raw case materials into a faithful, court-ready case timeline (SVG + PNG + PPTX + VSDX + drawio, plus a traceability index in Word). Use this whenever the user hands over litigation materials — a judgment, complaint, defence, evidence list, contract, bank or Alipay statement, WeChat screenshots, scanned exhibits, photos, or just a spoken account — and wants the chronology drawn: 时间轴, 案件经过时间轴, 事实经过, 时间线, 梳理时间, 把经过画出来, 做一张时间轴图, 诉讼时效时间轴, 履约经过, 付款经过, 供货经过, 催告与送达经过, 两方主张对读. Also trigger when the user says 帮我梳理一下这个案子的经过, 把这些材料做成图, 这些证据整理成时间轴, or supplies scanned/photographed materials with no text layer and expects them read. Handles multiple materials at once, mixed formats (docx / txt / text-layer PDF / scanned PDF / images), and declares which events came from reading images. Default scenario is Chinese litigation; internal instructions are in Chinese because the constraints they encode were written and argued in Chinese.

新诉讼可视化 · 时间轴大师

时间轴大师,用数学,画准一张时间轴。

它替你解决的那件事

律师手上的材料是散的。一份判决书、几份合同、一叠证据目录、一段微信记录、 几张手机拍的照片,时间散落在其中。要把这些变成一张能交出去的图,难的从来不是画, 是两件事:该上图的事有没有抽全,抽全了排不排得下。

这个模块把这两件事分开做。前半段读材料,判断哪一句写的是已经发生的事实,把它们 归成事项;后半段接过这份清单,用纸张的物理尺寸算出每一个模块该摆在哪里、能有多宽、 能写多少字。两段之间只交接一个数,交接完就互不干涉。

材料怎么顺手怎么给:判决书、起诉状、答辩状、代理意见、合同、证据目录、银行与 支付宝流水、微信聊天记录、扫描件、手机照片,甚至一段口述。不必先整理,不必改格式, 也不必自己先画一张。没有文字层的扫描件与照片同样读得出来,做法是先逐页探测可读 字符数,再按 150 DPI 栅格化,然后逐页看图;交付时会声明哪几份出自读图,那几项请你 自己回原件复核一遍。

为什么能画准:位置、尺寸、容量全部是算出来的

一张 A4 有多宽是定死的。绘图宽 958 px,来自 A4 横版的 1070 减去两侧各 56 的留白。 这个数不由人改,后面所有的数都从它推出来。

推的顺序是一环扣一环的。时间轴上有几个时点,轴就被分成几段,每一段的长度决定了模块 落在哪里;位置定住,才知道相邻两个模块之间还剩多少空;剩多少空,决定一个模块能有 多宽;宽度定了,才知道这个模块能写几个字。所以先定位置,再定尺寸,最后才定能写 多少字,不能倒过来。

这些数不是查表得来的,换一份材料就换一组。编号型的卡宽由事项数压出来:八个事项时 189 px、十二个时 121 px、十六个时 96 px,卡片跟着变矮变窄,列距也从 110 收到 58。 日期型不一样,它的卡宽固定 214 px,因为时点多了是轴上挤、不是卡片变窄,正文至多 六行、约 84 字。期间型更特别,它的容量不是一个数而是每段各一个,条身长度由那一段的 真实天数决定,同一张图上各段差别可以从一个字到三十九个字。

放得下几个模块,同样是算的。第一道是一条不等式:

模块宽 × n  ≤  绘图宽 × 层数

全部模块的横向总宽不许超过绘图宽乘层数。它抓的是逐字段比对抓不住的那一类错,也就是 每个数看着都对、合起来却自相矛盾。

参数交出来之后还有第二道,用一组恒成立的关系把它验算一遍:

图宽 = 2 · 边距 + (n−1) · 列距 + 最小模块宽

等式两边只要差 0.5 像素就当场报错,并指名是哪一处尺寸算漏了。四项、八项、十二项、 十六项、二十项五档实测,差全部是 0.00。这一列不是差不多,是精确相等。

交接的顺序也是定死的:前端交出事项清单,后端按这一档的几何算出每个模块能写多少字, 把这个数交回去,前端再按这个数把字写到位。反过来先写好再排,就只剩两条路, 把字截掉或者把版面挤坏。

抽事实那一段没有公式可用。哪一句是事实、哪几句属于同一件事,是读懂内容之后的判断, 正则拿不到(试过一版按日期与文书名切分的正则切割器,在真材料上切出三组同名、一组 吞掉六成句子)。所以那一段交给模型做,代价是每一条判断都要能对回原句去核。

图上的字,回得去原句

卡片上每一段文字,都必须是原句删掉一些字之后剩下的样子。以原句「2021年3月5日, 双方签订设备采购合同」为例:写成「双方签订设备采购合同」通过;写成「双方签署」 换了词,拦住;写成「设备采购合同由双方签订」调了词序,拦住;补一个原句没有的字, 同样拦住。所以图上的每一句都指得回材料里的哪一句。

不进主轴的有三类:合同条款是约定,诉请是主张,付款计划是承诺。要画到期未付, 材料里得另有记载,比如一笔付款回单、一份催告函、一次对账。它不评价证据, 不认定事实,不给法律意见。

三种形态,由材料的性质定

编号型(numbered_point_timeline)的轴上距离只表先后,等距排开。时点密集、或者 没有精确日期时用它。它是阶梯的底,永远画得出。

日期型(dated_point_timeline)的轴按等长单位格铺开,距离本身在说话。时效届满与 起诉之间隔了多久、催告之后沉默了多久,这一类论点不在事情本身、在事情之间的距离上。 只有日期型能让空白成为证据。

期间型(proportional_gantt)把几段有长度的期间画成条,条长与重叠位置就是主张。 诉讼时效、保证期间、借款与计息起止、工期顺延与停工、租赁期、代持期,都属于这一档。 它还能同时承载时点,落在轴上画成虚线竖线加标注,所以不必另造一种混合型。

形态不由人选。判定顺序是期间型、日期型、编号型,材料的性质满足哪一档的硬条件就走 哪一档。

泳道:有几方各自的主张,就分几道

单侧用于只有一方叙述的材料,全部事项落在轴的一侧。这一档是有讲究的:一方转述对方的 话仍然带着这一方的身份,所以只有一方的材料就是单侧,不许分两侧标上原告主张与被告 主张。

双泳道用于两方各自的材料对读,比如判决书里的诉称与辩称、起诉状对答辩状。原告在上、 被告在下,这个上下是材料给的语义,不许翻转。

同一侧还可以再拆成多条横带,每侧最多三条、两侧共六条。它用来体现层级关系, 比如集团与子公司与项目公司、一审与二审与执行、主债务与保证与反担保。要说明的是, 横带是几何上的错开,泳道是语义上的分方,两件事不是一件:同一方的内容始终放在一起, 所以侧标签始终只有两个,上方一个、下方一个。

侧标签只写百分百确认得了的东西:材料上写着的身份或角色,比如原告与被告、甲方与乙方、 供货方与采购方、支出与收入、公司名。自认、违约、抗辩这类法律定性一律不写,说不准就 不出侧标签。

排不开的时候它不硬画

不缩字号,不截断,不硬塞。横向放得下几个事项由这一档的几何算出来,字越多每张卡越高, 能叠的层就越少,上限跟着降。走不通就自动落到下一档:日期型排不开就走编号型,横向排 不开就转成纵向长图并分页,纵向的事项数没有上限。所以它总归给得出一张图,或者当场 指名是哪一条约束不成立。

同一份材料,换谁跑、跑几次,出来都是同一张图。难的那部分不在模型手里,所以换一个更 弱的模型,出来仍是同一张。

它只画时间轴

流程图、当事人关系图、层级树、A/B 对比表不在这里,柱状图折线图饼图这类数据图表 也不做。那三类共七种由同一个插件里的 mqc-litigation-visual-redraw(诉讼可视化重画) 负责,它同时也能把你已经有的一张图重画得更好看。

你会拿到什么

一次交出五个文件,全部转写自同一份母版,位置与尺寸逐元素对齐,不是各画一遍:

文件用什么打开给谁用
.svgIllustrator · Figma · 浏览器主交付物,插进 Word 再编辑
.pptxPowerPoint · WPS讲课与庭前演示,每个方框双击就能改字
.vsdxProcessOn · Visio · WPS · Edraw在你本来就在用的那个工具里接着改
.drawiodraw.io同上
.png任何看图工具定稿位图,插进 Word 直接打印、微信发

除 .png 是位图之外,另外四种都能继续编辑,方框选得中、文字改得动,不是把图片贴 进容器。

三种视觉风格共用同一套几何,变的只是表达。奇川风以灰阶为底、一处深红标重点,交 当事人与客户;白描是纯黑白线稿,为打印、复印与卷宗附件准备;歸藏风用克莱因蓝, 适合讲课与对外传播。

另附一份溯源索引,是一份 Word 三线表,五列:序号、图上的元素、出自哪一份材料、 哪一句、核验方式。文字层材料标逐字,读图来的那几项标读图并单独说明它们没有文字层 可以逐字比对,请你自己回原件复核。打印出来夹在卷宗里,逐项对得回去;哪一项不对, 当场指得出来。

重画那一套的优势,整套继承下来

时间轴大师不是从零起步的。同一个插件里的第一个模块诉讼可视化重画已经开源并冻结, 它的四样东西这里原样继承,一个字都没重写:同一套几何(圆角、拐角、箭头、连线, 一个数都没重新拍过)、同一套视觉(三档风格、灰阶分层、深红是唯一的重音)、同一套导出 (五种格式的转写器,逐元素对齐)、同一套纪律(只许删不许改写,排布走不通就落档、 不硬画)。

所以它一上手就是成品的样子:同样的审美、同样的克制、同样能直接打印。新增的那一半是 把材料读成事实、把排布算准,这两件重画本来不做。

装在哪都能用

这是一个标准的 SKILL.md 目录,没有任何产品特定的胶水代码。凡是能读 skill 指令的 agent 都装得上:Claude Code 用两行命令从插件市场装(/plugin marketplace add 加 /plugin install),Codex 放进 skills 目录,DeepSeek Harness 挂 customSkillDirs 即可、不必构建,Cursor 与 Aider 等读的是同一份 SKILL.md。同一份仓库,不维护两套。

两个模块都不联网、不调外部接口、不需要任何凭据,只读你给的材料,只往你指定的目录 写文件。

你要做的只有勾选

最多五个问题:材料用哪几份、时间取哪一段、这张图呈报给谁、整份还是取其中几段、深红 标在哪一处。报个编号就行,不写代码,不改配置,不学语法。

该问的才问,三处会自己跳过:只有一份材料时不问第一问;材料里日期不足八个、或者只 覆盖一小段时间时不问第二问;风格不是奇川风时不问标红那一问,因为白描是单色、 歸藏风有自己的视觉规则。不回答就走默认。

其余的一律不问:图种、层数、卡宽、字数、分页,那些是算出来的。

质量

排布的五条产出路径各有一套常驻穷举,合计 2476 种情形:期间型 1260、期间型形态 360、 日期型 640、纵向 180、分页 36。每一组的结局只许两种,要么拒绝并给出机械理由, 要么画出来且十项全过,中间那种一组都不许有。此外还有横向容量附表 44 格逐格实际 渲染核对、阶梯兜底 6 组(四个到一百二十个事项,必须永远给得出图)。不是抽样, 不是挑几组跑给人看,每改一次全跑一遍,碰坏任何一种当场就红。

两百多条回归判据,每一条都做过故意改坏必须报错的验证。约束表分 C、D、M、P 四个 系列,每条约束带编号,代码里执行它的那一行带同样编号的标记,守卫比对两边的编号 集合,缺一个多一个都报错,所以文档与实现漂开会被当场抓住。

零第三方依赖,纯 Python 3 标准库。

装完先跑一次自检

Python 3。出 PNG 需要 LibreOffice 或 poppler,读扫描件需要 poppler 的 pdftoppm, 溯源索引需要 node。装完跑一次环境自检,它会逐项告诉你缺什么、缺了会退化成什么样。 没有一项是装不上,都是少一种格式。

自检脚本属于共享内核。在完整仓库里,它在同级的重画模块下:

python3 ../mqc-litigation-visual-redraw/scripts/doctor.py

在 SkillHub 那种单目录分发包里,内核随包带上,直接跑:

python3 scripts/doctor.py

完整文档、约束表与决策记录:https://github.com/MiaoQichuan/new-litigation-visualization


以下为供 AI 读取的操作说明,请勿改写。

时间轴大师

这个 skill 是 mqc-timeline-master ——新诉讼可视化 · New Litigation Visualization(把法律画出来)的时间轴模块。它把律师手上的原始材料忠实还原成一张 案件经过时间轴。

与 v1(mqc-litigation-visual-redraw,重画既有图)的分工:v1 重画,本模块从材料还原。 v1 已冻结,本模块复用它的渲染内核与五种格式导出器,不改它一个字。

这个 skill 的立场

它不是一个通用图表工具,是一个还原工具。

图上的每一个字都要能追回材料原文。所以这里的全部约束都指向一件事:模型可以答错, 但不许错得无声。凡是模型的判断,都要能对句子逐一核验。

三条最要紧的红线,违反其一这张图就不能交:

绝不改为
手写 SVG 坐标、凭眼睛摆位置写 JSON,几何全部由脚本算
改写材料的字(换词、调顺序、补字、概括)只许删减;卡片每段文字必须是原句的子序列
把没发生的事画成发生了(承诺、约定、诉请、我的判断)只画客观发生过的事;说不准就不画

先读什么

总是先读这一份。 然后按需要打开,不要全部预载:

你要做的读这个
判哪句是事实、抽事项、写正文(模型那一半的活)references/model-steps.md
前后端怎么对接、容量握手、读图、侧标签怎么起名references/front-end.md
图为什么长这样、每个数从哪来(C / D / M / P 约束表)references/layout-constraints.md
报错了、卡住了、不确定某句提示是不是失败references/troubleshooting.md(一处查完,不用翻别处)
一件事为什么这么定、当时否掉了哪些做法docs/adr/(动手改之前先读)
四份 JSON 的形状与判据python scripts/pipeline.py shape verdicts.json

docs/adr/ 那一条要认真:几十轮接力里,同一件事被重新讨论过多次(扫描件能不能读三轮、 侧标签怎么定两轮)。你想到的做法多半已经被试过并写了失败原因。

黄金律:模型读懂意思,代码算和验

  • 模型做:读材料(含读图)、判哪句是已发生的事实、划分、抽事项、按容量把字写到位。
  • 代码做:算容量、验模型的输出、出图。代码不做拆解 —— 哪几句属于同一件事, 是读懂内容之后的判断,正则拿不到(试过一版正则切割器,在真材料上切出三组同名、 一组吞掉六成句子)。

所以这条路是两趟,不是猜一趟:先定骨架 → 代码算出容量 → 再按容量写字。

工作流(agent 的执行管线)

下面这张表是给你(agent)看的,不是用户要做的步骤。 用户那一侧只有一句话加几次 勾选:他把材料丢进来、说一句「把这些材料画成时间轴」,然后在你问的时候报个编号。 这些命令由你来跑,他不需要敲任何一条,也不需要知道它们存在。

python scripts/pipeline.py next       # 现在走到第几步、下一步跑什么、缺哪个文件
python scripts/pipeline.py steps      # 随时打印这张表

中途接手就先跑 next。 换了会话、跑错顺序、文件写坏之后,不要靠猜 —— 它按产物 而不是自称判断走到了哪一步。

没有「一键跑完」,这是故意的:表里标着「用户」的那几步必须等他回答,一口气跑完 等于替他答了,而那几轮勾选是这个 skill 的设计核心。对用户来说这不是几个步骤,是几次 勾选 —— 该问的才问,不回答就走默认。

命令谁做做什么要先写的文件
read <材料...>代码读材料、切句、认叙述块
pick用户第一轮:勾材料来源(可全选;只有一份时自动跳过)
span <编号|全部>用户第二轮:勾时间段(粒度按跨度自适应:多年按年、半年按季度)
style <1-4>用户第三轮:呈报给谁 → 白描 / 奇川风 / 歸藏风 / 让我定
offer模型划分并给勾选清单verdicts.json + parts.json
budget <编号|all>用户勾哪几个部分
capacity代码按真实骨架算形态与容量skeleton.json
title '…'模型图名(容量内)
render <出图.svg>代码校验 → 出图 → 顺带写溯源索引items.json

表里没有 mark(第五轮:深红标在哪一处,0 = 不标)—— 它在抽取完事项之后、出图之前问, 且只有奇川风才问,所以不在主序里。python scripts/pipeline.py steps 会一并打印它。

第三轮的三档对应三种风格:法官(开庭、提交法院)→ 白描;当事人与客户(当面讲、 微信发)→ 奇川风;同行、讲课、公众号 → 歸藏风。

扫描件与照片:读图三步

律师给的材料几乎总有扫描件与照片,对方提交的那部分尤其如此。不读图就永远只看得见 一方,而只看见一方的时间轴恰恰是最危险的产物 —— 它看起来完整,实际是单方陈述。

python scripts/read_image.py probe 材料.pdf            # ① 逐页量可读字符
python scripts/read_image.py rasterize 材料.pdf pages/ # ② 150 DPI 栅格化
#                                                       ③ 你逐页看图,写转写稿
python scripts/read_image.py check 转写账目.json        # ④ 页数账 + 编号缺号

用的全是 poppler 自带命令,不装模型、不调 API。判据是「逐页可读字符数」, 不是「pdffonts 有没有字体」(真材料上有反例)。

转写稿要存档(Markdown,每页一节、标页码、写明「这是转写不是原件」),并作为材料 进管线 —— 这样全套忠实判据原封不动生效。图像来源的事项标 medium: "image"、 locator 用「第 N 页」、image_docs.json 列出读了图的材料,出图时会打印 「这些事项未经逐字核验」。细节见 references/front-end.md 与 ADR 0001、0002。

交付什么

一次出五种可编辑格式加一份溯源索引:

格式给谁用
SVG主交付物,插进 Word、再编辑
PNG预览、归档、微信发
PPTX讲课、庭前演示,每个对象可改
VSDXProcessOn / Visio / WPS
drawiodraw.io 内继续改
溯源索引 docx图上每个元素出自材料何处(五列三线表)

pptx 与 vsdx 是读最终那张 SVG 逐元素转出来的,所以「交付的就是那张图」。

集中红线

绝不改为
手写 SVG 坐标写 JSON,几何由脚本算
改写材料的字只许删减,卡片每段必须是原句的子序列
编造日期,或把「2020 年」判成 2020/1/1certainty 四档按材料精度填;raw 必须逐字可查
把承诺或约定的时点当事实(付款计划的付款日、合同交货期限)不进主轴;要画「到期未付」,材料里得另有记载
把诉请、申请事项、法律评价当事实那是要什么,不是发生了什么
侧标签写法律定性(自认、违约、抗辩…)只写材料上写着的身份;说不准就不出侧标签
一方材料却分两侧,标「原告主张 / 被告主张」只有一方叙述就是单侧 —— 一方转述对方的话有身份性
图上出现省略号、截断、缩字号超容量在出图前拒绝并要求改短
为了好看等距画不等距的时间那会宣称一个材料没有的精度;比例轴不成立就走编号型
自己拍视觉决定(颜色、字号、要不要标记)视觉决定归作者,问他

三种图种,由材料决定

图种什么时候用
编号型时点密、跨度不成比例、或无确切日期。轴上距离只表先后。它永远画得出,是阶梯的底
日期型全部时点精确到日、且在轴上分得开。轴按等长单位格铺开,距离本身在说话
期间型争点是几段有长度的期间,且互相重叠或包含 —— 条身长度与重叠位置就是论点

图种不由人选,由材料的性质按几何算出,走不通就自动落到下一档(render_figure.deliver 永远给得出一张图)。事项多到横向排不下时自动转纵向并分页。

环境

Python 3,零第三方依赖(读 docx 时用 python-docx,出 PNG 与栅格化用 poppler / LibreOffice,溯源索引用 node 的 docx 库)。全部脚本在 scripts/,全部守卫在 tests/run_checks.py(跑一次约半分钟,两百多条判据;确切条数看它自己,不要在这里写死数字 —— 写死就会漂)。 若这是 SkillHub 的分发包,tests/ 不在其中 —— 回归套件需要若干二进制样本,那个平台不允许上传;要跑回归请取完整仓库:https://github.com/MiaoQichuan/new-litigation-visualization

改动之前跑一次 python tests/run_checks.py,改完再跑一次 —— 它红了就是你改坏了。

我的收藏