mqc-legal-courseware-master

法律课件大师(法律图表页助手)。只做课件里的法律图表那一页:把 V1–V6 的图(案情时间轴、法律关系图、争点对抗图、大事记简表、类案数据图)放进 12 栏 × 6 行的磁吸网格,配上一句话结论、读图要点、法条、裁判要旨、案例、争议焦点等卡片,导出后整页复制或框选复制进律师自己的 PPT。磁吸做到图里:V7 认得出图里的事件、主体、关系、柱子,能在图上放读图编号(要点卡同号联动)、切片只取几件事放

SKILL.md

GitHub

法律课件大师(V7)

我们不跟 PowerPoint 比编辑能力。 比的是:法律人从一堆材料到一套像样的课件有多快,内容靠不靠得住。

做法是「骨架定死、内容交给 AI」:网格、风格、卡片样子、核对规则是固定的;用户说一句想法,AI 按法律场景 生成模块和页面,用户在磁吸界面上拖一拖、改一改,再导出。自由度在想法上,不在像素上。

和其他模块一样:模型只写 JSON(deck.json),几何由脚本算,导出后回读审计。 V7 只读 V1–V6,不改它们。

〇、用户怎么开口

句式:用法律课件大师,把【材料 / 想法】做成【几页】课件,在【场合】讲给【谁】,用【奇川风 / 歸藏风】。

用户要的 怎么做
「打开编辑器,我自己排」 第三节:开编辑器,并在后台等编辑器里的 AI 请求
一套类案课件 先用 V6 出图表说明放进 assets/,再写 deck.json(「类案研究」组合)
案情汇报 / 庭前准备 用 V2 / V3 / V5 出 SVG 放进 assets/(V3 加 --shape wide 出横版,竖版放进课件页字太小),配争议焦点卡、风险提示卡
法条解读 / 普法讲座 法条卡(照录原文)+ 要点 + 风险提示;案例复盘用案例卡 + 裁判要旨卡
律所推介 / 律师介绍 先填律所名片(第五节),一键生成介绍页,再按场合润色

〇之二、运行与交付须知

  • 命令从哪里跑。 本文件里写的 scripts/…、examples/…、references/… 都在本技能目录下(这份 SKILL.md 所在的文件夹)。 请在用户的工作目录里运行,命令写成 python3 <本技能目录>/scripts/…,不要先 cd 进本技能目录;脚本自己找得到依赖,在哪里调用都一样。
  • 产物放哪里。 用户的材料、JSON 与产物一律放在用户的工作目录,不要写进本技能目录:插件更新时那里会被整个替换,用户也找不到。build.py 课件名 --new 在当前目录建课件文件夹;课件文件夹放在用户的工作目录。
  • 照实交付。 脚本打印的核对清单照原样转告用户;没有真的打开看过图片,就不要说「看过了、效果没问题」。

一、课件目录

my-deck/
  deck.json     课件说明(编辑器自动保存;AI 与模型也直接写它)
  assets/       素材:V6 图表说明 *.json、V1–V5 的图 *.svg
  brand/        (可选)这套课件专用的律所名片;没有就用本机公共名片 ~/.mqc-nlv/brand/
  ai/           编辑器发给 AI 的请求(requests.json)
  exports/      导出的 PPTX

目录名与文件名用 ASCII:Windows 解压 ZIP 时中文文件名会失败。内容、标题用中文没问题。 新建:python3 scripts/build.py my-deck --new --title "民间借贷类案研究"

二、磁吸网格与卡片

一页 1280×720,12 栏 × 6 行,页边距左右 48、上下 56,模块之间一律留 16px。每个模块写它占哪几格: x(第几栏,0 起)、y(第几行)、w、h,都是整数。不写像素、颜色、字号——由网格和风格决定。

法律内容卡

type 卡片 字段 最小
statute 法条 law 法律名称、article 条款、text 条文原文 4×2
holding 裁判要旨 text 要旨原文、court 法院、case_no 案号(至少写一个出处) 4×2
case 案例 case_no(必填)、court、cause 案由、heading、result 裁判结果、point 要点 3×2
issue 争议焦点 heading、text;按阅读顺序自动标「争议焦点一、二、三」 3×2
risk 风险提示 heading、text 3×2
evidence 证据 heading、items(一行一份:「名称——证明目的」,自动标证据 1、2、3) 5×2

通用卡:title 标题(level page / cover / section,kicker,sub)、text 正文、bullets 要点、step 编号卡、 stat 大数字(value、label、note、from 出处图表)、quote 金句(source 必填)、note 注释。

