Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 
文章代表作者个人观点,少数派仅对标题和排版略作修改。


我是一个从事争议解决业务的律师,随着工作时间的增长,我接触到的案件项目数量越来越多。诉讼、仲裁案件通常时间跨度很大,我的记忆力又差,因此需要有一个方案来管理这些项目,让我能够回顾案件基本信息、确认日程安排和找到相关人士的联系方法。当然,有许多现成的软件可以实现这个目标。

可惜的是,尽管律所有线上系统,市面上也有各种优秀的笔记、代办事项和数据库应用,我始终没有找到符合要求的工具。它们或者功能不足,或者过于庞杂,又或者不能离线使用。更多时候,我还在用 Excel / Numbers 表格存放案件条目,用 Word / Pages 文档记载每个案件的详情,再结合记事本或者日历工具提醒日程。但这种方案下信息存放得过于分散,案件条目和详情的修改也无法相互反映。

为了减少在工作中的烦躁情绪,我决定自己写一个工具来实现目标。作为法学生,我的计算机知识只来源于中学的竞赛,时隔多年,连基本的 if 语句怎么写都需要现查。好在虽有挑战,我还是在三、四个周末加上工作变动间隙的几天时间里,完成了最初的版本,并在实际使用大半年后做了一点改进,目前已基本能够满足我日常的工作需求。于是,我打算同大家分享这个小工具。

写这篇文章,一来是聊聊小工具的设计思路和使用方法,包括法律工作者在内有项目管理需求的打工人,可以直接下载使用这个工具(链接位于文末),也可以参照这一思路在任意带有数据库的软件中实现。二来也想鼓舞那些日常工作中不得不去适应难用的办公软件、完成枯燥重复的任务,却没有代码写作基础的朋友们,或许花上一些时间和精力,就能够为自己定制一个小工具来解决问题,这也会是颇有成就感的事情。

整体思路

在开始前,我得确定自己想要什么。

如前所述,我需要一个离线的项目管理工具。这个工具最基础的功能,应当是能够记录和显示每个案件的信息,这包括案件名称、案号、法院、当事人等。当然,对于每个案件项目,我还需要能够记录和显示日程。

接下来,我希望这个工具在记录的案件类型、记录的条目上是易于扩展的。目前我接触最多的是民商事诉讼和仲裁案件,但不排除将来需要记录民事执行案件,行政、刑事案件,以及非诉的其他项目。我希望这个工具能够用于记录各种类型的项目。

更进一步,既然这个工具已经能够记录每个案件的信息,那么我希望它不仅能够按条目显示信息,还能够按照套路快速生成一些常用的固定信息,比如告诉我未来15天里有哪些未完成的工作,或者对案件快速生成「甲与乙之间的某纠纷一审案件[案号:xxx]」等内容。

此外,作为 mac 用户,我希望它在大部分时候安静地躺在上方状态栏,并能够响应一些基本操作,如打开项目文件夹。而在输入和查看信息时,它又能出现在 dock 栏中,避免我丢失窗口,需要反复唤醒工具。

实现这些功能,我需要有一个数据库,以及一个图形界面。图形界面让我能够写入和读取数据库信息。经过检索和对比,我选择 Python 作为编程语言,理由是易读易写,让我在以后能够容易地通过阅读代码回忆自己干了什么。数据库我选择 Python 自带的 SQLite,轻巧简便;图形界面使用 PyQt;mac 的状态栏部分则用的是一个名为 Rumps 的库。除状态栏部分外,几乎不用改动代码,我就可以在 windows 平台上打包一个同样能跑的应用程序。

尽管我以为自己做了充分的准备,但上述决策恐怕还是缺乏经验的。在后来,我发现遇到的起码一半困难,来自 Python 的版本,Qt 的版本,打包工具(py2app 和 pyinstaller)的版本,它们之间的相互兼容问题,以及它们在 m1 mac 下的运行问题。后来,我也逐渐发现了多数问题的解决方法,那就是更新版本,更新解决不了问题,就把版本降低,堪比重启试试。

数据库部分

开始时,我感到无从入手。思考过后,我意识到,必须先把数据库搭建好,才能妥善安排图形界面上的对应功能。在写图形界面时,再根据需求不时地返回修改数据库部分,使二者适配,就像法律人说的——研习案例时,眼光在事实与规范之间往返流转。

按照我的理解,数据库就是一张张表格,每一列是一个字段,如「姓名」「年龄」「性别」,而一行数据对应储存「张三」「20岁」「男」这样的信息。数据库的一个好处在于方便地筛选和检索数据,比方说,可以通过一个语句很轻易地通过「张三」定位到这一行数据,然后修改其中的年龄为「21岁」。

