
用一个简单实例来探索:
甲乙在广州签订买卖合同,约定珠海履行,甲居住在深圳,乙居住在江门,甲交付的货物安全质量存在问题,货物运送过程中,货物在中山发生爆炸,乙回到江门后,发现身体受损。于是乙起诉甲要求赔偿损失,如果你是乙方律师,如何划分规则?
违约与侵权关系在实践中关系紧密,常见的为竞合关系一般是指缔约方之间签订合同后,又发生了与合同关系相关的侵权行为。
同一个法律纠纷,不同的专业律师可能会产生不同的诉讼结果。律师在接受当事人委托后应该结合案件实际情况,选择对当事人最便捷、最有利的方式进行专业诉讼,使用法律技术精准的切中问题焦点,也要运用艺术将案件精致妥善处理。
关于违约和侵权的区分,主要从被违反义务来源、被侵害权益绝对性及损害范围利益属性三个方面去辨析。违约和侵权区分的标准是被违反义务渊源,若义务源于约定,则构成违约;若源于法律规定,构成侵权。
随着合同法制度扩张,合同义务不全是约定义务,还存在默示义务或法定义务,违约责任不都是源自违反约定义务。同时,若当事人约定内容是狭义法定义务或一般注意义务时,形式上对约定义务违反也可构成侵权。即:以约定义务和法定义务的区分来辨别违约责任和侵权责任,已经出现了逻辑不够周延的情形。

尽管如此,以被违反义务的性质(约定义务/法定义务)来区分违约和侵权,仍然是最重要、最好用的一种方法。这不仅仅是因为合同与法律具有某种相似性,约定义务和法定义务的分类是义务最基本的一种分类,而且还因为义务和责任之间的紧密关系(义务违反=责任),以其来界分违约和侵权,可以揭示违约和侵权的本质。即违约是对约定和承诺的违背,侵权是对(赋权)法律规则的侵犯。
事实上,违约和侵权的竞合,也主要发生在具有安全保护内容的主给付义务和附随义务这两种情形。除此之外的约定义务(给付义务)的违反,只会导致违约责任;而违反法定的附随义务、先合同义务、后合同义务,任何时候都会导致侵权责任。根据义务来源来界分违约和侵权,是最接近事物本质的、最重要的分类标准。
侵权和违约作为两个不同的法律关系,在举证责任上侧重点有所差异。侵权责任需要对损害事实发生、行为人过错、行为违法、行为与损害事实之间的因果关系举证。一般适用过错责任原则,而违约责任中,主要是对合同关系举证。相对来说,举证责任较轻。
具体在实践中,律师要精准全面作好法律案件处理,则需要对涉及合同与侵权竞合的内容部分要做好法律依据、争议焦点、证据支撑等作好准备。按照庭审实际进展情况有技巧地进行使用。两者竞合部分通常有许多相似部分,如果没有充分的准备,有可能会发生抗辩与争议时的交错,如:本来适用合同原理阐述会更有利于当事人,却用了侵权原理等情况。因此,探索通过编程来寻找更清晰的辅助工具。这里,用到编程技术中的临时多态性。
临时多态性这项技术取自Eric Evan的著作《域驱动设计》(Domain-Driven Design),尽管它具有非常不同的含义。尽管如此,还是值得理解该术语的由来,因此这里有一个原始的定义:
“规范是确定对象是否满足某些条件的谓词。许多规范都很简单。在规则复杂的情况下,可以将概念扩展为允许组合简单的规范,就像将谓词与逻辑运算符组合一样。[...]基本模式保持不变,并提供了从简单模型到复杂模型的路径。”
术语有点难懂,说白了就是集合论,由简入繁得到普遍规范,再应用于具体实例当中。之所以应用这种技术,是因为违约与侵权竞合某种意义上也属于集合论,与临时多态性有类似之处。
用一个简单实例来探索。
甲乙在广州签订买卖合同,约定珠海履行,甲居住在深圳,乙居住在江门,甲交付的货物安全质量存在问题,货物运送过程中,货物在中山发生爆炸,乙回到江门后,发现身体受损。于是乙起诉甲要求赔偿损失,如果你是乙方律师,如何划分规则?
同样的事实,可以依据不同的规则,划分入不同的集合。上述的事实虽然简单,但是可以定义许多规则:如“管辖权”、“举证责任”、“举证难度”、“特定请求”、“诉讼时效”、“突破合同相对性”等等。因为民法博大精深涉及众多规则难以一一言语,本文仅以“管辖权”为例作探索。
把上述案例中的地点按照违约或侵权进行分类,得出如下表:


且住,如果可以简单用表格表达,为什么还要讨论集合和临时多态性?要知道,上面只是违约与侵权竞合中“管辖权”细分度上的表达,如果加上其它细分度,再宏观点,加上其它法理、来源、定义等等,这个表格岂不是大到装不下?再如,要提取其中多个细分度进行组合抗辩,或者针对违约与侵权两者进行比对等等。
为什么要探索编程和法律契合?是因为探索目的不是得到一张表格,而是一套规则,可以用集合论结合严谨的法律依据,得到的可拓展的工具规则。
具体到编程上,就是把事实转成一个个集合,它们既有很多共享的行为,又有独特的行为,一个行为只允许一个选择,而另一个行为却允许任何数量的选择。编程语言选择榆木而不是Python,因为类似haskell和elm之类的语言有着强大的类型系统,适合模拟规则和抽象集合。
type Specification --规则集合
= RadioSpec Radio --选择违约规则
| CheckboxSpec Checkbox --选择侵权规则
第一步,名为Specification的自定义类型包括了违约规则和侵权规则。
type alias Radio = --违约规则下法律定义集合--多个元素的列表
{ selected: List String }
type alias Checkbox = --侵权规则下法律定义集合--多个元素的列表
{ selected: List String }
第二步,定义了名为Radio和Checkbox两个类型别名,分别代表违约规则和侵权规则下的多个元素列表。
control : Control -> Html msg
control ({spec} as ctrl) =
case spec of
RadioSpec radioSpec -> radio ctrl radioSpec
CheckboxSpec checkboxSpec -> checkbox ctrl checkboxSpec
第三步,定义了一个规则函数,按照选择违约或侵权的结果而把原始数据作不同的处理,其中{spec}是实现临时多态性的关键。
以下是具体实现的全部代码:
module Test1 exposing (..)
import Browser
import Html exposing (Html)
import Html.Attributes as A exposing (..)
type Specification --混合工具
= RadioSpec Radio --选择违约规则
| CheckboxSpec Checkbox --选择侵权规则
type alias Control = --工具控制规范("规则","在不同规则里的法律定义")
{ label: String, spec: Specification }
type alias Radio = --违约规则下法律定义集合--多个元素的列表
{ selected: List String }
type alias Checkbox = --侵权规则下法律定义集合--多个元素的列表
{ selected: List String }
controls : List Control --交集显示界面
controls =
[ Control
"广州"
<| RadioSpec <| Radio ["合同签订地","合同生效地"] --"广州"在违约规则下的法律定义
, Control
"广州"
<| CheckboxSpec <| Checkbox [ "" ] --"广州"在侵权规则下的法律定义
, Control
"珠海"
<| RadioSpec <| Radio ["合同履行地","标的物所在地","合同运输地"]
, Control
"珠海"
<| CheckboxSpec <| Checkbox [ "" ]
, Control
"江门"
<| RadioSpec <| Radio ["被告住所地"]
, Control
"江门"
<| CheckboxSpec <| Checkbox ["侵权行为结果地"]
, Control
"中山"
<| RadioSpec <| Radio ["合同运输地","合同违约地"]
, Control
"中山"
<| CheckboxSpec <| Checkbox ["侵权行为发生地"]
, Control
"深圳"
<| RadioSpec <| Radio ["原告住所地","合同付款地"]
, Control
"深圳"
<| CheckboxSpec <| Checkbox ["被告住所地"]
]
main = Browser.sandbox
{ init = (), update = identity, view = view }
view : () -> Html (() -> ())
view nothing =
div (List.map control controls)
control : Control -> Html msg
control ({spec} as ctrl) =
case spec of
RadioSpec radioSpec -> radio ctrl radioSpec
CheckboxSpec checkboxSpec -> checkbox ctrl checkboxSpec
radio : Control -> Radio -> Html msg
radio {label} {selected} =
div [Html.button [A.style "align" "center"] [ (Html.text (label ++ ": " ++ (String.join ", " selected)))] ]
checkbox : Control -> Checkbox -> Html msg
checkbox {label} {selected} =
div [Html.button [] [ (Html.text (label ++ ": " ++ (String.join ", " selected)))] ]
div : List (Html msg) -> Html msg
div = Html.div []
实现的Html界面如下图:

由于篇幅所限,只是挑选了违约与侵权竞合法律问题实例中的一个小细分度进行探索,基本实现了目标,通过类型分解和临时多态性技术,得到一套具有规则的集合工具,可以适时对竞合细分度进行提炼比对,对律师出庭辩论或有帮助,继续探索。
参考:1、《民法典编纂:侵权与违约竞合之二:再谈违约与侵权的区分与竞合》(叶名怡) 2、《域驱动设计》(Domain-Driven Design)(Eric Eva)