图卡(关联 V1–V6):chart(V6 图表说明,file 或 spec,按卡片尺寸重画并过 V6 守卫)、 figure(V1–V5 的 SVG,file + from 写来自哪个模块,如 "V2 时间轴大师";等比缩放,字小于 11px 就拒)。

律所卡:logo(来自名片)、profile 介绍(who: "firm" 或 "lawyer:<id>",内容实时读名片)、contact 联系方式。

外观 tone:card 卡片 / accent 重音卡(只给大数字、编号卡、正文、要点、争议焦点、风险提示;一页只该有一张)/ outline 描边 / bare 无底。 连成一组:相邻的同类卡片(法条与要旨一家、正文与要点一家、大数字、编号卡、案例、争议焦点、风险提示各一家), 并排等高或上下等宽、外观相同,自动连成一组(间距收到 4px、内角收小);"join": false 拆开。

组合(模板):律所(封面带 Logo、律所介绍、律师简介、结束页)、法律(法条解读、案例复盘、争议焦点、庭前准备、 证据梳理、案情经过、类案研究)、通用(封面、章节页、一图一讲、一图一数一讲、整页图、左右两图、图 + 金句、 数字一排、三卡并列、左右对照、标题 + 要点、整页出血图、整页关系图、金句页)。坐标照抄组合,只填字段。 完整格式、坐标见 references/deck-format.md。

三、编辑器与 AI(主要用法)

python3 scripts/studio.py my-deck          # 打开编辑器(浏览器自动打开;只听本机,材料不出电脑)

编辑器:左边按做一页图表页的顺序排——「选图(法律场景 + 已有的图)/ 排法 / 说明(读图、依据)/ 适配(风格、版面)/ 导出」, 最下面「更多」放整套课件用的(封面、章节页、律所名片、介绍页、AI 做整套);再点一下当前入口可收起左栏。 中间是页面(拖进来吸到格子、同类卡片自动连组、拖到被占的地方旁边的卡片让位、落在卡片上一分为二、拖角和边按格子改大小, 按住 Ctrl / ⌘ 不吸附),新的一页是空页、先选法律场景。右下角可放大缩小(Ctrl / ⌘ + 滚轮,Ctrl+0 适应窗口)。右边是属性、读图(放编号、切片、聚焦、按编号拆页、V5 选要件;V6 图表还有「换一种图」)与检查。 顶上「AI」:重做这一页、后面加一页;选中一张卡:让 AI 写这张卡 / 再来一版;选中一张图卡:让 AI 用 V1–V6 生成。

用户点了「AI 生成」,请求记在 ai/requests.json,由你(对话里的 AI)来做。 开编辑器之后:

python3 scripts/ai.py my-deck wait --timeout 900      # 等请求;有就打印上下文(JSON)
python3 scripts/ai.py my-deck take r3                 # 开始做(编辑器里显示「AI 正在做」)
python3 scripts/ai.py my-deck apply r3 result.json    # 交回结果:先校验,过了才写进课件;编辑器自动刷新,可撤销
python3 scripts/ai.py my-deck fail r3 --note "缺判决书原文,请先上传"
python3 scripts/ai.py my-deck done r3 --note "法条原文请您上传后再核"   # apply 后还有改不了的:收尾并说明

循环:wait → 读上下文 → take → 写结果 → apply(看它打印的「还要改」,改到没有为止)→ 回到 wait。 apply 打印了「还要改」,请求就还是「正在做」:改好后对同一个请求再 apply(加页类会换掉上次加的那几页,不会越加越多); 改不了的(缺用户的原文、材料)用 done --note 收尾,说清缺什么。上下文里的 answer 给了这一类请求的交回写法与照抄就能跑的命令。 用户在对话里说「处理课件请求」时,用 list 看所有未处理的。

上下文里有:请求(类型、想法 prompt、目标页 / 卡)、这一页的现状、整套大纲、律所名片摘要、素材清单、 目标卡片的像素尺寸(target_box)、规矩。结果的写法:

请求 kind 交回
module {"module": {字段…}}:并进那张卡(不写 x/y/w/h 就不动位置)
tool 先按那个模块(V1–V6)的 SKILL.md 出图,V1–V5 的 SVG 或 V6 的图表说明写进 assets/(可用 "assets": {"x.json": …}),再 {"module": {"file": "assets/x…"}}。图要按 target_box 出,字缩完不小于 11px;风格与课件一致
page / cover {"modules": [模块…]}:换掉这一页(按网格写坐标)
new-page / deck {"slides": [{"modules": […]}, …]}:插在这一页后面

