中华人民共和国最高人民法院 民 事 判 决 书 （2020）最高法知民终222号 上诉人（原审原告）：乘如（上海）国际贸易有限公司。住所地：上海市黄浦区南苏州路****。 法定代表人：王华惠，该公司董事长。 委托诉讼代理人：戎文宏，上海市锦天城律师事务所律师。 委托诉讼代理人：黄宇周，上海市锦天城律师事务所律师。 被上诉人（原审被告）:上海八图网络科技有限公司。住所地：上海。住所地：上海市嘉定工业区叶城路****** 法定代表人：张晓博，该公司执行董事。 委托诉讼代理人：韩冰清，上海市海华永泰律师事务所律师。 委托诉讼代理人：杨越琦，上海市海华永泰律师事务所律师。 上诉人乘如（上海）国际贸易有限公司（以下简称乘如公司）因与被上诉人上海八图网络科技有限公司（以下简称八图公司）计算机软件开发合同纠纷一案，不服上海知识产权法院于2019年11月28日作出的（2019）沪73知民初53号民事判决，向本院提起上诉。本院于2020年2月25日立案后，依法组成合议庭进行了审理。本案现已审理终结。 乘如公司上诉请求：撤销（2019）沪73知民初53号民事判决，并依法改判支持乘如公司的全部诉讼请求。 事实与理由：乘如公司依据合同约定享有解除权，并可要求八图公司赔偿损失。（一）八图公司完成的×××项目功能不齐全且存在Ｂｕｇ无法使用。1.《乘如微信×××移动项目技术开发合同》（以下简称×××合同）第四条约定了验收的标准和方式。而在本案中八图公司从未提交验收申请的证据；在双方提交的证据中，也没有关于验收通过的证据材料；在原审法院的事实认定中，也未有双方组织过验收且验收合格表述。故依据合同的约定以及客观事实，双方从未对×××项目进行过验收，而乘如公司的付款行为不能作为验收合格的依据。2.乘如公司提交的（2019）沪宝证经字第187号公证书（以下简称187公证书）、原审法院组织双方对源代码进行部署和核实的情况以及八图公司在原审庭审的陈述，都可以确认×××项目部分功能未按照合同的约定完成。在乘如公司提交的众多聊天记录中，亦有明确×××项目存在众多Ｂｕｇ和项目不能使用的情况。3.原审法院认为×××项目在实际履行过程中进行了变更，不能以×××合同的约定事项是否完成作为×××项目是否已经完成的标准没有依据。对于原约定内容增减变更的确属于较为普遍的现象，但基于一般的经验法则，该些变更应由乘如公司主动提起，或者双方合意后变更。本案中，八图公司从未对上述事项提交任何证据，双方也没有删减、变更原约定功能的合意。4.原审法院对于187公证书未予采纳错误。尽管该公证书对×××项目的测试均在电脑上完成，但在电脑微信端进行的演示足以证明×××系统的完成情况，除设备不同外，与手机微信端进行演示并无根本区别。并且原审法院对于八图公司提交的×××项目源代码的勘验也是在电脑上进行。因此，该验证方法应被认可。另一方面，187公证书的出具时间是2019年4月22日，实际进行的时间在187公证书上有记载，是2019年3月28日，早于八图公司向原审法院递交×××项目源代码的时间2019年4月8日，因此，在2019年3月28日至2019年4月8日这段期间，八图公司完全有时间对×××项目源代码进行修改。原审法院以187公证书出具时间晚于源代码提交时间为由认为八图公司未对×××项目源代码进行修改，实属不当。 （二）八图公司未根据×××合同的约定向乘如公司交付源代码。1.原审法院认为乘如公司对于×××项目源代码无法单独、完整交付应当是明知的与事实不符。乘如公司认可的仅仅是ＥＲＰ项目与×××项目均由八图公司进行开发，但并没有认可×××项目源代码和ＥＲＰ项目源代码的共同开发，二者并非同一概念。乘如公司认可×××项目与ＥＲＰ项目均由八图公司开发的行为并不能视为乘如公司同意将两个系统的源代码融合在一起，乘如公司从未同意过×××项目源代码和ＥＲＰ项目源代码的融合。乘如公司原审提交的《关于源代码融合及其他相关技术问题的意见》也从技术角度阐述了两套系统的源代码没有必要融合以及融合是开发者基于减少自身工作量、节省成本的考虑所造成的。2.乘如公司系婚纱贸易公司，且联络人系财务人员，非计算机专业从业人员，如无明确告知，乘如公司无法从常人的角度理解和辨识什么叫两源代码融合。八图公司从未告知过。原审法院推断乘如公司明知两源代码融合毫无事实根据。3.乘如公司在2018年9月6日向八图公司发送的名称为“答复：回复：答复：回复：×××项目源代码及开发说明文档至今未移交”的邮件（以下简称906邮件）中所称“无法切割的话将现在的给到我们也是可以接受，但是需马上移交。贵司若切割源代码，造成的任何后果，都不能免责，都由贵司承担”的表述，并非是在拒绝八图公司切割后交付×××项目源代码，而是在被告知源代码已经融合的事实之后，对于八图公司可能的切割交付所造成的后果的一种警示。根据双方在×××合同中的约定，乘如公司所要求的就是×××项目源代码，而非×××项目与ＥＲＰ项目融合后的源代码，而×××项目源代码无法单独、完整交付是八图公司单方过错所致。4.原审法院忽略了双方的合同约定，无论在×××合同中，还是在《乘如财务ＥＲＰ系统开发协议》（以下简称ＥＲＰ合同）中，均未表述过两源代码要融合，必须共同完整提交。在双方提交的所有证据中，也没有两源代码需要融合的合意。5.在没有征求过乘如公司同意的情况下，八图公司私自将两源代码融合，并无法按约交付，足以可见是八图公司单方之过错。综上，八图公司私自将×××项目的源代码与ＥＲＰ项目的源代码进行融合属单方过错。即便现在八图公司将其切割交付，两源代码都会造成损伤，致使乘如公司遭受损失。乘如公司据以解除涉案×××合同的条件成就，享有合同解除权。 （三）在×××合同履行期间，八图公司擅自暂停服务器致使乘如公司无法使用，使得乘如公司失去对×××项目的控制权。八图公司作为技术供应商，利用其技术优势控制×××系统，使得乘如公司作为实际权利人丧失了对×××项目的实际权利，其行径实质就是未完整交付整个×××项目源代码和设计文档、实现项目中的所有功能，亦属于未完整交付之行为。乘如公司所提交的无法登入比对图与其他微信聊天记录都可以印证系八图公司私自暂停系统服务器，其他证据也反映了×××项目服务器多次无法登录的事实。八图公司作为服务器服务商，若非因其原因暂停服务，应举证证明，但八图公司没有提供任何证据。八图公司停止服务器的真实目的是要挟乘如公司增加ＥＲＰ系统费用。 八图公司辩称：请求驳回乘如公司的全部上诉请求，维持原判。乘如公司主张的三大违约行为均不存在，且不能同时成立，乘如公司不享有×××合同的解除权。（一）×××项目已经乘如公司验收合格，不存在功能不全以及Ｂｕｇ的情况。（二）八图公司未交付×××项目源代码存在合理理由，且系乘如公司过错导致，未交付源代码也未给乘如公司造成任何损失。（三）八图公司不存在擅自暂停服务器的行为，且乘如公司是否享有合同解除权与该行为无关。 乘如公司向原审法院提起诉讼，原审法院于2019年2月15日立案受理。乘如公司向原审法院起诉请求：1.确认乘如公司、八图公司签订的《乘如微信×××移动项目技术开发合同》已于2018年10月20日解除。2.八图公司返还乘如公司已支付的项目费用人民币170000元（以下币种同）。3.八图公司返还乘如公司已支付的系统年服务费37000元。4.八图公司赔偿乘如公司损失170000元。 八图公司向原审法院答辩称：1.八图公司已经履行了除源代码、开发说明文档交付外的全部开发义务，故涉案×××项目已经全部制作完成，并不存在乘如公司所述的存在Ｂｕｇ而无法使用的情形。2.因乘如公司与八图公司之间还存在ＥＲＰ项目的开发，而涉案×××项目源代码和ＥＲＰ项目源代码深度融合，需切割后才可向乘如公司交付，但乘如公司拒绝切割交付，致使八图公司尚未交付涉案×××项目源代码。3.八图公司除收到涉案×××项目170000元开发费用外，仅就涉案×××项目收取了2017年12月18日至2018年12月18日的系统年服务费24000元。此外，八图公司还支付了ＥＲＰ项目的年服务费13000元。 原审法院认定事实： 乘如公司（甲方）与八图公司（乙方）签订有×××合同。该×××合同中约定的与本案有关的主要内容包括：甲方委托乙方进行微信×××平台项目的开发工作……一、项目名称：微信×××移动项目。二、内容及要求：1.开发内容。根据甲方的要求，乙方在规定时间内完成微信×××移动系统的开发，该系统的设计要求如下：（1）项目版本以及运行环境……（2）支持分辨率……（3）主要功能：根据需求设计进行项目的开发以及测试的工作。具体功能及要求参见项目附件（ＶｅｒａＷａｎｇ功能明细-20160920.ｘｌｓｘ）。该系统分为两套分别部署、每套对接一个微信服务号。一套支持多门店ＶｅｒａＷａｎｇ品牌，一套支持多门店多品牌。两套互通功能：1.一个系统的员工可以把客户信息推送到另外一套系统的员工。2.老板角色可同时切换两套系统所有门店。（4）甲方提供的资源及项目约定：需求说明书和产品功能详情（附件，微信×××功能清单，已提供）；两个已认证的微信服务号（未提供）；访问域名（未提供）。（5）乙方需要交付的项目成果及要求：项目界面ＵＩ图片（ＰＮＧ格式，要求支持各手机分辨率，详见来往邮件）；项目源代码以及编译版本；项目开发说明文档；以上文档详见双方来往邮件，邮件具有法律效力。2.开发时间。（1）项目开发周期：2016年10月5日至2016年12月5日。（2）交付方法：自项目正式启动，至项目结束日止，项目分为4个阶段。第一阶段：2016年10月10日，细化具体功能清单。第二阶段：2016年10月24日，提交设计ＵＩ。第三阶段：2016年11月14日，项目开始全面上线测试。第四阶段：2016年12月5日前，乙方交付合同中所提及的所有项目成果。三、双方权利义务。1.甲方：（1）甲方有权利督促乙方按规定时间完成项目开发，有增加或修改内容双方需另行协商解决；在不影响进程的情况下，对于甲方的不超过总体工作量5%小规模变动的需求，乙方需要配合甲方需求进行修改……2.乙方……（5）乙方有责任在甲方项目验收合格完成之日起，向甲方提供12个月的免费维护服务，此维护仅指软件ｂｕｇ的修改……四、验收的标准和方式。验收按合同中第二项《功能验收清单》为标准，乙方向甲方提出验收申请，甲方组织有关人员验收。本合同服务项目的保证期为甲方项目验收合格之日起12个月。在保证期内发现产品质量缺陷的，乙方应当负责返工或者采取补救措施。但因甲方使用、保管不当引起问题除外。五、费用和支付方式（如果第二套系统ＵＩ不同，需额外加壹万费用）。1.费用。此项目费用合计为17万。2.支付方式：（1）甲方于项目合同签订后5天内向乙方支付第一部分30%项目款项，即51000元。（2）乙方于2017年12月7日前提交完整产品版本，甲方测试合格后一周内应向乙方支付第二部分50%项目款项85000元。（3）甲方验收合格后，需经过3个月试运行测试，如无发现任何Ｂｕｇ或者Ｂｕｇ都得到乙方良好解决的情况下，甲方在试运行结束后三个工作日内向乙方支付第三部分20%项目款项34000元。乙方在收到甲方的付款后交付所有源代码。（4）乙方应在收到甲方相应项目款项后五个工作日内向甲方提供国家规定的发票。3.违约责任……（3）乙方有责任按期并完整地向甲方交付源代码和设计文档，实现项目中的所有功能，如因乙方自身原因，未能按约交付，则每延期一天，甲方将扣除乙方总费用的0.1%作为补偿。对于乙方未能完成或延迟三十个工作日以上完成本合同约定开发内容的，乙方应当赔偿由此给甲方造成的直接经济损失。如确因甲方原因，造成乙方未能按时交付，则乙方不承担由此造成的甲方的损失。4.对于前款乙方给甲方造成损失的，甲方有权除按前款之规定要求赔偿外，并可立即采取以下措施进行弥补:（一）单方解除合同，另行寻求第三方完成该开发内容。由此产生的费用由乙方承担。（二）其他可以弥补甲方损失的措施及行为，费用及损失由乙方承担。（5）上述第（4）条所规定之乙方赔偿甲方损失以及其他承担费用和损失最高限额不超过乙方已收取开发费用……九、运营系统日常维护。此运营服务包含ＶｅｒａＷａｎｇ品牌系统和多品牌系统两套服务。（一）ＩＴ运营服务（2000元／月，前三个月免费，从第四个月开始按月付费）。1.日常服务器运行。保证服务器24小时正常运行，提供服务。2.反应时间。24小时内给予回复（紧急情况时立即处理）。3.数据备份。保证用户数据的安全和可靠，定期备份系统的正常运行。4.日常培训。系统培训，咨询（微信、电话、远程）；如有必要会进行统一培训。5.阿里云系统。费用由八图科技支付，计入运维费用。6.使用疑难问题解答。使用上不符合实际的，属于系统不熟悉造成误解，日常电话答疑。（二）说明。项目负责人。所有问题可以向项目负责人投诉，所有需求需要项目负责人同意方可修改或增加。甲方负责人：杜军……乙方负责人：张晓博……×××合同的附件为《系统开发明细-上海八图网络科技》，该附件显示，×××合同约定的所需完成的×××项目中包括了门店后台／会员管理／推荐人、我推荐的人。 2016年10月24日，乘如公司向八图公司支付×××合同第一部分项目款项51000元。嗣后，八图公司向上海诺纱贸易有限公司（以下简称诺纱公司）开具×××合同第一部分项目款项51000元的发票。 2016年12月12日至27日期间，乘如公司、八图公司之间有如下微信聊天记录：1.2016年12月12日，八图公司“我的报价最后肯定性价比最高的。开发时间最短，而且你们最省心的。即使有人给到你们15万，最后费用下来不会比我的便宜，因为如果别人做，我×××部分也要收费了，对方功能增加也要收费，后面我和对方对接还要收费，而且三方沟通就难了，后面还得维护两个系统，维护费得出2份”乘如公司“其实肯定是想由你来做的”八图公司“至少我很容易沟通”乘如公司“我是不是可以这样理解，你给我的报价内容中都是全部由你自己开发的？”八图公司“是啊”。2.2016年12月27日，八图公司“联通起来的整体测试和修改估计要一天时间，明天都可以联通”乘如公司“好消息，×××这部分如何了？”八图公司“不过，我今天过去得整体给你演示下，就像上次一样，你得提意见，然后就一起修改了。同时也有几个问题需要和你讨论”乘如公司“好的”八图公司“都是关键的，上周手机测试修改的通了。因为现在整体加了权限，都变复杂了。去了给你演示看再说好了。对了咱们几号上线？现在先上ｎｏｒａｓ是吧”乘如公司“对的，几号取决于你的成果如何，先上ｎｏｒａｓ，应该是这周五吧”八图公司“周五来得及，我们会加紧测试和修改，周四我还会过来，今天正好一起看看商品批量上传的问题”乘如公司“好”。 2017年1月1日，乘如公司向八图公司出具《付款委托证明》称，委托诺纱公司履行×××合同项目款项支付，且×××合同款项发票抬头均为诺纱公司。 2017年1月9日，乘如公司向八图公司发送微信称“明天系统开始正式运行，OK不”八图公司“可以的，今天你们继续测试，有问题马上反馈给我。我们也在测试。我修改了，你们每人测试和反馈问题啊”乘如公司“那是否应该根据员工登陆后台，而不是仍用总的所有权限的。比方说，我就用我的名字登陆”八图公司“对啊”。 2017年2月，八图公司向诺纱公司开具×××合同第二部分项目款项85000元的发票一张。 2017年3月1日至2017年6月6日期间，乘如公司、八图公司之间有如下聊天记录：1.2017年3月1日，乘如公司“老板回复我说近期就会安排，也认可你×××的部分和您良好的配合度”八图公司“这周我应该可以收到吧”乘如公司“我个人估计可能在下周，明后天我休年假不在公司”。2.2017年3月9日14:05，八图公司“前面的5万也是拖了几乎一个月才打给我们。之前的客户是没付款不启动项目的。咱们这个就是因为和杜军熟，就先启动了，然后一直也没提过个费用一直开发投入。而且咱们公司这边的需求也不断改，新功能也加，我们都是没再收费，能协助就尽力协助往前走的。”乘如公司“您这边的配合度是十分，我把进度表提交给老板，这款她应该就会批了，您放心。您公司这边的难处，您有没有跟老板提过？我觉得您还是要跟老板适当提提的，诉诉苦的”八图公司“好”乘如公司“谢谢”八图公司“对了，我第二笔费用啥时候申请啊。我可是一直在帮着咱们修改增需求的啊”。3.2017年3月9日14:19，乘如公司“×××系统，ＶＥＲＡ和ＮＯＲＡＳ上去的话应该是一样的对吧”八图公司“同一套系统，只是权限来分割的，因此一模一样。代码和数据库都是同一个。如果有ｂｕｇ，两边肯定都有，如果没问题两边都没问题”乘如公司“ＯＫ”。4.2017年4月1日，乘如公司“老板前天还问我进度来着，我说×××ＯＫ，应该快了。预约管理，日程安排那块，要有打印功能，同时你看下列表是否可以将详细内容列出来”。5.2017年6月6日，乘如公司“你留意下款项的到账，老板付了。现在我有个×××做灵活的几个事项需要与你沟通。你今明方便过来吗？”八图公司“后天可以的，还没收到”乘如公司“前面刚跟老板过了下×××部分。做得很好，只是希望和客人有关的……”。 2017年6月6日，诺纱公司向八图公司支付×××合同第二部分项目款项85000元。 2017年8月，八图公司向诺纱公司开具×××合同第三部分项目款项34000元的发票。 八图公司递交的证据13显示，在Ｎｏｒａｓ项目管理系统中，有由杨静丽于2017年7月4日创建，并在7月10日修改的名称为“关于会员推荐这部分一直没有用起来”的项目需求，该项目需求的基本信息显示：所属产品为×××＆经销存；所属模块为商城模块；所属计划为二期计划。需求描述显示:会员推荐这个模块如何使用？如何与会员和店员进行挂钩？体现相应推荐的订单及成交金额。 2017年12月13日至15日，乘如公司、八图公司之间有如下聊天记录：1.2017年12月13日，乘如公司“刚才我跟老板谈了下你这边付款的事，本来以我个人的工作作风肯定是要出项目报告小结的，但是从刚才跟你电话沟通来看，我就跳过了这个报告直接把付款申请给到老板了，老板也说付款ＯＫ的，所以你先不要急了，另外老板已经让我着手二期×××项目这块的优化整理尤其是涉及员工绩效考评之类的，到时我和老板确认好后你给个报价。经过这次的磨合，后续我们操作项目进度就可以把握准了”。2.2017年12月15日，八图公司“凭证方向我改了，你看看。现在先不要管凭证的历史数据，先保证新生成的都是正确的，哪里有问题通知我我来调整。先保证新生成的数据没问题。还有今天一定要把×××尾款打给我们啊，目前我们还没收到尾款”乘如公司“这个只怕做不到了，老板这两天生病了，昨天今天都没进公司”八图公司“那没办法了，现在我说了也不好使。反正你们老说店铺也没怎么用系统”乘如公司“在用呀。下周一吧，今天周五，人家生病了，你不见得让人硬来吧。这个你总要体谅体谅包涵包涵的”八图公司“那我问问，稍后给你消息”乘如公司“而且现在系统都在正常运行了，店铺那边也在积极积极的每天及时操作了”。 2017年12月18日，诺纱公司向八图公司支付×××合同第三部分项目款项34000元。 2018年6月，八图公司向诺纱公司开具金额为37000元的发票，收取项目为“研发和技术服务+×××系统维护费（年）”。2018年6月29日，诺纱公司向八图公司支付37000元。 2018年7月11日，八图公司向乘如公司发送名称为“关于新开诺鱼及第三方供应商新系统的费用和我们的职责”邮件称：关于新开诺鱼及以后的第三方供应商系统，每个每年收取维护费4500元。我们会提供专人直接对接第三方供应商，提供技术和数据支持；如遇到特别问题需要到现场的，我们也会派人到现场解决问题。所有服务器和网络宽带等由我们提供。鉴于“诺鱼”为非供应商，同时基础数据导入新系统的人工成本比较高，因此“诺鱼”我们只收取一次数据迁移费用4500元［数据迁移会被整理成一键生成功能，以后新供应商入住时会自动一键生成基础数据］。需要的资料：诺鱼，需要一个二级域名，已经给到我（××）。而以后的地方供应商统一用一个域名，以后也要提供。 2018年7月18日10:20，乘如公司向八图公司发送微信称“晓博，我在想诺鱼收费的事情哦，原来这个系统是开给ＶＥＲＡ和Ｎｏｒａｓ两套系统平台的，现在Ｖｅｒａ一直没有开始使用，而费用我们是Ｖｅｒａ一起已经支付结算的对吧，所以诺鱼这部分您看是否再减少些，另外数据同步，我觉得最好可以设计成管理员可以自己动手导出导入的，这样可以有选择性的导入相应的数据，就比如Ｎｏｒａｓ上基础数据边上有引出数据，而新系统平台上可以引入数据，这样Ｖｅｒａ或后续以后供应商平台处理起来就好弄些，毕竟涉及保密性的东西有些数据是要更改后引入的”。同日13:44，乘如公司向八图公司发送微信称“亲，我刚在看我们签的合同，关于服务费×××上签的是2000元一个月吧，怎么这次收的是3000元／月呢？”八图公司“加了财务的1000。如果真是收错了，老板能同意”乘如公司“我和她应该也是都这么想的，只是合同上没有写加”。 2018年8月21日，乘如公司“＠ｅａｓｔｙｊｌ＠张晓博～微信系统开发，今天×××网页进不去”“＠张晓博～微信系统开发打你电话没人接听”。 2018年8月30日晚21:08，乘如公司“＠张晓博～微信系统开发你好，系统登不上去了”“北京店铺也登不上了”“给张晓博打过电话无人接听”“怎么现在和你服务器有关的都上不去了呢？网站，共享，×××系统”。2018年8月31日7:31，八图公司“服务器好了”。 2018年9月4日，乘如公司“@张晓博～微信系统开发会员管理和预约管理中涉及会员管理信息变更的涉及渠道更新的，预约管理中没有自动更新”。八图公司“这两天在做系统迁移，比较忙，有时间了会尽快处理的”。 2018年9月5日，乘如公司向八图公司发送名称为“答复：回复：×××项目源代码及开发说明文档至今未移交”的邮件称：请不要混淆，我这封邮件是说的是×××项目合同不是财务合同，我司已全款支付，你邮件中也提到了×××已进入维护期，所以请回归主题，请将×××数据源代码及相关文档移交给我司。同日，八图公司回复上述邮件称：财务系统是基于×××系统上开发的，是一套完整的系统，单独移交×××系统代码，会导致财务系统和×××数据源割裂，以后数据无法合并，造成数据丢失。切割代码可能造成财务和×××系统数据永久丢失，我方免责。我方技术建议，为了系统长期稳定和数据完整，不建议切割代码部署。 2018年9月6日，乘如公司向八图公司发送906邮件称：无法切割的话将现在的给到我们也是可以接受的，但是需马上移交。贵司若切割源代码，造成的任何后果，都不能免责，都由贵司承担。贵司有义务移交给我司的是完整的源代码与开发文档，是可以能够让系统正常运行的。 2018年9月7日，八图公司向乘如公司发送名称为“回复：答复：回复：答复：回复：×××项目源代码及开发说明文档至今未移交”的邮件称：到目前为止，你方依然以各种理由和接口拖延支付财务系统“合同约定功能”的尾款。由于你方—直拖欠“合同约定功能”内的款项，给我方造成了巨大的经济负担。 2018年9月9日，八图公司向乘如公司发送名称为“回复：答复：回复：答复：回复：×××项目源代码及开发说明文档至今未移交”的邮件称：诺鱼已暂停关闭，在进行系统调整修复，以保证×××系统其它隐患。财务部分的“库存管理”目前也暂停，这部分功能需要调整。×××部分提供的网站接口，目前鉴于已使用一段时间，如果满意需要支付开发费用2万，如不需要我们就取消该功能。还有×××内所有的数据导出导入功能，如果满意需要尽快支付新增功能开发费用。×××内容的其它新增功能请对照最初合同基础功能和目前系统现有功能，如非合同功能而是甲方新增要求也需要开始支付开发费用。财务，鉴于新增功能太多，需要整理调整的地方比较多，因此部分功能会暂时停止使用，具体暂停调整模块我们会后续通知。 2018年9月10日10:33，乘如公司向八图公司发送名称为“答复：回复：答复：回复：答复：回复：×××项目源代码及开发说明文档至今未移交”的邮件（以下简称9101033邮件）称：首先，你在未得到我司确认的情况下又再次擅自使我司的系统无法正常运行。其次，你要暂停功能，我们先要签好协议，并同时安排好我司不能使用功能部分的数据如何切换至我司的别的操作系统，不能说停就停。再次，当初系统我司的整个财务数据和库存数据在贵司开发软件上直接启用，是经过你这边说ＯＫ的，说有任何系统操作问题及时纠正，保证我司系统的正常运行。如果当时你说这个不能保证，那么我司也不可能上线整个系统。所以，请在没有做签好协议以及具体衔接功能时，请不要莫名擅自停止功能。 2018年9月10日18:17，乘如公司向八图公司发送名称为“关于擅自暂停关闭已有系统功能以及未完成项目”的邮件（以下简称9101817邮件）称：今天2018年9月10日上午10点登陆系统，无法正常登入“库存管理”这个版块，此版块涉及操作内容：库存查询、库存调整、其他出入库操作（借用归还、领用、其他出库、其它入库）、库存盘点、库存盘点审核、整个库存的出入库记录；下附系统截图。当天2018年9月10日下午16点登录系统，无法正常登入“采购管理”这个版块，此版块涉及操作内容：采购单、采购审核、采购入库、采购付款、供应商管理、汇率管理、采购统计表；下附系统截图。邮件说“库存管理”暂停理由为：功能需要调整，请告知调整到何时可以正常使用，常理应该周日暂停，次日可恢复正常使用，采购管理又怎么说？另外声明一点，这两项功能属于运营运行中的部分，不属于独立财务部分。现有系统上的所有功能，都是要开发者您同意增加，您并未告知收取任何费用事项。合同约定明细中有“甲方有权利督促乙方按规定时间完成项目开发，有增加或修改内容双方需另行协商解决；在不影响进程的情况下，对于甲方的不超过总体工作量5%小规模变动的需求，乙方需要配合甲方需求进行修改”，对于这点，在实际沟通过程乙方并未告知工作量的大小，也未提示告知收取费用问题，答应是与费用收取无关的，也未告知是否影响完成项目进度问题。就双方合作项目的两个项目。×××项目原本是并未完成交付的，合同中有约定但至今未完成的项目，以及交付问题如下：1.合同约定要交付我司“该系统分为两套分别部署、每套对接一个微信服务号。一套支持多门店ＶｅｒａＷａｎｇ品牌，一套支持多门店多品牌。两套互通功能”，其中“一套支持多门店ＶｅｒａＷａｎｇ品牌”并未完成。互通功能中要求“一个系统的员工可以把客户信息推送到另外一套系统的员工”也未完成。2.×××项目的源代码与开发文档在我司支付尾款至今一直没有进行交付。就上述两项未完成事项，我司保留贵司违约责任并要求赔偿的权利。ＥＲＰ项目：1.对于你在前述邮件中提到的关于我方一直拖欠“合同约定功能”内的款项的问题，根据我们双方的合同约定，尾款应在贵司将全功能上线且经我方测试合格后支付。截止本邮件发送日，贵司对于整个财务ＥＲＰ项目仍未完成全部功能上线，因此我司不存在拖欠款项的情况。2.财务ＥＲＰ项目中依据合同约定至今未完成的项目，涉及多个部门的问题，所有未完成功能大部分都是涉及产品质量缺陷问题的，详见附件1。请贵司依据合同约定完成财务ＥＲＰ系统全功能上线并完成交付，完成交付后我方将按照合同约定支付尾款。就上述事项，我方保留追究贵司延期交付的违约责任并要求赔偿的权利。此外，贵司应保证已有的系统模块正常运行。贵司未经我司同意擅自暂停系统已有功能，我司保留追究因此而导致我司运营受到的相应损失的权利。该邮件的附件系名称为“×××＆ＥＲＰ未完成问题汇总20180905.ｘｌｓｘ”的文件，该文件中所标识的涉及×××项目的问题，包括：1.Ｖｅｒａ微信端。×××Ｖｅｒａ微信端，格式框架与Ｎｏｒａｓ微信端一样。2.两套互通功能。一个系统的员工可以把客户信息推送到另外一套系统的员工。3.门店管理。添加门店时需要区分是否真实门店，因为门店会与官网微信端挂上，所以不是所有门店都会体现，因此需要有个功能可以勾选是否可以外接官网微信端等。 2018年9月11日，乘如公司委托诉讼代理人黄宇周律师向八图公司发送《律师函》，以八图公司尚未完成微信×××移动系统中的部分功能（“一套支持多门店ＶｅｒａＷａｎｇ品牌的系统”以及互通功能要求中的“一个系统员工可以把客户信息推送到另外一套系统的员工”），且八图公司尚未向乘如公司交付微信×××移动系统的项目成果，存在逾期交付的情况为由，要求八图公司在收到该函之日起的一个工作日内，向乘如公司交付微信×××移动系统开发项目的全部项目成果，包括微信×××移动系统中未完成的部分功能并保证系统正常运行。 2018年10月20日，乘如公司向八图公司发送《关于解除乘如微信×××移动项目技术开发合同的通知函》（以下简称解约函），以八图公司尚未完成微信×××移动系统中的部分功能（“一套支持多门店ＶｅｒａＷａｎｇ品牌的系统”以及互通功能要求中的“一个系统员工可以把客户信息推送到另外一套系统的员工”）；尚未向乘如公司交付微信×××移动系统的项目成果，存在逾期交付的情况；以及八图公司自2018年9月起存在擅自关闭×××系统服务器并且停止×××系统正常服务的行为为由，通知八图公司：乘如公司根据×××合同第五条第三款第四项的约定，于2018年10月20日解除×××合同及其附属协议，并要求八图公司退还乘如公司已支付费用207000元，赔偿乘如公司经济损失170000元。 嗣后，乘如公司与案外人廿驷云信息技术（上海）有限公司（以下简称廿驷云）签订《开发合同》，乘如公司委托廿驷云进行用友×××移动项目开发，开发最终成果支持两套部署，ＶＥＲＡ品牌多门店和多门店多品牌，开发总价281600元。2018年11月9日，乘如公司向廿驷云支付首付款42240元。2019年3月19日，乘如公司向廿驷云支付二期款70400元。 乘如公司递交的证据显示，2016年5月30日至2019年5月29日期间，乘如公司雇佣杨静丽为其财务主管。 八图公司递交的证据显示，乘如公司（甲方）与八图公司（乙方）签订有ERP合同，合同中约定的与本案有关的条款，包括：……甲方委托乙方进行财务ERP系统（含采销库存财务各个环节，以下简称ERP项目）的开发工作……二、内容及要求……2.开发时间。（1）项目开发周期：2016年12月16日至2017年2月15日……六、违约责任……3.乙方有责任按期并完整地向甲方交付源代码和设计文档…… 原审审理中，乘如公司、八图公司确认ERP合同尚未履行至交付源代码阶段，双方已产生争议，现已根据ERP合同约定，交付仲裁。 2019年3月28日，乘如公司委托代理人使用上海市宝山公证处电脑在互联网上进行了浏览、保存、打印等上网操作，并由上海市宝山公证处于2019年4月22日出具了187公证书，乘如公司并就涉案×××项目的功能现状是否符合×××合同约定，向原审法院出具了《答复函》及其附件。在本案原审审理过程中，就涉案×××项目的功能现状是否符合×××合同约定，原审法院组织双方当事人使用八图公司于2019年4月8日递交原审法院的源代码进行了部署和核实。针对上述187公证书、原审法院核实情况，双方当事人各自表达了如下意见： 乘如公司认为：一、其就涉案×××项目的功能现状与×××合同约定内容进行了比对，并向原审法院递交了《答复函》及其附件、187公证书。乘如公司表示在《答复函》附件中标注为“基本一致、一致、完成、已完成”，属于涉案×××项目中完成内容符合涉案×××合同约定的。在《答复函》附件中标注为“未完成、无、未完成存在ＢＵＧ、未完成无法核实、存在ＢＵＧ、未做到多门店”，属于涉案×××项目中完成内容不符合涉案×××合同约定的。其中：1.微信端／导航栏／ｖｅｒａｗａｎｇ、我的；微信端／明星、客户婚礼／明星案例、案例详情（案例图文详情）、标签、ｒｅａｌｗｅｄｄｉｎｇ、案例详情（ｒｅａｌｗｅｄｄｉｎｇ图文）、我也要；微信端／预约试穿／预约试穿、品牌列表；微信端／品牌故事／故事详情；微信端／最新活动／活动列表、活动详情；微信端／产品中心／分类筛选、筛选详情、预约试穿；微信端／会员中心／我的婚纱、活动预约、产品预约、我的好友；微信端／自助客服／Ｖｅｒａｗａｎｇ、常见问题、留言反馈的内容属于符合涉案×××合同约定的情形。2.微信端／明星、客户婚礼／推荐搭配；微信端／预约试穿／位置定位；微信端／品牌故事／我也要；微信端／最新活动／报名；微信端／产品中心／产品详情、买家秀；微信端／我的婚纱／注册绑定、状态、状态详情、已完成、去评价、分享；微信端／会员中心／绑定识别、个人信息、导购顾问、一键直拨、取消绑定；微信端／门店信息／门店状态；手机管理／角色功能／老板（多家店）、店长（单店）／门店列表、客户管理、添加＆编辑客户信息、添加预约、编辑预约、修改接待销售人员、查看接待日志、报表；手机管理／角色功能／员工／客户管理、添加＆编辑客户信息、添加预约、编辑预约、查看所有预约、添加接待日志的内容，属于不符合涉案×××合同约定的情形。二、×××合同第二条中就×××项目的主要功能有“该系统分为两套分别部署、每套对接一个微信服务号。一套支持多门店ＶｅｒａＷａｎｇ品牌，一套支持多门店多品牌。两套互通功能：1.一个系统的员工可以把客户信息推送到另外一套系统的员工。2.老板角色可同时切换两套系统所有门店”的约定。上述“老板角色可同时切换两套系统所有门店”的约定，即为×××合同附件《系统开发明细-上海八图网络科技》中“手机管理／角色功能／老板、店长、员工的内容”，但该内容完成情况乘如公司无法核实。三、在2019年3月26日庭前会议中，八图公司演示的是×××项目后台完成情况，并未演示×××项目微信端完成情况，而根据×××合同约定，×××项目主要内容在微信端。四、就×××项目源代码交付问题，乘如公司认为，×××合同中未约定×××项目源代码的交付需要以其他系统的开发完成为前提，或者需要和其他系统一并交付，因此，不存在×××源代码无法单独交付的问题，故乘如公司不认同八图公司关于×××源代码需要切割交付的表述。在此前提下，乘如公司回复八图公司要求其马上移交×××项目源代码，但乘如公司已在邮件中声明如八图公司只能切割交付，则相应导致的后果应由八图公司承担。五、×××项目的完成情况应当以187公证书的公证内容（即乘如公司《答复函》附件统计结果）为准。六、乘如公司在9101817邮件中提出的针对×××项目中“至今未完成的项目”中“该系统分为两套分别部署、每套对接一个微信服务号。一套支持多门店ＶｅｒａＷａｎｇ品牌，一套支持多门店多品牌”，该两套系统是指ＮＯＲＡＳ系统和ＶｅｒａＷａｎｇ系统，该两套系统的格式框架一致。 八图公司则认为：一、八图公司对于乘如公司确认的符合涉案×××合同约定情形的相关内容并无异议，但对于乘如公司认为不符合涉案×××合同约定情形的相关内容，八图公司认为，其中：（一）部分内容在×××合同履行中，经双方协商取消，包括：微信端／明星、客户婚礼／推荐搭配；微信端／预约试穿／位置定位；微信端／会员中心／取消绑定；微信端／我的婚纱／状态详情、已完成、去评价；手机管理／角色功能／老板（多家店）、店长（单店）／门店列表、修改接待销售人员、查看接待日志、报表；手机管理／角色功能／员工／添加接待日志的内容。（二）部分内容在×××合同履行中，经双方协商变更，包括：微信端／产品中心／买家秀的内容去除“轮播呈现”。（三）部分内容实际已完成，187公证书未正确显示，包括：微信端／品牌故事／我也要；微信端／最新活动／报名；微信端／产品中心／产品详情；微信端／我的婚纱／注册绑定、状态、分享；微信端／会员中心／绑定识别、个人信息、导购顾问、一键直拨；微信端／门店信息／门店状态；手机管理／角色功能／老板（多家店）、店长（单店）／客户管理、添加＆编辑客户信息、添加预约、编辑预约；手机管理／角色功能／员工／客户管理、添加＆编辑客户信息、添加预约、编辑预约、查看所有预约的内容。二、就×××合同第二条中×××项目的主要功能中“两套互通功能：1.一个系统的员工可以把客户信息推送到另外一套系统的员工”的约定，在×××合同履行中，双方合意不再进行。三、就×××项目源代码交付问题，八图公司认为，×××项目源代码已经与ＥＲＰ项目源代码相融合，但乘如公司已确认ＥＲＰ合同未达到交付源代码条件，而乘如公司拒绝有损失的交付×××项目源代码，属于拒绝将×××项目源代码切割后交付。四、×××项目的完成情况应当以法院核实为准。五、ＮＯＲＡＳ系统和ＶｅｒａＷａｎｇ系统的格式框架一致，而两者文案不同，需乘如公司自行调整。 针对双方当事人上述有争议部分，原审法院组织双方当事人使用八图公司于2019年4月8日递交原审法院的源代码进行了部署和核实，核实情况为：1.微信端/品牌故事/我也要，有预约按钮，并且可以跳转到预约界面。2.微信端/最新活动/报名，在后台可进行修改，设置预约时间后手机端显示“活动报名”，点击进入可填写预约内容，但无法提交成功。3.微信端/产品中心/产品详情，点击图片可以显示具体详细内容。4.微信端/产品中心/买家秀，可以在后台添加图片，可以在图文详情内随机位置添加图片，不能轮播呈现，后台管理员可编辑备注介绍。5.微信端/我的婚纱/注册绑定、状态、分享，可以注册绑定，“状态”演示过程中能显示“状态2”和“状态5”，经查看源代码确认“状态2”为定制中，“状态5”为已取（归还）。6.微信端/会员中心/绑定识别、个人信息，认可完成。7.微信端/会员中心/导购顾问，八图公司认为“点击我的-会员中心-我的婚纱，在已购婚纱栏下每个订单内有显示专属顾问”，该专属顾问即为导购顾问，但乘如公司不予认可。7.微信端/会员中心/一键直拨，认可完成。8.微信端/门店信息/门店状态，认可具备添加门店功能，但乘如公司认为多门店信息之前就应添加好，而不是现在添加。9.手机管理/角色功能/老板（多家店）、店长（单店）/客户管理、添加&编辑客户信息，编辑信息功能认可，新建客户信息点击完成后无法跳转页面，但客户信息已添加。10.手机管理/角色功能/老板（多家店）、店长（单店）/添加预约、编辑预约，添加预约测试三次，两次添加后未显示，一次添加后可见添加的信息。11.手机管理/角色功能/员工/客户管理、添加&编辑客户信息，编辑信息功能认可，新建客户信息点击完成后无法跳转页面，但客户信息已添加。12.手机管理/角色功能/员工/添加预约、编辑预约、查看所有预约，认可完成。 对于涉案×××项目源代码和ＥＲＰ项目源代码是否融合的问题，原审法院组织双方当事人进行了验证，验证结果显示涉案软件路径“ｓｏｕｒｃｅｍｏｄｕｌｅｓｖｗｃｒｍ”中文件“ｓｉｔｅ.ｐｈｐ”中既包含涉及×××功能的代码，也包含涉及调用ＥＲＰ功能的代码。路径“ｓｏｕｒｃｅｍｏｄｕｌｅｓｖｗｓａｌｅｓ”中文件“ｓｉｔｅ.ｐｈｐ”中既包含涉及×××功能的代码，也包含涉及调用ＥＲＰ功能的代码。 本案中，乘如公司以八图公司存在1.完成的×××项目功能不齐全且存在Ｂｕｇ致使无法使用。2.未根据×××合同的约定向乘如公司交付×××项目的源代码。3.在×××合同履行期间，八图公司擅自暂停服务器致使乘如公司无法使用的违约行为为由，行使×××合同第五条第三款第四项约定的解除权，主张涉案合同于2018年10月20日解除。 原审法院认为：《中华人民共和国合同法》（以下简称合同法）第九十三条第二款规定，当事人可以约定一方解除合同的条件。解除合同的条件成就时，解除权人可以解除合同。第九十六条规定，当事人一方依照本法第九十三条第二款、第九十四条的规定主张解除合同的，应当通知对方。合同自通知到达对方时解除。根据上述法律规定，本案中首先应当判定，乘如公司在本案中主张的解除×××合同的条件是否成就。 而本案中，×××合同第五条第3款违约责任，第（3）项、第（4）项中约定，“（3）乙方有责任按期并完整地向甲方交付源代码和设计文档，实现项目中的所有功能，如因乙方自身原因，未能按约交付，则每延期一天，甲方将扣除乙方总费用的0.1%作为补偿。对于乙方未能完成或延迟三十个工作日以上完成本合同约定开发内容的，乙方应当赔偿由此给甲方造成的直接经济损失。如确因甲方原因，造成乙方未能按时交付，则乙方不承担由此造成的甲方的损失。4.对于前款乙方给甲方造成损失的，甲方有权除按前款之规定要求赔偿外，并可立即采取以下措施进行弥补:（一）单方解除合同……”根据上述×××合同约定，乘如公司只有在八图公司未按期并完整地向乘如公司交付源代码和设计文档，实现项目中的所有功能；且上述违约行为系因八图公司自身原因；且八图公司上述违约行为已给乘如公司造成损失的条件同时成就的前提下，才享有×××合同解除权。而针对乘如公司在本案中主张的八图公司三个违约行为而言： 一、关于乘如公司主张的八图公司完成的×××项目功能不齐全且存在Ｂｕｇ致使无法使用的违约行为 原审法院认为，首先，×××合同第五条第2款支付方式第（2）项约定“（2）乙方于2017年12月7日前提交完整产品版本，甲方测试合格后一周内应向乙方支付第二部分50%项目款项85000元”。而原审法院查明的事实表明，2017年1月10日，×××项目已经开始正式运行，2017年2月，八图公司已向乘如公司开具第二部分项目款项85000元的发票。2017年3月1日、9日、4月1日、6月6日乘如公司均表达了对于八图公司所完成的×××项目的认可，并最终在2017年6月6日支付了×××合同第二部分项目款项85000元。且本案中没有任何证据表明，乘如公司在2017年6月6日付款时，曾与八图公司确认八图公司已完成的×××项目还存在应当完成而未完成部分，因此，上述乘如公司支付×××合同第二部分项目款项的事实，足以证明，八图公司提交的×××项目，已经乘如公司测试合格。乘如公司在2017年6月6日支付×××合同第二部分项目款项的事实，亦应当视为乘如公司确认×××项目验收合格。 其次，×××合同第五条第2款支付方式第（3）项约定“（3）甲方验收合格后，需经过3个月试运行测试，如无发现任何Ｂｕｇ或者Ｂｕｇ都得到乙方良好解决的情况下，甲方在试运行结束后三个工作日内向乙方支付第三部分20%项目款项34000元。乙方在收到甲方的付款后交付所有源代码”，而原审法院查明事实表明，早在2017年8月，八图公司已开具了×××合同第三部分项目款项的发票，在2017年12月13日，乘如公司在微信中有“刚才我跟老板谈了下你这边付款的事，本来以我个人的工作作风肯定是要出项目报告小结的，但是从刚才跟你电话沟通来看，我就跳过了这个报告直接把付款申请给到老板了，老板也说付款ＯＫ……”的表述，2017年12月18日，乘如公司向八图公司支付×××合同第三部分项目款项，且本案中没有任何证据表明，乘如公司在2017年12月18日付款时，曾与八图公司确认八图公司已完成的×××项目还存在应当修复而未修复的Ｂｕｇ，故乘如公司支付×××合同第三部分项目款项的行为，应当认为系乘如公司在2017年6月6日对×××项目验收合格，并经过6个月的运行测试后，认可八图公司对其提交的×××项目中所有Ｂｕｇ，都予以了良好的解决。 再次，根据涉案×××合同第三条双方权利义务第2款第（5）项“乙方有责任在甲方项目验收合格完成之日起，向甲方提供12个月的免费维护服务，此维护仅指软件ｂｕｇ的修改……”的约定，八图公司在2017年6月6日乘如公司对×××项目验收合格后，对于已提交乘如公司的×××项目仅存在Ｂｕｇ的修改、维护义务，而不存在对于×××项目新内容的开发工作。对此，作为涉案×××合同的签订者，乘如公司亦是明知的，且乘如公司在2017年12月13日微信中关于“……老板也说付款ＯＫ的，所以你先不要急了，另外老板已经让我着手二期×××项目这块的优化整理尤其是涉及员工绩效考评之类的，到时我和老板确认好后你给个报价”的表述，亦可印证乘如公司对于涉案×××合同项下已完成内容的认可以及继续开发二期×××项目的意向。而乘如公司9101817邮件以及《律师函》均在乘如公司对×××项目验收合格十五个月之后，故该9101817邮件以及《律师函》中有关“未完成微信×××移动系统中的部分功能”的表述，均不能证明涉案×××项目确实存在未完成项目。 最后，原审法院注意到，无论是双方对于涉案×××项目完成内容的确认，还是原审法院对×××项目现场核实的结果，都存在涉案×××合同中有约定，而未在×××项目中完成的内容。对此，原审法院认为，其一，虽然乘如公司出具了187公证书，但一方面，该公证书对涉案×××项目的测试均在电脑上完成，明显不符合使用手机对微信端测试的正常验证方法。另一方面，该公证书出具的时间在2019年4月22日，向原审法院递交及送达八图公司的时间，均晚于该日。而八图公司向原审法院递交涉案×××项目源代码的时间在2019年4月8日，此时，八图公司尚不清楚乘如公司进行了公证，综合原审法院对涉案×××项目核实的实际情况，以及没有证据可以证明八图公司对涉案×××项目源代码进行了修改，原审法院认为，应当以原审法院的核实结果确认涉案×××项目的实际完成情况。故原审法院对于乘如公司187公证书显示的测试结果不予采纳。其二，虽然，原审法院核实结果中亦存在涉案×××合同中有约定，而未在×××项目中完成的内容。但是，基于一般的经验法则，在计算机软件开发合同的实际履行过程中，对于原约定内容的增、减、变更均属于较为普遍的现象，而涉案×××合同中第三条双方权利义务第1款第（1）项“甲方有权利督促乙方按规定时间完成项目开发，有增加或修改内容双方需另行协商解决；在不影响进程的情况下，对于甲方的不超过总体工作量5%小规模变动的需求”的约定，以及在案证据显示的乘如公司×××合同附件《系统开发明细-上海八图网络科技》中明确的“门店后台／会员管理／推荐人、我推荐的人”功能，由杨静丽在2017年7月4日将“关于会员推荐这部分一直没有用起来”的项目需求列为“二期计划”，亦足以印证乘如公司、八图公司对于原合同中约定的×××项目具体功能，在实际履行中进行了变更，故本案中根据涉案×××合同的实际履行情况，不能以×××合同的具体约定事项是否完成，作为判断涉案×××项目是否实际已经完成的标准。 综上，综合在案证据，原审法院认为，涉案×××项目已经乘如公司于2017年6月6日验收合格，故原审法院对于乘如公司关于八图公司完成的×××项目功能不齐全且存在Ｂｕｇ致使无法使用的违约行为的诉讼主张，不予采纳，相关诉讼请求不予支持。 二、对于乘如公司关于八图公司未根据×××合同的约定向乘如公司交付×××项目的源代码的诉讼主张 原审法院认为，首先，原审法院对于涉案×××项目源代码进行了验证，发现×××项目源代码和ＥＲＰ项目源代码确实存在一定程度的融合，按照一般的经验法则，若对其进行切割确实存在数据丢失的可能。根据原审法院查明的事实，乘如公司、八图公司对于×××项目的开发工作，一直保持高强度的沟通和协作，ＥＲＰ项目系自2016年12月16日开始与×××项目共同由八图公司开发，至2018年9月双方发生矛盾，已开发近21个月，因此，乘如公司应当知道×××项目源代码和ＥＲＰ项目源代码共同开发且存在一定程度融合，而乘如公司、八图公司之间在2016年12月12日微信聊天记录中“我的报价最后肯定性价比最高的……”，以及9101033邮件中乘如公司“……当初系统我司的整个财务数据和库存数据在贵司开发软件上直接启用，是经过你这边说ＯＫ的……”的表述，均在一定程度上可印证原审法院的上述观点。故原审法院对于乘如公司关于×××源代码可以完整、单独交付的主张，不予采纳。原审法院认为，乘如公司对于×××源代码无法单独、完整交付，应当是明知的。 其次，乘如公司在其906邮件中称“无法切割的话将现在的给到我们也是可以接受的，但是需马上移交。贵司若切割源代码，造成的任何后果，都不能免责，都由贵司承担”的表述，实际上拒绝了八图公司切割后交付×××项目源代码。因此，在涉案×××源代码无法单独、完整交付，且乘如公司拒绝切割后交付的情况下，涉案×××源代码未交付，不能认为是八图公司单方过错所致。 再次，在本案审理中，双方确认“ERP合同尚未履行至交付源代码阶段，双方已产生争议，现已根据ERP合同约定，交付仲裁”，故本案中乘如公司尚未举证证明，在ERP合同履行中，八图公司未交付ERP项目源代码存在过错。 最后，根据原审法院查明的事实，涉案×××项目在2017年6月6日已经乘如公司验收通过，而是否交付涉案×××项目源代码，均不影响涉案×××项目的正常使用。本案中也没有证据表明，涉案×××项目源代码未交付已经造成乘如公司损失。 综上，原审法院认为，虽然，八图公司确实未向乘如公司交付×××项目源代码，但是，鉴于乘如公司尚未证明上述未交付×××项目源代码系因八图公司单方过错所致，且上述未交付×××项目源代码，已给乘如公司造成损失的情况下，乘如公司据以解除涉案×××合同的条件不成就，故就八图公司未向乘如公司交付×××项目源代码的事实，乘如公司并不享有涉案×××合同的解除权，原审法院对于乘如公司的诉讼主张不予采纳，相关诉讼请求，不予支持。 三、对于乘如公司关于在×××合同履行期间，八图公司擅自暂停服务器致使乘如公司无法使用的违约行为的诉讼主张 原审法院认为，一方面，本案中乘如公司主张具有合同解除权的违约行为，应当是指“八图公司未按期并完整地向乘如公司交付源代码和设计文档，实现项目中的所有功能”的行为，而乘如公司关于八图公司擅自暂停服务器致使乘如公司无法使用，显然不属于乘如公司可以主张合同解除权的违约行为。另一方面，根据原审法院查明的事实，可以证实确实属于×××项目服务器停止服务的情形，仅涉及2018年8月21日、30日微信聊天记录所反映的×××系统服务器无法登陆，但现有证据均不能证明上述两次×××系统服务器无法登陆，系八图公司擅自暂停服务器所致。故原审法院对于乘如公司关于在×××合同履行期间，八图公司擅自暂停服务器致使乘如公司无法使用的违约行为的诉讼主张，不予采纳，相关诉讼请求亦不予支持。 据此，原审法院判决：驳回乘如公司的诉讼请求。一审案件受理费6955元，财产保全申请费2405元，由乘如公司负担。 二审中，当事人均未向本院提交新证据。 经审理查明，原审法院查明的事实属实，本院予以确认。 本院认为，根据当事人的二审诉辩意见，本案二审期间的争议焦点为：（一）乘如公司是否有权根据×××合同的约定行使解除权；（二）如果乘如公司有权解除合同，解除合同的后果如何认定。 乘如公司上诉主张八图公司存在以下违约行为：1.×××项目存在功能不全且存在Ｂｕｇ无法使用的情况；2.八图公司未向乘如公司交付×××项目的源代码；3.在×××合同履行期间，八图公司擅自暂停服务器致使乘如公司无法使用。因此，乘如公司依据×××合同的约定，享有解除权，并可要求八图公司赔偿损失。 本院认为，合同法第九十三条第二款规定“当事人可以约定一方解除合同的条件。解除合同的条件成就时，解除权人可以解除合同。”合同当事人关于解除权的约定属于合同内容，对双方均产生法律约束力，在合同一方主张行使约定解除权的情况下，解除合同的条件是否成就应当依照与解除合同条件有关的合同条款的具体内容进行判断。 本案中，乘如公司行使约定解除权所依据的合同条款为×××合同第五条“费用和支付方式”项下第3款“违约责任”的第（3）项、第（4）项，结合上述合同条款的内容，在八图公司因其自身原因导致未能完整交付、实现项目中的所有功能，且给乘如公司造成损失的情况下，乘如公司有权解除×××合同。本案中，乘如公司主张八图公司存在三个违约行为，本院分别分析如下： 第一，关于×××项目是否存在功能不全且存在Ｂｕｇ无法使用的情况 乘如公司主张八图公司完成的×××项目功能不全且存在Ｂｕｇ致使无法使用，其应当就所缺失的功能、所存在Ｂｕｇ的具体内容以及由此导致×××项目无法正常使用承担举证责任。 首先，乘如公司于2017年6月6日支付了×××项目第二部分项目款项，而根据×××合同第五条第2款支付方式第（2）项约定，第二部分项目款项的支付条件为八图公司提交完整产品版本，乘如公司测试合格后一周内支付。现有证据显示，自2017年1月9日双方就×××项目于次日正式开始运行进行确认起，直至乘如公司支付第二部分项目款项，乘如公司与八图公司持续保持沟通，但乘如公司并未向八图公司提出过×××项目存在功能缺失。 其次，乘如公司于2017年12月18日支付第三部分项目款项，而根据×××合同第五条第2款支付方式第（3）项约定，第三部分项目款项的支付条件为乘如公司验收合格后，需经过3个月试运行测试，如无发现任何Ｂｕｇ或者Ｂｕｇ都得到八图公司良好解决的情况下，乘如公司在试运行结束后三个工作日内支付。现有证据显示，在2017年12月15日八图公司向乘如公司要求支付×××项目尾款时，乘如公司不仅未向八图公司提出×××项目存在应当修复而未修复的Ｂｕｇ，还称“而且现在系统都正常运行了，店铺那边也在积极的每天及时操作了”。乘如公司上诉称“系统都正常运行”指的是ＥＲＰ系统，但结合双方2017年12月15日的聊天记录的上下文，该交谈内容由八图公司催收×××项目尾款而引发，双方均未提及与ＥＲＰ项目有关的事项，结合对话内容，可以认定为乘如公司认可×××项目已经正常运行。故对于乘如公司的该项上诉理由，本院不予采信。结合乘如公司支付×××合同第三部分项目款项的行为，可以认定×××项目已经乘如公司验收合格，并经过至少3个月的运行测试，并不存在因有Ｂｕｇ而无法使用的情况。乘如公司上诉主张双方从未对×××项目进行过验收，但乘如公司在支付第三部分项目款项时并未对八图公司交付的×××项目提出任何异议，结合双方对第三部分付款条件明确约定为“验收合格后”“经过3个月试运行测试”，乘如公司履行付款义务的行为已经表明对×××项目验收合格。因此，对于乘如公司主张的×××项目未进行验收的上诉理由，本院不予采信。 最后，根据乘如公司提交的证据，其仅在2018年9月10日向八图公司发送的9101817邮件以及2018年9月11日向八图公司发送的《律师函》中明确提到×××项目未完成部分功能，但上述证据的形成时间在乘如公司支付第二笔项目款项后的十五个月之后，亦在乘如公司认可系统都正常运行之后，明显与乘如公司已经实施的行为存在矛盾，故上述证据不能作为认定×××项目存在未完成功能的依据。 另外，根据原审法院现场勘验的结果，八图公司交付的×××项目确实存在合同中有约定但未在×××项目中完成的内容。乘如公司据此主张八图公司未完成交付。八图公司对此解释为双方对于原合同中约定的×××项目具体功能，在实际履行中进行了变更。本院认为，在计算机软件开发合同的履行过程中，对于原约定内容的增、减、变更均属于较为普遍的现象，乘如公司与八图公司在订立×××合同时，在附件中已经对功能清单进行了详细约定，双方对于其中的内容均应知晓。而在八图公司开发×××项目的过程中，双方对于系统运行、测试、修改等问题保持高频率的沟通，乘如公司在此过程中并没有提出×××项目存在未按合同约定完成的内容。结合乘如公司已经认可×××项目已经正常运行且支付了全部项目款项的行为，八图公司对于×××项目中存在部分未完成×××合同约定内容的解释具有一定合理性。关于187公证书的证明力问题，原审庭审中，八图公司向原审法院提交了源代码，双方同意对有争议的未完成部分进行现场勘验。乘如公司虽主张八图公司完全有时间对×××项目源代码进行修改，但在二审期间乘如公司认可原审中其对八图公司提交的源代码进行过确认。187公证书对×××项目的测试是在电脑上完成，而根据涉案×××合同约定，×××项目属于微信移动端项目。相比较而言，原审法院对乘如公司确认过的源代码进行勘验取得的结果，相对乘如公司自行在电脑端测试的结果更有说服力，原审法院根据现场勘验的结果确认×××项目的实际完成情况，而未采信187公证书显示的测试结果，并无不当。对于乘如公司主张的×××项目存在Ｂｕｇ的问题，根据原审法院对源代码的勘验情况，虽然已交付的×××项目就已经完成的功能在页面跳转等方面存在问题，但不影响主体功能的实现，在八图公司已经基本完成开发任务，且×××项目已投入使用的情况下，乘如公司主张×××项目无法使用，其有权解除合同，缺乏事实和法律依据，本院不予支持。 第二，关于八图公司未向乘如公司交付×××项目源代码 根据乘如公司、八图公司的陈述，八图公司未能向乘如公司交付×××项目的源代码。根据×××合同关于解除合同条件的约定，乘如公司以未交付源代码为由主张享有约定解除权，除存在八图公司未交付×××项目源代码的事实外，还需要考虑未能交付的原因以及乘如公司是否因此遭受损失。根据原审法院现场勘验的情况，×××项目源代码与ＥＲＰ项目源代码确实存在一定程度的融合。八图公司主张乘如公司在ＥＲＰ项目开发时就明知两者源代码融合，但其提交的证据仅能够表明乘如公司对于×××项目以及ＥＲＰ项目均由八图公司开发、财务数据和库存数据在八图公司开发的软件上直接启用的事实存在明知，八图公司未能举证证明在上述条件下两个项目源代码融合的必要性和必然性，故本院难以认定乘如公司明知源代码融合的事实。但另一方面，在×××项目和ＥＲＰ项目源代码相互融合的情况下，强行分割交付存在数据丢失、出现系统故障的可能，故八图公司未能单独交付×××项目的源代码具有一定的客观原因。同时，未交付源代码不影响×××项目的正常使用，乘如公司亦未证明其实际遭受损失。综上，乘如公司虽负有交付源代码的义务，但在目前×××项目已经投入使用的情况下，未交付源代码尚不构成合同解除的条件，乘如公司以此为由主张解除合同，缺乏事实和法律依据，本院不予支持。 第三，关于八图公司擅停服务器致使乘如公司无法使用 乘如公司上诉主张八图公司控制×××系统，实质就是未完整交付×××系统源代码和设计文档、实现项目中的所有功能，属于未完整交付的行为，其享有约定解除权。 本院认为，实践中，涉及计算机软件标的的合同，合同内容往往比较复杂，包含着复合型权利义务关系，应按照当事人的主要权利义务关系确定合同类型。如果双方主要权利义务为软件开发、交付开发成果、支付开发费，则应将其确定为计算机软件开发合同。但在开发合同、服务合同等不同类型的合同中，当事人的权利义务内容有着较大区别。按照主要权利义务关系将合同确定为计算机软件开发合同，不意味着将合同中涉及其他内容的条款也作为开发合同项下的权利义务对待。本案中，乘如公司、八图公司之间的主要权利义务关系为软件开发，但同时×××合同第九条还约定了“运营系统日常维护”的相关内容，八图公司保证服务器24小时正常运行、提供服务属于ＩＴ运营服务义务中的一部分，八图公司按照2000元／月单独收取运营服务费用。上述合同条款约定的义务不属于开发方在开发合同中应履行的开发软件、交付符合约定的开发成果等义务，而属于技术服务范畴。因此，乘如公司认为擅自暂停服务器本质上属于未完整交付的行为，并据此要求解除合同的上诉主张不能成立。 关于乘如公司向八图公司发出解除通知的效力的问题，本院认为，合同当事人行使约定解除权，向对方当事人发出解除通知的，如果行使解除权所依据的事实不符合双方关于解除条件的约定，即使对方当事人没有按照合同法第九十六条规定，请求人民法院或仲裁机构确认解除行为的效力，通知解除的行为也不能发生解除合同的效力。本案中，由于乘如公司行使×××合同约定解除权的条件不成就，故其于2018年10月20日向八图公司发送的解约函不发生解除合同的法律效力。对于合同解除的法律后果，本院不再评述，乘如公司要求八图公司返还×××合同款、系统年服务费、赔偿经济损失的上诉请求，本院均不予支持。 综上所述，乘如公司的上诉请求不能成立，应予驳回。原审判决认定事实清楚，适用法律正确，应予维持。依照《中华人民共和国民事诉讼法》第一百七十条第一款第一项规定，判决如下： 驳回上诉，维持原判。 二审案件受理费6955元，由乘如（上海）国际贸易有限公司负担。 本判决为终审判决。 审判长  徐卓斌 审判员  雷艳珍 审判员  邓 卓 二〇二〇年八月十七日 法官助理徐晨 书记员王文婷 裁判要点                            案  号                       （2020）最高法知民终222号                               案  由                       计算机软件开发合同纠纷                               合 议 庭                       审判长：徐卓斌             审判员：雷艳珍、邓卓                                                     法官助理：徐晨                       书记员：王文婷                               裁判日期                       2020年8月17日                               关 键 词                       计算机软件开发合同；违约行为；约定解除权；主要权利义务                               当 事 人                       上诉人（原审原告）：乘如（上海）国际贸易有限公司;             被上诉人（原审被告）：上海八图网络科技有限公司。                               裁判结果                       驳回上诉，维持原判。             原判主文：驳回原告乘如（上海）国际贸易有限公司的诉讼请求。                               相关法条                       《中华人民共和国合同法》第九十三条第二款；             《中华人民共和国民事诉讼法》第一百七十条第一款第一项；                               法律问题                       1.约定解除条件成就的认定             2.通知解除的生效                               裁判观点                       1.当事人可以约定一方解除合同的条件。解除合同的条件成就时，解除权人可以解除合同。合同当事人关于解除权的约定亦属于双方订立的合同内容，对双方均产生法律约束力，在合同一方主张行使约定解除权的情况下，解除合同的条件是否成就应当依照与解除合同条件有关的条款的具体内容进行判断。             2. 实践中，涉及计算机软件标的的合同，合同内容往往比较复杂，包含着复合型权利义务关系，应按照当事人的主要权利义务关系确定合同类型。如果双方主要权利义务为软件开发、交付开发成果、支付开发费，则应将其确定为计算机软件开发合同。但在开发合同、服务合同等不同类型的合同中，当事人的权利义务内容有着较大区别。按照主要权利义务关系将合同确定为计算机软件开发合同，不意味着将合同中涉及其他内容的条款也作为开发合同项下的权利义务对待。             3.合同当事人行使约定解除权，向对方当事人发出解除通知的，如果行使解除权所依据的事实不符合双方关于解除条件的约定，即使对方当事人没有按照合同法第九十六条规定，请求人民法院或仲裁机构确认解除行为的效力，通知解除的行为也不能发生解除合同的效力。                               注：本摘要并非判决书之组成部分，不具有法律效力。