可能是受限于使用 Excel 表格的思维,最初我在表的张数上十分吝啬,并出于实现扩展功能的目的,允许用户随意增减字段(列)。后来,我放开了表的数量,字段的增减也被设计为了行的增减,这让整个数据库灵活许多。下面,我具体介绍案件项目数据库的设计思路。

首先,是项目和案件。

通常而言,项目对应一个当事人或事项,而案件则指向有独立案号的具体司法程序。一个项目可以有一个或多个案件。

在项目列表里,需要记录的字段包括项目号、项目文件地址以及标签,标签用于区分项目是正在进行,还是处于搁置、完结状态。案件列表则记录案件名以及案件属于哪个项目。

每个案件的具体信息,存在一个新的案件信息表中。除案件名外,一个字段用于记录信息的类别,一个则记载信息内容,比如分别为「案号」和「xxxx号」,「审级」和「一审」等。关于一个案件应该存储哪些类型的案件信息,则通过其他表格处理,下文提及模板时将统一介绍。

项目列表-案件列表-案件信息

其次,是当事人和联系人。

区别于纯文本内容,当事人和联系人在我的工具中被当作一种特殊的数据类型。这是因为,当一个案件信息是当事人和联系人时,我不光想要知道一个案件的原告是谁,我还想要获得原告的其他信息,包括法定代表人、住址、联系方式等。

与案件列表-案件信息结构类似,我分别用当事人列表-当事人信息,和联系人列表-联系人信息存储信息。并且,在一个当事人或联系人需要存储哪些信息的问题上,同样通过下文介绍的模板灵活处理。

回到案件信息表,自然而然地,我需要再增加一个字段用于判别一个案件信息是纯文本数据,还是当事人这样的特殊数据。同时,对于当事人和联系人,案件信息部分存储的只能是当事人和联系人列表对应的行号(id),这是因为,自然人的姓名是可以、也很容易重复的,我不能够通过姓名来唯一确定其身份。

然后,是模板。

在使用 Excel 记录案件时,我经常为了各案表头设计不统一而烦恼。记录民事诉讼案件,我需要法院、审级,而如果是仲裁案件,就变成了仲裁委、仲裁条款。当事人信息中,有限责任公司、合伙企业和自然人所记载的信息也显然不同。模板的作用,就是为了区别每种类别所需要记载的信息类型。同时,比起在设计数据库时就定义所有案件类型和当事人主体类型,我认为允许用户视情况增删是更便利的做法。

在这个工具中,有案件类型(民事诉讼、仲裁等),当事人(有限责任公司、自然人),联系人(法官、仲裁秘书)三类模板允许用户自由编辑。模板与其他表格关系密切,增减模板中的内容,往往牵一发而动全身,在最初写代码时,很容易遗漏其中的一两项。

下图总结了模板与其他表之间的关系。到了这一步,我就可以按需选择每个案件的类型,并填入这个类型预设模板下所需要记载的信息。

几张表之间的关系,以及信息的提取

最后,补充其他需要的部分。

其一,是增加待办事项和事件记录两张表,这是最容易的部分,涉及的字段有案件、日期、事项。我还给每个案件额外增加了一个记事本字段,用于临时记录文字。

其二,是写对数据库内容进行操作的部分,包括添加、删除和修改信息。其中比较复杂的是删除信息,因为删除时需要删除与之相关的所有信息。此外,是根据图形界面的需要,检索和提取相关数据。

图形界面部分

图形界面部分,我是利用 qt designer 和 pyqt 共同完成的。总体而言,图形界面只要做两件事,一是提取数据库信息,并按需求展示出来;二是允许用户通过图形界面增加、删除和修改数据。

其中,增加、删除和修改数据有两种方法:其一,弹出对话框,输入新的内容,覆盖旧的数据;其二,直接修改图形界面上的内容,触发事件,修改数据库,然后刷新图形界面显示出新的数据,这一操作看起来更加无缝,仿佛直接在修改数据库。

在写图形界面的过程中,我遇到了更多困难。比起数据库部分只要学习 sql 语句,图形界面涉及各种不同的窗口、信号、控件,学习起来更为困难。而网上资料里,大半使用的是 C++ 语言的 qt,这更降低了我的阅读和转(抄)化(写)速度。许多教程只介绍核心的一两个函数和方法,并不会耐心解释示例中每一行代码的功能,我也只能囫囵吞枣,先拿来试试。但好消息是,尽管一知半解,但程序能跑。另一个好消息是,哪怕当时学会了,现在我肯定也忘光了。