都可以加 "note": "给用户的一句话",编辑器里会显示。

法律垂类的规矩(AI 生成时也一样,最要紧的三条):

  1. 法条、裁判要旨照录原文,不凭记忆写。 原文只能来自用户给的材料或你查到的官方来源;拿不到就把 text 留空, 在 note 里说「请上传原文 / 我查到的出处是…」。导出清单会提醒逐字核对。
  2. 案号、法院、当事人不编。 没有就不写;示例一律标「示例」「虚构」。
  3. 数字只许算、不许编。 大数字写 from 指向图表,脚本用 V6 的数字核对推一遍,推不出就拒。

其余:一页说一件事;一张要点卡不超过 5 条;字放不下就拆页,不缩到 16px 以下;整套一种风格,V1–V5 的图风格不符就回原模块重出;不留空卡片。

四、检查与导出(不开编辑器时)

python3 scripts/build.py my-deck --check      # 逐页检查,不写文件
python3 scripts/build.py my-deck               # 导出到 my-deck/exports/<标题>.pptx

退出码:0 成功;1 说明有错;2 有页面没准备好;3 导出后回读没过。不是 0 就不要交付。 「请核」是提醒人看一眼的地方(法条、要旨、金句的逐字核对,约数,手填的大数字),照实转告用户。

五、律所名片

编辑器「律所」页填一次:Logo(PNG / JPG / SVG,≤ 2MB)、律所名称 / 介绍 / 业务领域 / 地址 / 电话 / 邮箱 / 网址、 每位律师的姓名 / 职务 / 介绍 / 专长 / 代表业绩。存在课件目录的 brand/(有就用它),否则存本机公共名片 ~/.mqc-nlv/brand/(环境变量 NLV_BRAND_DIR 可改),以后每套课件都能用。格式见 scripts/brand.py 文件头。

  • 一键生成:律所介绍页、律师简介页(含代表业绩)、结束页(谢谢 + 联系方式)。不需要 AI;要按场合润色再交给 AI。
  • 介绍卡、联系方式卡、Logo 都实时读名片:改名片,所有介绍页跟着变。
  • 「每页页脚放 Logo」:内容页左下角放小 Logo(已有 Logo 卡的页不重复)。
  • Logo 是 PPTX 里唯一允许的图片:PNG / JPG 作为图片放进去,在 PowerPoint 里能直接替换;SVG Logo 转成可编辑形状, 它的颜色算律所品牌色。其余元素仍然全是可编辑的形状和文字,回读审计会抓 Logo 以外的任何图片。

五之二、自定义风格(从律所自己的模板、截图或一个主色来)

风格只有三种:奇川风、歸藏风、自定义(作者定的:不为哪一家律所单立风格名)。自定义在编辑器「适配」里做: 传模板(.pptx)、传一张截图(取主色),或直接选一个主色;同一次上传顺带算出预留位置。编辑器界面始终是奇川风。 从模板做也可以用命令行,两步:

python3 scripts/template_read.py 模板.pptx -o 读取结果/ --render   # 第一步:只读,出读取报告(颜色、字体、版面、Logo、页型、对比度)
python3 scripts/firm_style.py make 读取结果/tokens.json --name 某某律所风 -o 律所名片目录/style.json   # 第二步:生成律所风格
  • 读什么:主色(主题的 accent1)、主色的深一档与浅色调、正文灰、标题与正文的字体字号、页边距、Logo 的位置与两版(深底用白字版、浅底用彩色版,按图本身的亮度分)、每页的页型。
  • 怎么用(作者定的):封面、章节页用主色满版、白字、深底 Logo;内容页白底、标题用主色;卡片用模板最常用的浅色调。 中文标题用粗黑体(PowerPoint 里是微软雅黑加粗),模板没写中文字体时也这样。 只用主色家族与灰,模板里的辅助色先不放进来,一页仍只有一处重音。
  • V6 图表跟着换:图的重音换成律所主色、标题用同一种粗黑体(V6 的 firm_palette,主色要过 V6 的对比度与「不是灰」检查,见 V6 ADR 0011)。
  • V1–V5 的图不拒:它们没有律所风格的版本,V7 也不改别的模块的颜色;交付清单会提醒「回原模块出白描版放进来更协调」。
  • 深底页(封面、章节页)不放图表和图:放不清,拼页会拦下。
  • 校验:正文在纸上、卡片上,白字在主色上,封面字在封面底上,对比度都要 ≥ 4.5;主色不能接近灰;不能和内置风格同名。过不了就说清是哪一处、差多少。
  • 存在哪:律所名片目录(课件的 brand/ 或本机公共名片):style.json、template/report.html、template/tokens.json、两版 Logo。模板本身不留存(是律所的财产),也不要放进开源仓库。
  • 用上:deck.json 的 style 写 "自定义"(旧课件里写的律所风格名读进来自动认作「自定义」)。停用时文件改名为 style.disabled.json(不删),课件自动换回奇川风。

六、导出的 PPTX

  • 每页 16:9;每个元素都是能点开改的形状或文字(Logo 除外,见上);连成一组的卡片是四角不同的自由形状。
  • 导出后回读审计:页数、XML 合法、图片只有 Logo、颜色在风格白名单里(律所风格就是律所风格文件里的颜色;V1–V5 的图与 SVG Logo 的颜色另行登记)、写的字都在。没过不交付,旧文件不动。暂存区不导出。

七、交付时对用户说

一两句:做了几页、哪些地方要人核(法条、要旨、金句、手填的数字)、文件在哪。图被拒时,说清是哪页、该回哪个模块用什么风格、按多大尺寸重出。

七之一、出处:鼠标停在图里的元素上(0.8.4)

  • 编辑器里鼠标停在图里的事件、柱子上,浮出它出自哪里;选中图卡,右侧「出处」列出全部。只读原模块写好的出处,不编。
  • V2 时间轴、V3 关系图:出图时图旁边有一份 <名>-trace.json(V2:事项、材料、第几句、原文摘录;V3:每个主体、每条关系的出处),和图一起放进 assets/。V3 里没写出处的主体、关系,悬停时明说「没写」。
  • V6 图表:说明里用了 dataset + view(逐件记录)的,自动有:每一项来自哪几条记录、编号是什么。
  • 其余的图(V1、V4、V5,没用逐件记录的 V6)没有逐项出处,不显示。
  • 写进演讲者备注(可选):编辑器「导出」里打开「出处写进演讲者备注」,或 build.py 课件 --notes。只写有出处的页;讲课时演示者视图里看得到,观众看不到。不打开就一个字节都不加。

七之二、读图编号、切片与逐个讲(0.5.0)

  • 图卡导入后,V7 认出图里的元素(磁吸点):V1 / V2 的事件与期间、V3 的主体与关系(含关系标注)、V6 的每个数据项。V4 简表、V5 对抗图没有标记,只能整张放。
  • 图卡字段:pins(读图编号,元素键的列表,最多 9 个)、crop(切片,只取这些元素那一块);要点卡 numbered: true 时与编号同号。
  • 编辑器:选中图 → 右侧「读图」→「放编号」「切片」「生成读图要点」;编号顺序可调,要点跟着换。
  • 放不下的图(字 < 11px)照样显示,先切片再导出。导出的 PPTX 里每个元素、每个编号各成一组、按名字命名。
  • 聚焦(0.8.0):图卡与图表卡可写 focus(元素键列表)——这些元素照常,其余往白里调;整张图仍在。 「按编号拆成几页」:全图这页之后,每个编号一页、只点亮它。V6 图表卡「换一种图」:同一份数据,V6 能画的图都列出来。

七之三、左栏、结论卡、讲课动画、V5 兼容层(0.6.0)

  • 左栏:选图(法律场景 + 已有的图)→ 排法 → 说明(读图 / 依据)→ 适配(风格、版面)→ 导出;整套课件用的都在「更多」。
  • 一句话结论卡 conclusion:一两行;拖到图的正上方 / 正下方会吸过去、与图同宽。
  • 导出默认写讲课动画:有读图编号的页,点一下出「编号 + 它指的元素 + 同号要点」。
  • V5:图卡写 data(V5 的数据文件,分析输入或图输入都认)与 part(第几个要件,从 0 起;不写 = 全部),V7 按图卡宽度调 V5 出图并只取卡片。

八、回归

python3 tests/run_checks.py(约 670 项):结构校验与旧格式升级、网格与连组、落点与整理、每个组合 × 两种风格、 法律卡(照录、出处、案号、编号)、律所名片(实时读取、一键介绍页、Logo 校验)、Logo 导出与「只许 Logo 一张图」、 AI 请求队列(校验不过不写、取消的不能交)、文字与空卡片、大数字核对、图的缩放与风格、导出审计(含篡改检测)、 编辑器接口与越界防护、编辑器 JS 规则与 Python 逐项对照、示例课件成品账,以及「V1–V6 一个字节没变」。改完必跑,不过不发。