此外,由于缺乏设计天赋,我的图形界面并不十分美观,并有一个明显的缺陷:太多功能被放在了右键菜单里,这对于作者以外用户而言实在不够友好。但这么做是有原因的,一方面,太多的按钮会让界面更丑;另一方面,我是 mac 用户,对于一个不用全屏显示的小工具而言,操作界面和菜单栏相距十万八千里,因此我从最初就忽略了菜单栏。当然,后来我亡羊补牢,也将一些功能也放到了菜单栏上,只是还不够全面。

下面,我简单介绍这个工具有哪些功能。

主界面的左侧,是项目和案件列表,右侧则是数据库信息,包括排版后不可编辑的数据库信息,可以直接编辑的待办、记录和记事本。

在待办和记录表格中,由于设置了日期控件,复制内容时需要选中并右键复制,并支持将结果直接复制到表格中,只是无法使用快捷键(为此增加一个触发也是可以的,但可能需要额外的键盘读取权限)。

通过标签,可以在案件信息和其他类型的信息中切换

在右侧信息部分单机右键,则可以快捷地复制或查看、编辑信息。复制案件信息时,得到的是形如「原告xxx(以下简称「xx」)与被告xxx(以下简称「xx」)之间的xx纠纷案件[案号:xxxx]」的内容,复制的当事人类似起诉状抬头,邮寄地址则按「地址 收件人(收) 电话」排布。查看窗口既可以查看详细信息,也可以直接在此修改内容。

右图为查看和编辑界面

在左侧,于空白处、项目、案件三个位置右键,可以按需管理项目。而双击项目或案件时,可以直接打开设置好的项目文件夹。

在上一个版本中,我将左上角的选择框和文字框均用于搜索,即搜索展示在特定位置包含输入文字的案件和项目。后来我意识到,在案件和项目数量不多的情况下,没有必要为搜索功能分配如此多的资源。于是我将选择框用于显示的项目类型,区分在办案件(包括置顶、在办两个标签)和其他案件(包括搁置、已结、其他三个标签),另外单独设置案例库(检索报告标签),用于知识管理。

此外,以防万一,在搜索框中输入「execute_ 」将弹出窗口,允许用户直接使用 SQLite 语句操作数据库。

最后,是在上方和右键菜单栏中的其他功能,包括编辑当事人和联系人数据库,修改模板,以及显示基于待办事项生成的简报。另外,备份还原,修改配色方案等额外配置选项也暂放在菜单栏中。

在 macOS 系统,也可以在状态栏中打开这个简报

后记

上面的程序能够在我的电脑上跑起来以后,我把它打包成了无需额外依赖就可以使用的应用程序,并分为 macOS 与 Windows 版本,只是没想到这个过程也挺费时,因为期间产生了形形色色的报错。

我将它发布在了 github 上,如果有人想要使用,可以在这个链接中下载对应版本,dmg 文件为 macOS 版本,zip 文件为 Windows 版本。

如果在使用的过程中有任何修改想法或建议,可以根据自己的需要随意修改代码使用,也可以与我联系,尽管我不一定有能力和精力去实现。

对于 Windows 版本需要额外说明的是,数据的存储位置暂时位于软件所在文件夹内,覆盖文件夹时可能导致数据丢失,为了避免这样的问题,覆盖前需要用工具自带的备份功能将数据保存在其他位置,覆盖后再还原。同时,Windows 的工具不包含状态栏部分,所以打开后总是会显示在下方任务栏中,存在感可能过于强烈。

就像在开头说的,除了工具本身,我也想要分享这样一件解决工作中不便利的事例,鼓舞每个打工人去尝试改善自己的工作环境。大公司的软件固然更加完善,功能丰富,但毕竟针对的不是某个特定职业的需求。而真正清楚自己需求的打工人们,或许有不少人也和我一样,还受限于各方面条件,不得不低效地工作,并对各种难用的软件逆来顺受,这无疑进一步增加工作的苦闷程度。

在写这篇文章时,有关 AI 的重磅消息一个接一个,法律界也热衷于忧虑自己的工作何时会被取代。在我看来,AI 替代律师和法官的工作尚需时日,但它一定首先能够从各种方面提高我们的工作效率,就像从笔记本到笔记本电脑一样。类似本文介绍的简单工具,在 AI 的协助下应该十分容易完成。我想,比起担忧失业,思考如何享受技术带来的便利,或许才是更有意义的事情吧。

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