甲公司与周某计算机软件开发合同纠纷二审判决书
裁判文书最高人民法院裁判日期 2023-09-04案由 商业秘密
引注:(2022)最高法知民终226号
全文
甲公司与周某计算机软件开发合同纠纷二审判决书
中华人民共和国最高人民法院
民事判决书
(2022)最高法知民终226号
上诉人(一审原告、反诉被告):甲公司。住所地:江苏省南通市。
法定代表人:兰某某,该公司总经理。
委托诉讼代理人:高某,某律师事务所律师。
被上诉人(一审被告、反诉原告):周某。
委托诉讼代理人:廖某,某律师事务所律师。
乙公司(丙公司,以下简称乙公司)因与被上诉人周某计算机软件开发合同纠纷一案,不服四川省成都市中级人民法院(以下简称一审法院)于2021年9月29日作出的(2020)川01知民初472号民事判决,向本院提起上诉。本院于2022年2月15日立案后,依法组成合议庭,并于2023年4月7日对本案进行了询问,乙公司的委托诉讼代理人高某,被上诉人周某的委托诉讼代理人廖某到庭参加了询问。本案现已审理终结。
乙公司向一审法院提起诉讼,一审法院于2020年8月3日立案受理。乙公司起诉请求法院判令:1.周某继续履行双方签订的《物业电费垫付平台软件委托开发合同书》(以下简称戊93公司);2.丁公司支付开发费用共169400元;3.丁公司支付律师费5000元及差旅费2000元。一审庭审中,乙公司明确其诉讼请求第2项的开发费用包括:60%的合同款项149400元、开关功能开发费用3000元、门户管理与报警等模块开发费用3600元以及运营项目的两台服务器购置费用13400元。事实和理由:2019年7月23日,双方签订戊93公司,戊公司完成物业电费垫付平台开发系统V1.0功能开发,具体包括UI设计、移动端开发及后台管理系统开发等,周某应按照约定支付相应开发费用,同时对验收标准、双方权利义务及知识产权等进行了约定。同年7月24日,双方还签订补充协议,约定增加手动开关电表功能的开发,开发费用为3000元,新增开发工期3天。戊93公司履行过程中,应周某的要求还增加开发门户管理、当前数据、客户设置余额报警等模块,由此新增开发费用3600元,还应周某的要求提供两台服务器服务运行项目,服务器购置费用13400元。乙公司依约履行了戊93公司义务,但周某未依约履行付款义务,仅支付40%合同款项99600元,己公司提交的系统软件不履行相应的验收义务。庚公司的合法权益,构成违约,请求法院支持乙公司的诉讼请求。
周某在一审中辩称:根据双方约定,涉案系统的开发周期共计83个工作日(即从2019年8月1日至2019年11月25日止),辛公司的开发时间早已超过戊93公司约定日期,且涉案系统软件的核心功能一直未能正常使用,壬公司关于2019年12月6日已完成交付的主张,且周某也从未作出验收合格的意思表示。戊93公司履行期间,乙公司还擅自改变系统架构,致使相关功能无法实现,并擅自关闭周某登录访问系统平台的权限,致使周某失去其他交易机会,戊93公司目的已不能实现。乙公司严重违反合同约定,其无权要求周某支付诉争开发费用及实现债权的费用。乙公司主张的报警模块等开发内容不属于新增功能,不应当另行计算费用。此外,涉案系统软件自始未交付,也未验收并部署上线,故不存在服务器费用。
周某向一审法院提出反诉请求:1.确认双方签订的戊93公司及其补充协议已于2020年3月26日解除;2.癸公司返还已付合同款99600元及其资金占用利息损失(以前述金额为基数,自2019年11月26日起按照同期全国银行间同业拆借中心公布的贷款市场报价利率计算);3.癸公司支付律师费用(周某在本案一审审理中并未明确具体金额)。事实和理由:周某为实现缓解转供电主体(指商业体物业管理方)商业电费垫付的压力,以及对商业转供电实现远程管理控制,子公司签订戊93公司及补充协议。在双方签订协议后,周某依约支付了合同定金99600元,辛公司并未依约全面履行软件开发义务,存在诸多违约行为,具体表现在:1.乙公司所开发的涉案软件一直无法实现软件的核心功能,即无法正确获取电表采集数据失败清单的用户列表。该问题将导致软件无法根据用户实际用电量对其预充的电费进行扣减,用电量数据采集失败的用户可以一直用电而不会担心因欠费被物业方从后台拉闸停电,丑公司作为转供电主体也因无法及时发现用电量采集失败的问题而垫付高昂的电费。2.乙公司在开发过程中擅自改变合同约定的软件架构。根据戊93公司附件之“5.系统架构规划”的约定,涉案软件的数据采集工作应当是通过收集器获取用户电表中的用电量数据,辛公司并未开发该项功能,反而是从案外人上海大华电表厂自主开发的软件系统中采集后者已经处理好的数据,导致涉案软件在进行数据采集时不仅不能达到通过收集器兼容其他电表厂电表的目的,还必须完全依赖案外人上海大华电表厂的软件系统,而一旦上海大华电表厂更新己方的软件代码或者更换其他厂家的电表,涉案软件将无法正常使用。3.乙公司的开发时间远超戊93公司约定的时间。其未在2019年11月25日(即合同约定的83个工作日内)提交符合约定功能的合格软件,而且在其超期履行后仍不能解决前述软件核心功能无法实现的问题。4.乙公司擅自关闭周某对软件的访问权限。其在软件远未达到验收标准的情况下,强行要求周某进行验收,进而于2020年3月23日擅自关闭周某登陆访问诉争软件链接平台的权限,导致周某无法进行相关软件测试,寅公司以其自身行为明确表示不再履行合同义务。综上所述,乙公司的违约行为已构成根本违约。周某卯公司发送解除通知的律师函,要求其退款及承担赔偿责任。请求法院支持周某的反诉请求。
针对周某的反诉请求,乙公司在一审中辩称:(一)乙公司系在戊93公司约定的期限内履行了交付软件的义务。(二)乙公司并没有擅自改变系统的架构。根据合同附件功能列表中的智能电表对接,明确说明智能电表对接需要硬件厂商提供接口,乙公司对接实现了自动抄表、接收数据、发送数据、控制断闸功能等,也能够通过厂商提供的接口实现智能电表的功能对接,周某所主张的失败数据采集清单无法获取的情况,与诉争软件功能实现无关。(三)诉争软件的系统架构图一直没有改变,乙公司于2019年8月8日即按照合同约定完成UI设计(架构图设计)该项工作,相反由于周某在合同约定事项之外又进行新的修改变更,乙公司只能按照周某的要求对UI设计进行修改变更,但软件的系统架构并没有改变。(四)乙公司并没有擅自关闭访问权限,而是周某无正当理由拖延验收,故诉争软件应视为交付合格。而且,乙公司提交的证据显示,周某在2020年4月仍然可登录使用该系统软件。综上,乙公司认为戊93公司并不满足法定解除条件,应当继续履行。辰公司UI设计工作所应当支付的对价,不应予以返还。周某的反诉请求均无法成立,请求依法驳回其反诉请求。
一审法院认定如下事实:
(一)戊93公司的签约情况
2019年7月23日,周某(甲方)乙公司(乙方)签订戊93公司(合同编号:20190715001)。戊93公司相关条款约定的内容如下:
第一条“合同内容”:1.完成物业电费垫付平台开发系统V1.0功能开发,具体需要实现功能见附件1。2.在本合同履行过程中,乙方提供系统功能升级付费服务,相关费用经双方协商一致后可签订补充协议。
第二条“合同工期、款项”:1.本合同总价款249000元,总价包含约定范围内的系统开发UI设计费用、手机端开发费用、后台管理系统开发费用的全部费用。2.开发工期自双方合同签订支付乙方预付款并收到必备资料之日起计算80个工作日,具体分三个阶段。第一阶段为UI设计,开发时间15个工作日,交付物为用户端UI设计图,支付金额为99600元(40%比例);第二阶段为移动端开发+后台管理系统开发,开发时间为65个工作日,交付物为用户端操作、后台功能、电表接口等全部功能实现、测试功能实现的完整性、可靠性,支付金额为149400元(60%比例);第三阶段为部署上线,开发时间为7个工作日,交付物为甲方支付完尾款,乙方部署代码到甲方服务器并交付源代码。此外还约定开发内容属于部分并行开发,开发总时长80个工作日,正式上线后提供为期两年的维护服务。3.合同签订后,甲方须支付合同总金额的40%作为定金(即99600元)到乙方账户;项目前后端功能完成,且验收完成后甲方须支付合同总金额的60%(即149400元)到乙方账户。乙方收到付清的尾款后部署代码到甲方提供的服务器,并交付源文件和源代码。达到验收标准后,甲方须于30个工作日内完成最终验收,超过30个工作日未验收的,每天按照合同金额的千分之一金额补偿乙方(每次甲方支付乙方合同费用后,乙方须于3日内提交等额的增值税专用发票)。4.乙方自系统正式上线之日起提供自然日为期两年的维护服务,期间经双方一致评估认为是BUG的,负责免费修复。期限届满后,乙方每年收取系统开发总价10%作为维护费用(即24900元/年),乙方提供网站正常访问、宕机恢复等常规故障维护。5.由于增加电表数量对系统负载能力影响较大,并会导致系统不稳定,故甲方增加电表数量至10000只后,需按2元/个电表一次性支付给乙方做系统扩容,以便对电表数量的支撑。6.验收标准为技术验收:代码规范、可扩展、功能实现、页面流畅、前后台完成交互、页面显示正常数据显示无误。7.甲方按以上约定支付合同价款,设计完成的作品的著作权归甲方所有。
第四条“甲方提供的基础资料”:1.甲方应向乙方提供的基础资料及协作事项如下:根据乙方要求提供;提供方式为电子邮件或当面递交。2.乙方在收到后应尽快查收,如乙方认为不符合本条要求,应及时向甲方说明理由,要求甲方尽快补充完善。
第五条“甲方的权利和义务”:1.及时提供有关企业的文字材料,相关介绍等电子源文件材料。照片图片等可直接提供,但要保证清晰,材料完整准确……4.依据协议按时支付相关费用。
第六条“乙方的权利和义务”:1.对甲方的系统提供日常管理及维护。2.按协议在规定时间完成系统的策划,制作及功能开发。
第七条“验收标准和验收后修改补充”:1.验收标准以甲方通过的样稿质量和风格为准,包括但不限于甲方可以通过任何与英特网连接的计算机访问自己的系统、主页无文字拼写及图片错误、后台数据库程序正常运行。2.双方同意对设计成果分阶段进行评审,对任一阶段的成果,甲方应在收到乙方的验收申请邮件后5个工作日内将评审意见提交乙方,如甲方认为不符合要求,将提供书面修改意见。双方另行约定完成修改并交付的时间,届时再次评审。3.在项目完成后,甲方如提出合理修改要求,乙方可给予免费两次修改服务,每次修改时间均≤2个工作日。如果甲方需要修改主页内容,改动内容每页超过三分之一者按新页计算,乙方将以优惠的价格收取成本费,原则上不超过本合同现有页面的计价原则。4.验收合格,甲方以书面方式签收。5.乙方发出验收通知后5个工作日内应反馈结果,确认无误30个工作日内支付尾款。
第八条“知识产权”:乙方最终制作成果、原始资料(包括但不限于开发代码、PSD源文件、计算机模型、贴图等)及其他一切制作成果,包括未完成的或经过修正的,以及已经完成的制作成果、著作权及相关权利均归甲方所有,且本约定不受合同有效期限制。甲方支付完本合同费用后3个工作日之内,乙方须将以上最终制作成果的原始资料及其他一切相关制作成果交付给甲方。
第十条“违约责任”:1.乙方不得将甲方委托设计的作品转让给第三方,否则甲方有权解除本合同,并要求乙方赔偿合同额的30%作为违约金。自甲方验收上线后,乙方提供系统源代码给甲方保存。2.如一方违反其义务、承诺和保证,则应赔偿另一方的损失,以及另一方为保护其合法权益而支付的合理费用,包括但不限于律师费和诉讼费,另有约定的除外。3.因甲方原因需停止后期服务的,甲方支付当年费用后,本合同自动失效。
第十二条“争议解决”:凡因本合同所引起的或与本合同有关的任何争议,应由双方通过友好协商解决。协商不成的,双方均应将争议提交至甲方所在地有管辖权的人民法院诉讼解决。
第十三条“合同的变更、解除和终止”:1.合同签订后即具有法律效力,未经双方书面确认,任何一方不得无故变更、中止履行或解除、终止本合同,除非双方就有关事项达成新的约定或本合同另有规定的除外。2.若甲方外包制作需求发生变化,双方协商一致后可签订补充协议。3.因甲方原因造成项目终止,乙方可拒绝返还已支付项目款项;如因乙方实施过程中,与甲方沟通造成时间延期,不视为项目延误;因该原因产生纠纷的,已确认项目部分款项不予退还,未完成部分视其完成工作量情况进行协商处理。4.发生下列情况之一,甲方可以单方解除本合同:(1)非因甲方原因,乙方延迟交付任一阶段的设计成果,经甲方催告后5个工作日内仍未履行的,甲方有权要求赔偿损失;(2)乙方将本合同项下的设计制作成果未经甲方同意披露给第三人或用于本合同以外目的的,甲方有权要求赔偿损失;(3)后续维护期,因甲方原因需要中止本合同服务内容,甲方方面中止合同的,不予退还当前及以前支付的费用。
第十四条“合同效力”:1.本合同壹式两份,甲乙双方各执壹份,具有同等法律效力。2.本合同未尽事宜,由甲乙双方另行协商并签订书面补充协议以明确,补充协议与本合同具有同等法律效力。3.本合同经双方法定代表人或授权代表签字并加盖公章或合同专用章后生效。4.合同组成:本合同的附件将作为合同不可分割的一部分,合同附件包括:物业电费垫付平台报价方案。合同巳公司的印章。
戊93公司的附件物业电费垫付平台报价方案载明:项目类型为微信前端+PC后台管理,开发语言为H5+JAVA+MYSQL,开发周期为80个工作日,服务器类型为阿里云。1.功能列表包括:(1)物业电费垫付平台功能清单:业主端首页-微信公众号进入,其涵盖的子模块有微信授权登录、手机验证及信息设定、用电余量、用电历史、预付费、资金明细等;(2)平台运营方及物业管理后台功能模块包括:系统管理、清算管理、电价管理、客户管理、电表及表位管理、物业管理后台、智能电表对接等一级栏目,也包括每一项栏目项下的子模块及相应的描述、开发周期、备注说明,其中工期栏目中记载“另加UI设计15天,后台前端开发76.5天”。2.费用预算,包括费用类型(具体包括UI设计、前端开发、后台接口开发、数据库设计、后台前端开发、后台功能开发、项目测试、接口对接、短信费用、代码运维)、对应费用类型的具体说明、人力人数、单项项目工期、对应费用类型的报价(元),合计金额为249000元,备注:发票开具由甲方指定;服务器由甲方准备,乙方负责环境部署和代码部署……4.开发部署部分包括:……(3)服务器空间:客户自备或甲方出具运维方案,客户购买,乙方负责部署和连接,如果购买乙方服务器,则按需求报价。5.系统架构规划包括:(1)系统设计原则:以平台稳定性和价格计算准确度为首要原则,核心数据以管理者权限控制其操作;使用大型云服务提供商,保证系统运行安全稳定;可扩展原则,对于各功能确保可扩展可优化。(2)技术解决方案:用户端公众号、云端服务器、云服务器管理后台、智能电表硬件(套件),并有附图。(3)业务对接方式:电表—收集器,多对一,单个收集器配置电表上限为五十台,硬件厂商提供完整可靠运行环境;收集器—云服务器,HTTP协议通信,收集器收集并提供完善的电表数据源;云后台—云服务器,HTTP协议通信,云后台对整个系统进行系统配置,展示云服务器上收集的数据;公众号—云服务器,HTTP协议通信,实现充值、电表信息查询、历史记录查询。(4)数据收集频次:基础12h/次,暂定00:00和16:00;用户公众号主动查询时,更新一次;管理后台单用户查询时,更新一次。6.售后服务:(1)免费提供两年网站维护服务(修正BUG和保证网站正常运行),期限届满后,额外赠送三个月。(2)辅助域名备案、免费SEO关键词和描述设置。(3)提供网站PSD设计原稿、网站源代码。(4)对甲方相应的运营人员进行为期1天的培训。(5)提供5×12小时的在线咨询或电话咨询。(6)提供网站功能升级付费服务,费用根据投入的人力和工天另行评估和计算。
2019年7月24日,周某(甲方)乙公司(乙方)签订补充协议,载明:1.在后台管理上增加手动开关电表的功能,即后台选择某小区某户电表后,点击“开”或“关”,电表执行相应的动作,达到手动开关的目的。2.该功能属新增功能,开发工期3天,开发费用3000元,随原合同尾款一并支付。3.甲方可指定硬件部分供应厂商,且乙方保证除接口外其他所有软件功能不需再次更换开发,如甲方更换硬件部分供应厂商,应对接接口给乙方,并支付新硬件接口部分开发费用。如果甲方不需要乙方继续开发,乙方必须帮午公司,并配合提供代码支持。甲方指定硬件部分厂商后,乙方才进行接口开发。补充未公司的印章。
(二)戊93公司的履行情况
戊93公司签订后,周某于2019年7月31日向乙公司转账支付首笔合同款,即总价款40%的款项99600元。乙公司确认收到上述款项。之后,周某未再有任何付款。截至本案诉讼,双方确认涉案软件并未上线部署。
双方一致陈述称,戊93公司所约定的软件开发项目于2019年8月1日开始进行UI等设计,合同约定的开发工期为83个工作日,开发工期的起算日期为戊93公司申公司收到开发所必备的资料之日。一审庭审中,乙公司主张第二阶段开发工期应当自其收齐完整的资料设备后起算,即2019年11月20日收到小票机后开始起算;周某主张开发工期应当自启动UI架构图设计开始连续起算,即自2019年8月1日起算,至2019年11月25日工期届满。
双方一致认可诉争的采集数据失败清单的获取功能对应的是戊93公司附件功能模块中约定的抄表管理模块项下的实时抄表及电表维护子模块,有关报警功能模块对应的是戊93公司附件约定的余额报警功能模块。
戊93公司履行期间,乙公司将涉案软件部署在其服务器上,并向周某提供了通过网页链接访问登录涉案软件的登录名和密码,周某认可曾多次使用该登录名及密码通过链接访问及测试涉案软件。乙公司还曾于2020年2月28日向周某发送验收涉案软件的通知以及费用结算函,周某确认收到上述通知,但未予以明确反馈。2020年3月26日,丁公司发送律师函,并在律师函中明确主张解除合同、退还款项。
乙公司陈述称,戊93公司签订后其于2019年8月1日至8日完成UI/UE设计;之后双方通过会议纪要的方式进行沟通,其根据周某的修改意见对UI/UE设计进行修改,并于同年8月30日再次提交给周某确认;其于9月2日启动涉案软件的开发工作;同年12月6日其通过微信向周某发送涉案软件链接以及账户登录名、密码。周某认可收到前述UI/UE设计及提出修改意见,认可双方于2019年8月14日形成“智能电表项目会议纪要”,认可于2019年9月中旬确认前述UI/UE设计内容,酉公司通过微信发送的登录名及密码,并进行了涉案软件的访问测试。
双方围绕项目内容、软件开发及提交、反馈意见及修改等事项以微信或电子邮件方式进行多次沟通,包括以下内容:
1.名称为“电力垫付平台开发”的微信群聊内容
双方在该微信群中自2019年7月23日开始进行沟通,成员包括周某及其工作人员权某、乙公司工作人员戚某、戌公司其他工作人员等。
2019年7月29日,周某称“我开始和权总沟通的时候,说的你方推荐的电表硬件厂家的集中器无存储功能。我记得你以前说过你们可以开发硬件的存储功能”;乙公司人员回复“收集器是只有接收和发送数据的功能;存储数据分两部分,一是电表上会存储3个月左右的数据,二是我们数据库会存储所有数据”“在时间内,会把所有数据上传至数据库”“我们每天有两个或三个时间段收集数据,一次不成功,我们会一直收集,这个在你们办公室我们有讨论过”;权某称“我们目前整个数据流只是经过数据收集器转发到服务器,也就是说硬件部分这个数据收集器也是可以用其他厂家的”;乙公司人员回复“我们和厂家确认过,如果不用他们的,也可以用他们推荐的厂家,他们比较熟悉,可以推荐三家左右供选择”“如果要用他们推荐外的,到时可能就要涉及到两个厂家之间的对接”;周某问“所有的电表厂家的存储时间都是3个月吗?”;乙公司回复“我在京东上查询了一些,也咨询过一些,这类电表大致差不多”……“技术团队晚点会开项目启动会”……“电表也需要尽快确定了,项目启动了就要先买两个寄给我们”;权某回复“好的”;周某问“不是说电表端可以放在最后开发吗”;乙公司回复“最好是先确定下来,更方便一些,可以有助于提高开发进程”“电表可以放在最后开发”“前期我们想用两个实物。有实物测试就好”;周某称“电表厂家要最终确定,可能还需要点时间哦”“我们尽量抓紧”;乙公司回复“前期有实物,大家做起来要方便一点”“不影响对厂家的选择。只是说最好是后期能使用的厂家”。
2019年7月31日,权某发送“谭总,再帮我推荐几个靠谱的电表厂家……”;乙公司回复“还真没找到其他厂家。做这个的太少了”,并称“只要厂家能提供完善的接口文档,硬件能保证稳定可用。我们这边都没什么问题。主要是价格和功能……”;权某回复“满足功能的前提下,再说价格”。之后,乙公司发送了两个网络链接,并称“这两家都有适合你们的硬件解决方案”;权某答“好的,我联系”。
2019年8月8日,乙公司工作人员在群里发送名称为“智能电表初版原型html2.zip”文件,并称“权总,有空看一下后端的UE……”“……这个是前端的原型,您们这边看一下”“就是微信公众号这边的”;周某回复“UE已经出来了哇”;乙公司回复“是的,周总,多提建议”“是的,后台部分的,关于用电、收益、充值对账和硬件对接这块还需要商讨,暂时没出”“我们把需求在这个阶段确认完整,后面开发的时候少改动,提升效率”“这是线框图,不是设计图。线框图确认了我们再设计”“您可以把需要修改的地方截屏标注说明成一个统一的文档,我们这边统一修改”。
2019年8月14日至15日,双方在群里发送标题为“智能电表会议纪要-重庆-20190814”“智能电表会议纪要-重庆-(补充)20190814”的文档。前述会议纪要的内容包括讲解用户端UI、后端以及讨论修改需求内容等。乙公司问“请问可以确定了吗”;权某回复“确定了,表计这边尽快采购”;乙公司告知“权总,采购表尽量2收集+2电表”。
2019年8月16日,权某称“兰总,发个收货地址,我把腾扬的电表采购了寄过来”。随后,兰某发送了邮寄地址。
2019年8月20日,兰某确认收到电表,亥公司工作人员发送电表及收集器实物照片。权某称“三个表一个收集器,功能都满足要求的”。之后,乙公司工作人员称“好像他这个电表无法实现,就是您们上周开会说的,后台允许合闸,然后住户手动操作”;兰某称“问厂家呢”;权某回复“这个厂家不行?”“你们合作过的腾扬”。
2019年8月22日,乙公司在群里发送“智能电表待定版2.zip”文档,并称“权总,UE这边改完了,技术也确认了一遍,您这边再过一遍看下有没有问题”;权某回复“好的”;乙公司称“因为电表厂家暂时没有给到技术这边工具和授权码,所以有几个页面还是待定状态”,之后又在群里发送“2019.8.22电表前端UIJPEG.zip”,并称“权总,这个是前端微信的UI设计图,您们这边查收一下,有问题及时沟通”;权某回复“好的”。
2019年8月26日,权某问“和电表沟通怎么样了”;乙公司回复“跟那边沟通好了,我们这边正在搭建用电环境”。
2019年8月27日,乙公司问“权总,讨论UE修改的远程会议,您这边准备好了就可以开始了”;权某回复“好的”;周某称“你们戚总还没到”;戚某回复“我马上到”。当日晚上,乙公司人员称“今天讨论的补充,请及时确认,确认完后1天时间我这边可以修改完成”,并在群里发送名称为“8月24日讨论补充.doc”文档。
2019年8月28日,权某称“可以确认啦”。之后,双方又针对相关数据、模块功能等进行沟通。
2019年8月30日,乙公司在群里发送“电力垫付平台原型最终版5.zip”文件,并称“权总,昨天沟通后我这边又改了个版本,您看下还有没有问题”。
2019年9月2日,戚某称“今天电表这块有没有遇到什么问题。有的话就抓紧和权总沟通”。之后,双方针对总售电量数据的理解等事宜进行了沟通。权某在群里发送“总售电量=转供电租户电量+物业自用+公摊电量”。
2019年9月6日,周某称“那家电表厂家表不得行,跑不通哇”;权某问“现在什么问题嘛”;戚某回复“跑得通”“老掉线”“卡的质量”;周某称“如果是这样,权某,再买家厂的电表也跑下……”;权某问“我想问一下是表的问题还是其他问题”;戚某回复“网卡”。
2019年9月10日,周某问“网卡到了没,已经开始测试了哇”“另外就是麻烦你们再找一家电表厂家和这家同时测试”。
2019年9月12日,周某问“新联系的电表购买如何了”;戚某回复“在发过来。还没到”。
2019年9月24日,权某问“新采购的电表到了没”;戚某回复“收集器还没到,我一直在催”。
2019年10月21日,乙公司人员问“权总小票机和微信商户号弄好了吗”;权某回复“现在要小票机嘛?”;乙公司人员回复“先选好吧,到时候直接就买”。
2019年10月22日,乙公司人员称“权总,微信公众号的账号和密码提供一下”。之后,双方就账号、密码以及登录事宜进行沟通。
2019年11月14日,乙公司人员问“权总,小票机找好了吗”;权某回复“问一下戚总”“之前不是沟通好了吗”。
2019年12月6日,乙公司发送用于访问涉案软件的链接,并告知权某运营账号、密码等,并称“其他大部分功能可以测试了”。
2019年12月10日,权某截屏信息并询问“注册获取不到验证码”,乙公司答“可以随便输验证码”“因为测试就还没有写”。
2020年1月7日,周某问“平台数据已经刷新了吗?我怎么登录进去好多功能还是没有”。
2.名称为“上海大华-千问网络沟通群”的微信群聊内容
甲23公司及周某的工作人员,还包括戊93公司电表提供方“上海大华”厂商的工作人员,群聊显示沟通时间始于2019年9月17日。周某主张其工作人员于2019年10月21日才加入该群。
2019年9月17日,乙公司人员问“我们需要梯度计价。这款满足吗”;“上海大华”人员回复“只支持远程读取数据。不支持远程控制”;乙公司人员问“有没有其他的款,支持这些需求,我们就是需要可以远程控制、分时计价、数据收集的款”;“上海大华”人员回复“型号是DDZY9898-Y,暂时没有放网上”;乙公司人员称“我们想采购两个表和一个收集器先做测试”;“上海大华”人员回复“这个表没有现货,需订做”;乙公司人员问“你能发一下这款产品的功能表和说明吗。我们先确认一下功能是否可以满足?”“上海大华”人员随后发送了前述型号智能电表的文档说明,乙公司人员查看后表示功能是全的。之后,乙公司人员问“可以给我们调接口文档吗。因为我们是自己开发平台,只要合适的产品我们会大批量采购”;“上海大华”人员问“你们要开发底层协议还是调接口”;乙公司人员回复“接口”;乙24公司人员问“我们选的收集器是支持这款电表的吧”;“上海大华”人员回复“收集器是通用的”;乙公司人员问“需要接口和底层协议你们这边在商务上有区别吗”;“上海大华”人员回复“接口提供倒是无所谓,底层协议必须是批量采购以后才能提供”;乙公司人员问“定制的话大概要多久”“DDZY9898-Y型2个,DH6200-GPRS3型数据采集终端2个”;“上海大华”人员回复“可能要明天才能答复”。
2019年9月18日,“上海大华”人员在群里发送“软件接口协议.pdf”文档,并称“我问了仓库,表下周应该能好,不过标牌没那么快”。
2019年9月29日,乙公司人员问“张总,您发过来的快递里面有没有放卡”;“上海大华”人员回复“没有”“2G的流量卡就行,移动买一张就好”;乙公司人员又问“如果到时候我们大量采购,这个卡也要我们自己办?”;“上海大华”人员回复“是的,丙25公司信息的,最好还是自己采购”;乙公司人员又问“张总,接口只有这些吗”;“上海大华”人员回复“是的”;乙公司人员再问“但是这个接口文档上面好像没有创建电表和收集器。只能在你们后台创建?”;“上海大华”人员回复“是的”;乙公司人员继续问“如果要对设备进行操作的话,只能在你们后台进行操作?”;“上海大华”人员回复“可以通过接口”;乙公司人员又问“但是您提供的这12个接口里面没有呀”;“上海大华”人员回复“第11个是控制断送电的”;乙公司人员再问“接口没法设置?”;“上海大华”人员回复“接口不能设置,只能查询”;乙公司人员又问“接口只能让设备进行断送电和充值?”;“上海大华”人员回复“控制的命令是这些”;乙公司问“其他的就在你们后台进行?”;“上海大华”人员回复“是的”;乙公司人员继续问“如果要在我们自己的系统上远程创建电表、创建数据收集器、设置电价这些有没有什么办法?”;“上海大华”人员回复“你们自己做采集电表的程序吗。做肯定可以做的,我们提供电表协议和收集器的规则就行。不建议自己做”“丁26公司实力很强自己做的话肯定没问题”;乙公司人员再问“自己通过电表协议和收集器规则做吗?”;“上海大华”人员回复“是的”。随后“上海大华”人员在群里发送了电表协议的文件,并称电表协议是国网通用协议、收集器是TCP透传的。乙公司人员问“如果要远程创建电表、创建数据收集器、设置电价这些功能,目前只能通过底层协议实现?你们那边能不能定制开发这个接口?”;“上海大华”人员回复“你们有这么多表最好自己做”;乙公司人员回复“我们业主的需求是要自己设置电价、创建数据收集器等,除了我们自己底层协议开发,还有什么办法?底层开发要求时间太长了。”
2019年9月30日,乙公司人员发送电表及收集器实物链接照片,“上海大华”人员告知在接口协议里面有设备ID。乙公司人员问“可不可以,我们这边自己写后台管理系统的页面,然后调用你们后台管理系统的接口”;“上海大华”人员回复“如果你们自己写管理系统页面,调用我们的接口,就跟我们现在的页面无关,跟权限无关了”“这样的话,不如把采集的数据给你们,你们自己做处理”“还是通过我们的接口获取数据,只不过页面都是你们做对吧?”;乙公司人员称“现在的情况是这样的,就是我们想在后台通过调用接口,对电表设置电价、创建电表、创建收集器”;“上海大华”人员回复“这个是没问题的,不过创建电表和创建收集器的接口,我们现在是没有的”;乙公司人员问“我们这边才问了一下,业主那边是想设置多费率电价。如果是2万电表的话,你们这边能推荐服务器配置吗?”;“上海大华”人员回复“那可以用2台,最好是数据库服务器不要跟数据服务器放在一起”“能用云服务器最好,配置可以动态调整”;乙公司人员又问“那意思是数据服务器和数据库服务器都要winserver?”;“上海大华”人员回复“最好windows”;乙公司人员继续问“是这样的,我们是开发一套后台的,这套后台也要满足业主的功能,我们现在其实就是想我们自己去后台修改电价,或者有什么其他办法可以从我们后台操作就可以了”;“上海大华”人员回复“如果你有后台那就很快了,我们可以给你们一个配置接口,你们调用就行。只不过,你们获取我们的数据之后,如何存储等等,这些还是要做的”;乙公司人员再问“能有对电表参数进行修改的接口吗”;“上海大华”人员回复“改哪些参数?用电量之类的是没办法改的。对电表来说,软件需要做的,就是充值、断电、送电、设置最大功率之类的,电表数据是没办法远程修改的”;乙公司人员又问“意思就是你们这边能提供刚才我说的这些功能接口?”;“上海大华”人员回复“可以的”;乙公司人员称“我们这边先统计一下,需要麻烦你们增加的功能接口,等会给您回复”。之后,乙公司人员称“黄总,这是我们后台的UE,我先发出来,麻烦您们有时间就看一下吧,要增加的功能,我这边还在统计,统计好了,马上发给您”。
2019年10月8日至21日,乙公司人员与“上海大华”人员针对接口、数据、收集器等对接、调用、数据采集等事项进行沟通。
2019年10月14日,乙公司人员问“收集器标号不是你们贴在收集器上面的?”“怎么把我们自己的收集器添加上去”;“上海大华”人员回复“ip就是收集器编号。先我们的网页上调试通,你们再接口添加”“先用你们买的电表收集器在我们网页上添加档案,把数据采集上来,确定电表收集器能正常采集数据”;乙公司人员称“但是你们后台没有看见哪里有添加收集器。添加的时候直接要我输入收集器编号”。之后,各方针对收集器添加以及参数修改、接口测试等事项进行沟通,戊27公司人员发送了电表、收集器的实物照片。
2019年10月21日,乙公司戚某告知加入群聊的权某“己28公司之间的技术群”;权某问“欠费是后台软件判断的?再由软件发出拉闸命令”;“上海大华”人员回复“是的”;权某问“如果通讯不好,用户不是欠费还能用电”;“上海大华”人员回复“如果不通讯,软件是会报警的。当然我们也有一款表是充值在表内的,不过其实是差不多的,主要是通讯有报警功能”“欠费跳闸后,用户再充值,不是马上来电。而是系统发出允许合闸后,才可以合闸”;权某问“是所有表都这样,还是特殊情况才这样”。之后,权某称“哦,懂了,那么不需要人工审核对吧,只不过要加一个延时,那这个功能是问题不大的”;“上海大华”人员回复“我们核对过了,充值到表里可以做,但成本会更高,还有延时充值还是要用充值到软件的方式才好改”;权某回复“那就软件实现。欠费拉闸后,充值延时到表”。
2019年10月29日,乙公司人员问“黄总,这个开关闸多久能改出来呢”;“上海大华”人员回复“大约一周可以做好,不过等你们合同定下来再做也不迟”;乙公司人员随后称“黄总,这个接口返回的时间感觉有点问题”;“上海大华”人员回复“可能这台电表现没有在正常采集,我跟售后确认一下”;乙公司人员又问“黄总,请教一下,哪个接口能取到最新的电表度数”;“上海大华”人员回复“这个接口没有做,因为我们表计的种类比较多,有的表通讯速度很慢,如果有实时对表的请求,可能对系统的影响比较大”“现在应该是没有正常采集,因为最新数据是25号的”。随后,双方针对电表采集数据问题及接线问题进行沟通。
2019年10月30日,“上海大华”人员问“要不把设备寄回来我们看看,之前都是好的,至少参数上不会有错”“我先去后台看看数据,这台正在工作的收集器编号和电表编号是多少”;乙公司人员回复“电表267485,收集器80001518”“现在把有流量的卡换到了80xxx17这个收集器,电表是267483”,之后双方针对采集数据及相关错误问题继续进行了沟通。
2019年11月4日,乙公司人员问“能帮忙看一下这个接口是什么问题吗”“意思是只要电表掉线或者访问不到,你们就会调我们的接口”;“上海大华”人员答复“是的”。
2019年11月6日,乙公司人员问“上次说的要改跳合闸接口,多久能改好”;“上海大华”人员回复“你直接把问题截图吧”。
2019年11月13日,乙公司人员问“黄总,你们多久能把取电表冻结数据和远程开关闸的接口提供出来”;“上海大华”人员回复“程序已经好了,可以更新了”;乙公司人员又问“冻结数据的数据格式跟之前那个历史数据的格式一模一样吗”;“上海大华”人员回复“是的”;乙公司继续问“你们现在冻结数据这个也是返回的一个月每天的数据吗?”;“上海大华”人员回复“一个月每天的用量数据”;权某称“欠费跳闸后,用户再充费,需要延时5分钟再执行合闸”;乙公司人员问“跳闸和合闸我直接传2和3这种能实现不”。之后各方就跳合闸及接口问题进行了沟通。
2019年11月28日,乙公司人员问“您好,我们这表调用充值接口充值了8000,然后再查询用户余额只有5000多,这个问题能看看吗。然后表计剩余量清零这个接口好像也没用”,之后与“上海大华”人员围绕充值、剩余电量查询等问题进行了沟通。
2019年12月3日,乙公司人员称“还有一个问题,电表断闸后,无法合闸”,之后与大华电表厂商人员针对该问题进行沟通。
2019年12月10日,权某称“昨天系统添加了八只电表,今天抄表管理看不到这些用户,电表维护里也没有失败清单”;“上海大华”人员回复“8台电表的表号发一下,我们分配到你账号里面”;乙公司人员问“调用接口的添加的档案没在我们账号”;“上海大华”人员回复“没有。在超级账号里面”。权某随后称“这个表分合闸都返回的是失败”“合闸执行多久才能成功”;“上海大华”人员回复“合闸执行是立即执行。1分钟内”。权某又问“抄表数据怎么看呢”“刚刚测试了一下,分闸有一个不行,合闸全部合不起,显示合闸成功”;“上海大华”人员答复“软件控制要选择是,在档案管理上有编辑”;乙公司人员问“我这边充了钱是等多久合闸呢”;“上海大华”人员回复“在网页上看有没有控制命令”;乙公司人员对此回复“我不可能每次添加完表,还要登录你们后台再去确认一下这个软件控制是否选择是吧”;乙公司人员又问“19xxx0004这个表好像一直没合闸成功”;“上海大华”人员回复“我手动合闸可以,网页可以合闸”;乙公司人员称“这是我半小时之前请求的”;“上海大华”人员回复“你再试下其他的表可以吗”“先改模式,再充值或清零操作才能送电/断电”;乙公司人员称“我给其他的表都充了钱,看能不能合闸吧”;权某称“合不起闸呢”;“上海大华”人员问“软件控制模式呢”;乙公司人员称“这些都是正常的”;权某又问“现在怎么弄?我在这边等着呢”;乙公司人员称“我这边手动合闸和充值后迟延合闸接口都调了,没用,能看下吗”;之后权某问“今天还要测试不”;“上海大华”人员回复“明天吧,刚在路上”。
2019年12月11日,权某称“昨天的问题,今天继续”;“上海大华”人员问“哪个表不能合闸”;权某发送电表图片并称“这些都没有合闸”,之后各方针对合闸问题进行了沟通。
2019年12月12日,周某称“权某,你把电表目前存在问题发给电表厂家”;“上海大华”人员问“表有发回来吗”;权某问“周一才收到,又要发回去?”;“上海大华”人员回复“目前还不确定是什么问题,收到我们会尽快解决”;“上海大华”人员问“能不能寄一个表回来?远程我们看不出是什么问题”。之后双方远程查看,仍未能解决问题。
2019年12月16日,权某问“电表收到了没”;上海大华人员回复“收到了,正在测”“是表的版本不大一样,协议稍微有一点点区别”“我们在上机位上稍微调整一下,稍等”。之后各方就软件控制、合闸及数据采集问题等持续进行沟通,直至2020年1月。
2020年1月16日,乙公司人员问“电表采集失败清单每天什么时候出?”“我昨天下午17:20的样子把191203030008这个表的采集线拆了,失败清单里今天没有显示呢”;“上海大华”人员回复“你们现在只配置了一个收集器不在线和在线的”;乙公司人员又问“你们那个通知有针对表不在线的吗”;“上海大华”人员回复“就是针对表的”;乙公司人员继续问“那如果像我们昨天这种拆除了表和收集器的连线这种会有通知吗”;“上海大华”人员回复“有的。我这里有记录”。“上海大华”人员称“你可以现在就测,把收集器断电,看有没有推送”;乙公司人员称“权总你试一下”;权某回复“好吧,已经重启了”。
2020年1月17日,乙公司人员问“之前说的消息通知问题解决了吗”。
2020年2月3日,乙公司人员问“年前说的那个问题,推送消息的问题,现在能解决吗”;“上海大华”人员回复“我这边没法上网”。
2020年2月15日,乙公司人员问“前置机重启这个接口什么时候能完成”;“上海大华”人员回复“你们试一下,我这里已经调试通了”;乙公司人员回复“好,我们这边尽快测试,前置机接口麻烦你尽快完成发给我”。
2020年2月17日,乙公司人员称“之前修改的消息推送还是有问题,目前尾号01、04、05这三个表是采集不到数据的,但是接收到的是正常采集数据的推送,还有08表一直未收到推送”;“上海大华”人员回复“收集器不在线,有推送。你们只给了一个网址”;乙公司人员又问“收集器不在线和数据采集不到应该都有推送吧,之前你是这样说的”。
2020年2月18日,乙公司人员问“我们这边有一个测试的表经常采集数据中断,尾号03,能看一下什么原因吗”“03和09正常连接的,其他暂时没使用”;“上海大华”人员回复“因为采集不到数据,卡数据了,那我就暂停其他电表的数据采集了”;乙公司人员又问“这个问题是因为多数表没使用采集不了数据而造成的卡数据?”;“上海大华”人员回复“是的,电表不用了之后,系统没有删除,再去控制电表就会一直发送数据,导致一直占用此通道,影响正常的电表”;乙公司人员继续问“开始大量使用电表后,如果电表采集不到数据会不会又出现这个问题?”
2020年2月19日,“上海大华”庚29公司的问题回复“1.删除电表,2.在电表档案管理里面,选择电表,在右上角有关闭按钮,重启前置机……”;乙公司人员问“是这样的,有可能部分电表出现这种情况没有及时排除解决问题,这样该怎么办”。同日,乙公司人员继续问“消息推送还是有点问题,一个电表采集不到数据,会发送一次收集器不在线通知,然后在后面某次重新采集数据的时候会发送一条不在线恢复的通知,造成电表收集器不在线却显示正常工作的错误”;“上海大华”人员回复“出现问题只能找到问题之后解决,或者现场做出更改时软件上也要做相应的改动”“收集器不在线,采集不到数据故障,是分开的。收集器不在线,是收集器断电;采集不到数据是收集器在线,发送数据电表没有返回”;乙公司人员回复“那麻烦你加一个采集数据故障的接口,地址……”。之后,各方围绕采集数据、消息推送等问题持续进行沟通,直至2020年3月10日。
3.辛30公司工作人员戚某与周某之间的微信交流
2019年7月19日,戚某问“周叔,我们合同已经盖章装订了,壬31公司比较合适。硬件厂商业也已经对接好”,周某回复“下周二吧”。
2019年7月22日,周某称“您好戚总,合同还需要改一下,要明确一点。要明确集中器和软件结合的情况,也就是说,贵司开发的一个芯片可以装在集中器上。重点注明集中器和电表的通用性”,戚某回复“我给技术问了,电表这一块不存在厂家会把我们卡死,我们换厂家的时候,只需要重新写一下接口代码……就是说,不同厂家接口代码编译不一样,不会被厂家限制”。
2020年1月,周某称“没有测试成,收集器和服务器连接不上,一直在查原因,后面大华给弄了补丁文件才处理好了。目前还是存在两个问题:重启和采集失败清单,戚总把这个推给了大华,意思是大华没有按他们要求提供接口”。
2020年3月17日,周某称“我们这边物业一直没敢上线,要等上线测试稳定后才能付款”,戚某回复“合同是内测稳定,剩下的应该是售后……”。
2020年3月30日,戚某称“……我打电话问了兰,并没有关闭服务器,只是在网页上取下了你们的页面。第二,这里面还是有双方的误会,兰是技术出生是个直脾气,但他内心是很善良的。他的做法确实有欠妥,当然我也就你们的事和他商量过……我们一起开个商议会……”,周某回复了语音。
4.癸32公司人员之间的微信交流
2020年2月3日,乙公司人员问“权总,电表现在还有什么问题吗”,权某回复“失败清单还是没有啊”;乙公司人员又问“其他的呢”,权某回复“重启的问题。其他都还好吧”;乙公司人员称“重启这个之前说的是会有风险,不建议,现在电表添加后会自动采集数据,不需要重启前置机”;权某回复“你先解决失败清单的问题吧。我这边测试了再说”;乙公司人员回复“行”。
2020年2月15日,乙公司人员称“权总,失败清单这块你们可以找个时间测试一下,厂家这边已经修改好了”,权某回复“好的”。
2020年2月17日,权某称“目前实际可以采集的电表只有两只……”“失败清单显示的也不对……你那边再查一下原因”,乙公司工作人员回复“好的,我这边再看看”。
2020年2月18日,权某问“03号表又不采集了,收集器正常的,09可以采,查一下什么原因造成数据采集经常中断”;乙公司人员回复“权总,问题原因找到了,现在可以正常采集数据,电表不用了之后,系统没有更改正确的参数或者系统没有删除,再去控制电表就会一直发送数据,导致一直占用此通道,影响正常的电表”;权某问“采集系统上线后,如果电表采集不到数据会不会又出现这个问题?怎么让暂时不能采集到数据的电表不影响其他正常电表,有没有好的办法?”
5.双方电子邮件往来情况
2020年1月6日、1月7日,子33公司工作人员发送电子邮件,丑34公司“……经近期测试发现平台存在以下问题:1.用户退租后,新租户入住……;2.电表管理-电表更换,删除电表后,不能重新添加原表计……操作无日志记录;3.电表维护,展示采集失败用户……;4.电表数据(峰平谷总)无法实时抄表、冻结数据是哪个时间段的数据;5.日志不可以清空,必须保留……6.销户退费、直接销户需要日志记录小票机打印的所有信息;7.控制分合闸要加密……。”。
2020年1月11日,权某再次发送电子邮件,寅35公司收到邮件后明确邮件附件所列问题的解决时间,并明确软件系统在2020年1月24日前能否交付使用;该邮件附件“关于物业电费垫付平台软件委托开发相关问题的函”载明:“截止2020年1月11日平台系统仍无法正常使用……软件功能仍存在以下问题:1.电表维护界面,用户采集失败清单无法展示;2.新增电表后,软件无法采集到用户数据;3.微信公众号无法登录,无法充值;4.充值后电表不合闸,在1月6日软件修改以前充值后自动合闸没有问题,修改软件后充值电表不合闸,请查明原因。”
2020年2月11日,权某发送的附件名称为“关于物业电费垫付平台软件委托开发相关问题的函”的电子邮件载明:“截止2020年2月9日平台系统仍无法正常使用……1.电表维护界面,无法正常展示每日采集失败用户清单(附图示例)目前所有设备均已断电,在电表维护中不能显示所有采集失败的电表信息。该问题已在前两次发函中提到……;2.2020年1月20日收集器无法连接服务器,导致数据采集全部中断……后怀疑是后台原因交由贵司,但贵司无法解决。后与大华技术人员沟通,提供了软件修复文件,经过处理数据采集恢复正常。如后期再出现类似问题,贵司负责在48小时内解决完毕;3……对于上述1的问题已经远远超过合同约定48小时,请贵司在后续系统上线及调试中严格按照合同约定执行。”
2020年2月19日,权某再次发送电子邮件,附件文档中载明:“截止2020年2月19日,软件功能仍存在问题,1.电表采集失败维护,电表数据较长时间不能采集的处理上,第一,删除采集不到数据的电表,这个电表正常使用时不应该采用;第二,在电表档案管理里面,选择电表,在右上角有关闭按钮,重启前置机,这个操作不是在轶度聚能管理系统软件中实现的。需要在我们轶度聚能管理系统中实现采集失败用户采集和暂停采集设置功能。”
2020年3月23日,乙公司工作人员向周某的工作人员发送微信:“在不,权总,你们周总现在什么情况。我们这验收报告发过去了两三周,一直不给回信,按合同我们也完成了,测试也通过了,应当回复报告,并支付费用。今天我们先停掉项目访问。”
(三)与案件争议相关的其他情况
周某陈述于2020卯36公司发送“律师函”,乙公司确认收到该函。律师函中载明:周某要求解除双方签订的戊93公司,辰37公司退还款项并承担违约损失的赔偿责任。
乙公司主张基于合同履行还制作了“物业方后台手册”“物业电费平台运营后台操作手册”“zndb硬件接口对接代码说明”文字说明内容等。
乙公司主张为本案诉讼支付了律师代理费5000元;周某主张为本案诉讼亦支付律师代理费,但称因系风险代理无法明确具体支出金额。
乙公司巳38公司(法人独资),成立于2017年04月27日,注册资本为100万元,经营范围包括从事网络科技、计算机信息科技领域内的技术开发、技术咨询、技术转让、技术服务、计算机系统集成、软件开发等。
一审法院认为:
乙公司与周某签订的戊93公司及其补充协议属于计算机软件开发合同,系当事人的真实意思表示,应认定合法有效。本案的争议焦点为:双方主张的违约行为是否成立;戊93公司是否应予解除;合同责任的承担。
《最高人民法院关于适用<中华人民共和国民法典>时间效力的若干规定》第一条第二款规定:“民法典施行前的法律事实引起的民事纠纷案件,适用当时的法律、司法解释的规定,但是法律、司法解释另有规定的除外。”第二十条规定:“民法典施行前成立的合同,依照法律规定或者当事人约定该合同的履行持续至民法典施行后,因民法典施行前履行合同发生争议的,适用当时的法律、司法解释的规定,因民法典施行后履行合同发生争议的,适用民法典第三编第四章和第五章的相关规定。”戊93公司及其补充协议于2019年7月签订,午39公司于2020年8月提起诉讼,周某于2020年11月提起反诉,故本案应当适用《中华人民共和国合同法》(以下简称合同法)及相关司法解释的规定。
关于违约行为是否成立的认定,合同法第八条第一款规定:“依法成立的合同,对当事人具有法律约束力。当事人应当按照约定履行自己的义务,不得擅自变更或者解除合同”;第六十条第一款规定:“当事人应当按照约定全面履行自己的义务。”本案中,乙公司主张周某未按约履行付款义务,且针对提交的涉案软件不履行验收义务,构成违约;未40公司未按期履行软件交付义务,且改变了系统架构,软件核心功能包括采集数据失败清单始终不能正常获取,还擅自关闭了登录访问涉案软件的权限,致使合同目的不能实现,构成违约。一审法院认为,第一,从戊93公司约定内容看,合同明确约定:开发工期为80个工作日及“补充协议”中新增开发工期3日,工期自双方合同签订支付预付款并收到必备资料之日起算;合同总价款及总价包含的开发内容;合同款项支付是按照工期、分阶段支付,除约定需按期交付项目开发成果,还应以合同约定的功能实现、验收完成为第二笔款项的支付条件;双方的权利义务包括按时支付费用、按规定时间完成系统策划、制作及功能开发;软件系统平台的验收标准,以及双方同意对设计成果分阶段进行评审、评审需提供书面修改意见,验收合格周某应以书面方式签收等。戊93公司附件还对平台系统前后端的具体功能、模块列表予以细化,且从工期计算亦能看出开发周期有并行开发的情况。此外,戊93公司附件还约定了系统设计原则,包括平台稳定性、价格计算准确度、核心数据以管理者权限控制其操作、各功能确保可扩展可优化等,并约定了电表、收集器等硬件部分与前后端平台即软件部分的功能实现方式、数据收集频次等。并且,补充协议也明确约定新增功能内容、新增开发工期、开发费用,并指明软件开发内容应保证除接口外其他所有软件功能不需再次更换开发等。第二,从查明的事实加以分析,周某于2019年7月31日支付预付款项,乙公司于2019年8月1日启动UI架构图设计,并于8月8日提交设计初稿。乙24公司针对周某提出的修改意见于8月30日再次提交确认稿,并称于2019年9月2日启动项目开发。上述过程表明,并不存在因开发资料不齐全而影响开发工作启动的情况。合同履行过程中,乙公司于2019年8月20日收到周某交付的电表及收集器,申41公司于2019年9月中旬直接向上海大华电表厂家联系采购,至9月底已经收到厂家邮寄的电表及收集器并将之使用于项目开发,没有证据表明因电表采购出现障碍而影响到开发周期的起算。2019年10月21日及11月14日,乙公司曾向周某询问小票机情况,但并未明确告知提交时间或告知该设备提供与否会导致哪些具体开发事项受到影响;相反,周某在第二次收酉42公司工作人员,戌43公司的戚某则称“前面这个不是沟通好了的嘛”。2019年12月6日,乙公司人员向周某发送软件平台访问链接及登录账号密码,据此可登录访问涉案软件并进行功能测试。此后,双方通过聊天记录、电子邮件等方式多次沟通有关问题、交换意见,并针对电表管理、采集数据、电量计价、合闸/断闸、信息编辑、消息传送等多个功能事项进行测试、问题反馈、调整修改等,亥44公司向周某发出验收通知及费用结算函时,涉案软件有关电表数据采集、前置机重启、消息推送等功能仍然存在问题或故障,双方还在持续进行沟通处理,甚至还要求电表厂商尽快排除修复有关故障。第三,从双方聊天记录及往来邮件表明的履行事实,并结合双方陈述意见作进一步分析,乙公司开发的涉案软件始终无法准确、稳定地显示电表采集数据失败的清单,管理者后台控制操作也始终存在障碍,且涉案软件开发的相关模块控制功能的实现需依赖电表厂商自身管理系统中的功能模块的添加设置或数据处理,这与戊93公司约定的系统架构模式即由收集器对接云服务器、收集器收集并提供完善的电表数据源的处理模式存在较大差异。此外,依据现有证据,甲45公司曾暂停周某访问涉案软件页面,导致涉案软件无法正常使用,亦未进行相关验收确认,至今未进行部署上线。
综上,一审法院认定,乙公司于2019年8月1日启动UI设计,在没有证据表明开发周期的起算因必备资料不齐全而受到影响的情况下,涉案软件的开发周期起算日应为2019年8月1日。虽然戊93公司约定第一阶段UI设计开发周期为15个工作日,但按照周某庭审陈述,其最终于2019年9月中旬确认UI设计。一般而言,UI设计内容的确认会影响界面模块的开发内容,因此考虑戊93公司有关UI设计确认时间延后、戊93公司约定中表明存在并行开发周期,乙46公司陈述的项目开发启动日期为2019年9月2日,应对软件后续开发工期予以合理顺延。丙47公司于2019年12月6日曾交付涉案软件的访问链接,但该交付属于软件测试阶段,交付成果并未全部实现戊93公司约定的功能;相反,双方后续针对所交付的成果持续进行沟通及问题反馈、修改调整等,直至2020年3月仍不足以表明涉案软件已功能齐备、周某对交付内容已无异议、软件已具备验收的条件。因此,即使开发工期予以顺延,截至2020年3月,工期也早已届满,而涉案软件并未完成符合约定的交付乃至验收完成。丁48公司所发出的验收通知可视为涉案软件交付合格,也不能据此认为周某未对涉案软件予以验收戊49公司原因未履行而构成违约。鉴于涉案软件未按期实现戊93公司约定的功能,软件使用中仍存在功能障碍,尤其采集数据失败清单始终不能正常获取,系统架构亦不符合约定,己50公司的行为构成违约,一审法院予以支持。庚51公司认为周某在2020年4月及其后仍可登录访问涉案软件链接页面,一审法院认为,无论该登录访问是否客观存在,均不能否认涉案软件未按期实现约定功能的事实。辛52公司的相反主张,一审法院均不予支持。
关于合同是否应予解除,根据合同法第九十四条第四项之规定,当事人一方迟延履行债务或者有其他违约行为致使不能实现合同目的,当事人可以解除合同。合同法第九十六条第一款规定:“当事人一方依照本法第九十三条第二款、第九十四条的规定主张解除合同的,应当通知对方,合同自通知到达对方时解除。对方有异议的,可以请求人民法院或者仲裁机构确认解除合同的效力。”根据前述分析认定,乙公司逾期交付功能完整的合格软件、开发的系统架构与约定不符、开发或交付的涉案软件有关采集数据失败清单始终不能正常获取,导致周某既无法正常测试软件,也无法根据测试情况反馈意见,壬53公司完成软件的修复、功能调整,从而导致周某至今无法正常使用软件,其订立戊93公司的目的无法实现,故其有权解除合同。根据查明的事实,周某于2020年3月26日向乙公司发出律师函要求解约,乙公司亦确认收到函件。因此,前述解约函件已经发生法律效力。一审法院确认戊93公司及其补充协议于2020年3月26日解除。针对周某要求确认合同解除的诉请主张,一审法院予以支持;癸54公司的相反主张,一审法院不予支持。
关于合同责任的承担,合同法第九十七条规定:“合同解除后,尚未履行的,终止履行;已经履行的,根据履行情况和合同性质,当事人可以要求恢复原状、采取其他补救措施,并有权要求赔偿损失。”该法第一百零七条规定:“当事人一方不履行合同义务或者履行合同义务不符合约定的,应当承担继续履行、采取补救措施或者赔偿损失等违约责任。”如前所述,子55公司的违约行为导致周某行使合同解除权,丑56公司退款并承担违约责任。鉴于本案涉及计算机软件开发,寅57公司曾进行第一阶段UI设计,亦提交了用于测试的开发内容,还对开发内容进行一定程度的修改、调整,虽然并未达到合同约定的功能需求,亦未完成验收乃至部署上线,但就工作量及其劳动付出而言,也不宜全部否定,故就周某诉请退还全部已付款项,一审法院结合合同性质、履行情况、当事人的过错程度、双方补充协议约定的新增开关功能开发内容的相应价值等,酌情确定退还的金额为60000元,对周某的该项诉请予以部分支持,癸54公司的相反主张则不予支持。卯58公司应承担逾期退款的违约责任,即支付自2019年11月26日起逾期退款资金的占用利息,对此一审法院认为,戊93公司及其补充协议的解除时间为2020年3月26日,辰59公司承担退还款项的利息支付责任亦应当从合同解除之日起算,对周某有关逾期退款违约责任的主张予以支持,对其主张的起算日期则予以调整。周某还主张赔偿律师费用,鉴于其并未明确支出的律师费金额,故一审法院对此不再予以单独计算。
庚51公司主张周某应履行付款义务,包括剩余60%合同款项、新增开发费用及运营项目的两台服务器购置费用等,巳60公司在本案中主张的违约行为不能成立,相应付款条件亦未成绩,故对于上述费用支付的主张,一审法院均不予支持。同理,乙公司主张的律师费、差旅费,一审法院亦不予支持。
综上,一审法院依照《中华人民共和国合同法》第九十四条、第九十六条、第九十七条、第一百零七条,《最高人民法院关于适用<中华人民共和国民法典>时间效力的若干规定》第一条、第二十条,《中华人民共和国民事诉讼法》(2017年修正)第一百四十八条第一款、第二款、第三款之规定,判决:“一、午61公司签订的《物业电费垫付平台软件委托开发合同》(合同编号20190715001)及其补充协议于2020年3月26日解除;二、未62公司退还周某合同款项60000元,并承担逾期退款的资金占用损失(以前述60000元为基数,自2020年3月26日起至实际清偿之日止,按照同期全国银行间同业拆借中心公布的贷款市场报价利率计算);三、申63公司的全部诉讼请求;四、驳回周某的其他诉讼请求。酉64公司未在指定的期间履行上述金钱给付义务,则应当按照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。本案本诉案件受理费3828元,未62公司负担;反诉案件受理费1145元,由周某负担458元,未62公司负担687元。”
乙公司上诉请求:1.撤销一审判决,戌65公司一审诉讼请求,驳回周某一审反诉请求;2.本案一审、二审诉讼费由周某承担。事实和理由:(一)一审法院未准确查明涉案软件系统开发周期,亥66公司未按期实现戊93公司约定的软件系统功能。乙公司的开发周期并未超过戊93公司约定的期限。(二)一审法院错误认定电表采购不影响开发周期。涉案软件需要围绕电表进行开发,没有电表会影响开发周期。戊93公司也明确约定工期需以收到必备资料之日起算,双方之间的微信往来也可证明电表采购对软件开发周期具有影响。(三)一审法院亥66公司未明确告知提交小票机的时间或告知该设备提供与否会导致哪些具体开发事项收到影响。乙公司与周某之间联系的工作人员均属具有软件开发专业知识的人员,且双方对小票机部分的开发功能是明知的,戊93公司也明确约定提供小票机属于周某的义务,乙公司在微信中向周某催要小票机,一审法院却忽视双方约定,甲67公司的责任。(四)一审法院未查明数据采集失败的原因,乙68公司的责任。本案中的数据采集失败是因为案外人电表厂商的原因所致,丙69公司根据周某的委托向第三方采购,故因电表厂商原因所导致的责任应当由周某承担。(五)一审法院未查明戊93公司约定的系统架构情况,亥66公司开发的系统架构不符合合同约定。事实上,乙公司并未改变系统架构,始终是按照戊93公司约定的系统架构进行开发。(六)一审法院审理本案超过六个月的审理期限,属于程序违法。
周某辩称:(一)乙公司认为应以双方最终确认的UI/UE的时间作为软件开发工期的起算日,该主张没有事实依据。一审法院查明涉案软件为前端(UI/UE)与后端功能模块并行开发,戊93公司的约定内容亦表明涉案软件存在并行开发的情况,故周某对前端(UI/UE)的最终确认并不会对后端模块的开发造成迟延。同时,结合在案证据能够证明,涉案软件各功能模块在双方确定UI/UE的日期(2019年8月30日)之前就已开始进行开发(详见“物业电费平台-开发群+电表厂商群微信沟通记录”第18页图1)。(二)乙公司以周某电表采购迟延为由主张影响软件的开发周期,此与事实不符。丁70公司自称合作过或商谈确认过后向周某推荐的电表,周某积极配合并据此采购。乙公司戊71公司,且已经与上述电表厂商进行过合作或确认,故若因周某购买其推荐的电表而造成开发进度迟延,亦应由其自行承担相应后果。况且,乙公司也没有任何证据证明涉案电表存在质量问题。事实上,涉案软件核心功能“电表采集数据失败清单”之所以无法实现,并非电表本身存在质量问题,己72公司在软件开发过程中擅自改变软件开发架构,改为采用直接从案外人上海大华电表厂的电表软件系统中提取已经处理好的数据,而非直接从电表上采集数据,从而导致涉案软件采集数据的整个过程始终受到上海大华电表厂的电表软件系统状态及自身功能设置、电表与上海大华电表软件系统的链接状态、上海大华电表厂软件系统与涉案软件通过接口代码的数据交互迟延、软件彼此不兼容等诸多因素的限制和影响。(三)乙公司以周某未及时提供小票机为由主张影响软件开发周期,亦与事实不符。庚73公司询问是否需要提供小票机,辛公司并未明确需要提供的时间(详见“物业电费平台-开发群+电表厂商群微信沟通记录”第27页图2)。同时,根据周某一审提交的第一组补充证据,辛74公司工作人员戚某协商一致,壬75公司自行购买,待涉案软件验收合格后一并结算。(四)一审法院关未106公司构成违约的认定准确。戊93公司书的附件《物业电费垫付平台报价方案》之“5.系统架构规划”明确约定涉案系统软件的数据采集直接通过收集器获取,乙公司在软件开发过程中未按合同约定进行开发,导致陷入必须完全依赖案外人上海大华电表厂软件系统的境地。一旦上海大华电表厂更新其自有的软件代码或更换其它电表厂的电表,将直接导致涉案软件无法使用,辰59公司擅自改变系统架构的行为已构成实质违约。乙公司已经远超合同约定的开发工期后,其仍不能提供符合验收标准的软件,反而单方擅自关闭周某的登录权限,以其行为明确表示不再履行合同义务。乙公司的上述行为直接导致周某订立戊93公司的合同目的注定不能实现,其已构成实质违约。综上,一审判决认定事实清楚,裁判结果正确,请求二审法院驳回上诉,维持原判。
二审中,当事人没有提交新证据。
各方当事人对一审判决查明的事实均无异议。本院经审理查明,一审查明的事实基本属实,本院予以确认。
本院另查明:
(一)当事人在一审庭审中接受一审法院询问所作的陈述
乙公司陈述称,其在收到周某交付的首期开发预付款后即于2019年8月1日启动UI设计,8月8日按照戊93公司约定完成UI设计后发送给周某,之后根据周某提出的修改意见对UI设计重新进行修改变更,8月30日双方正式确认UI设计。同年9月2日,乙公司正式开始第二阶段的开发工作,在此过程中其明确指出周某提供用于软件开发的腾扬牌电表不符合戊93公司的约定条件,周某遂同意将电表更换。乙公司后来联系了案外人上海大华电表厂采购其电表,直至同年9月29日才收到大华电表厂提供的接口协议。在此期间,癸76公司提供收集器和小票机,直至同年11月20日才收到周某提供的小票机,故第二阶段的开发工期应当自11月20日起算。乙公司于同年12月6日完成软件开发并交付周某,故完全符合第二阶段65个工作日的开发工期要求,并不存在周某所称的逾期履行。电表厂商只要提供开放接口就可以实现与电表的交互功能;同时,为了与不同电表厂商的接口相对应,涉案软件需要做适应性修改,以匹配与接口相对应的源代码。
周某陈述称,戊93公司约定的开发工期为自周某支付预付款,乙公司收到必备材料后开始起算;乙公司自认于2019年8月1日开始UI设计,说明戊93公司履行期限应当从8月1日起算。而且,戊93公司明确约定UI设计和软件开发属于并行开发,故应当以2019年8月1日作为戊93公司开发周期起算时间点,合同履行截止期限应为2019年11月20日;即便加上补充协议新增的“手动开关电表功能”所需的3个工作日的开发工期,合同履行截止期限最晚也应为2019年11月25日。乙公司的开发进度已经远超戊93公司约定的工期,何况其在已构成逾期履行的情况下仍未能实现软件的核心功能。戊93公司对于软件架构的设想是由软件后台直接调取收集器的数据,收集器是直接与电表进行硬性连接,这样设计是希望通过收集器收集电表数据,由此可以避免因电表品牌更换而给商业综合体物业单位带来的掣肘。目前各大电表厂商都有自己的一套收集系统,子77公司使用相关厂商的电表就必须使用其开发的收集系统,丑78公司希望具备的功能。寅79公司开发的软件应当实现的核心功能是,通过收集器可以任意对接各种品牌的电表,完成与不同品牌电表的数据交互采集,再在开发出来的软件后台完成相关计算功能,然后实现由物业单位对商户电表的扣费和限闸管理,这正卯80公司开发涉案软件系统的原因。乙公司之所以在开发过程中购买两台服务器,是因为一台服务器要部署案外人上海大华电表厂的软件,另一台服务器要部署涉案系统软件,从而使得涉案软件系统的所有数据都是通过大华电表厂的软件系统直接调取,而非通过收集器采集,这就明显违反戊93公司附件所约定的软件架构。
(二)当事人在二审询问中接受本院询问所作的陈述
周某在二审询问中对涉案软件要实现的目标进行了如下描述:涉案软件是一款定制软件。涉案软件的开发是辰81公司向供电单位购买商业用电,再转供给商业综合体内的商户使用,巳82公司先垫付电费,而后续可能无午83公司自行承担电费的风险。因此,涉案软件的预期目标是能够实现自动抄表、商户预先充电费、预充的电费用完即自动断电、商户通过微信等方式续费后再行恢复供电等功能,未84公司不再需要垫付电费。为此,寅79公司开发出来的软件系统能够直接从收集器(收集器连接商户的电表)获取数据,且收集器可以连接各类电表,不受电表厂商的电表规格的限制,不会出现因更换电表而无法采集数据的情况。概言之,戊93公司所约定开发的软件应当具有高兼容性,即能够兼容所有厂商的电表,或者说不受制于某个厂家提供的电表。电表只是产生记录用电量数据的硬件装置,涉案软件的功能开发和电表数据本身不要求强相关性,只要软件功能正常,可以和收集器对接并提取收集器从电表采集到的电量数据即可,申85公司最终开发出来的软件不是通过收集器读取电表的用电量数据,而是直接通过案外人上海大华电表厂提供的接口调取该电表厂软件后台记录的电表数据,酉86公司原先约定的软件架构,戌87公司所开发的软件所需数据要通过第三方提供接口,进入第三方后台去调用数据,自然容易受制于人,而一旦案外人的数据后台更新或者电表规格发生变化,涉案软件系统就可能出现无法兼容、无法提取数据的情况。因此,亥88公司开发的软件能够实现戊93公司约定的功能,但因其所开发的软件无法通过收集器来调取电表数据,无法满足“在收集器与涉案软件之间完成正常数据交换”这一核心功能,故对周某而言毫无意义,甲89公司的开发行为构成实质违约的主要原因。
乙公司二审询问中承认其开发出来的软件是通过案外人上海大华电表厂提供的API接口调取后者的数据,但认为该做法得到周某的认可;戊93公司并没有明确约定采用硬件底层开发的模式,双方达成的补充协议可以证明周某了解并同意采用上述方式来获取用电量数据;小票机的作用是打印结算单及相关单据,电表的作用是为基础数据提供来源并允许系统通过控制电表断闸报警;乙公司只负责开发软件部分,至于硬件部分的收集器、乙90公司负责的软件开发工作无关。
双方当事人在二审询问中均确认没有交付涉案软件的源代码。
本院认为:本案为计算机软件开发合同纠纷。根据《最高人民法院关于适用<中华人民共和国民法典>时间效力的若干规定》第一条第二款之规定,民法典施行前的法律事实引起的民事纠纷案件,适用当时的法律、司法解释的规定,但是法律、司法解释另有规定的除外。民法典于2021年1月1日起施行,本案纠纷发生于民法典施行之前,应当适用民法典施行前所施行的合同法进行审理。根据当事人的上诉请求及答辩意见,本案二审争议焦点为:一审法院超期审理是否构成程序违法;一审法院关未106公司构成违约的认定是否正确。
(一)一审法院超期审理是否构成程序违法
乙公司上诉认为,一审法院审结本案的周期超过六个月,构成程序违法。对此本院认为,人民法院适用普通程序审理的案件,应当在立案之日起六个月内审结,这是我国民事诉讼法对适用普通程序审理一审案件在审理期限上的要求,但程序违法通常主要关涉审判组织组成是否合法、是否存在应当回避的审判人员未回避、是否违法剥夺当事人辩论权等情形,因为这些情形对于案件能否确保公正审理具有直接影响。虽然一审法院于2020年8月3日癸54公司的起诉予以受理立案,适用普通程序对本案进行审理,于2021年9月29日作出本案一审判决,在审理周期上确已超过六个月,但综观一审审理过程,一审法院为准确查明案件事实,先后进行了两次开庭审理,且在两次庭审过程中均充分保障各方当事人申某避、举证、质证、陈某实、发表辩论意见等诉讼权利,故本案不存在当事人的诉讼权利受到一审法院不当限制或违法剥夺的情况或者一审合议庭组成不合法的情形。
基于以上分析,一审法院在案件审理周期上虽存在一定瑕疵,但不足以认为一审法院在审理过程中存在程序违法。特别是,乙公司不能具体说明一审法院超过六个月审理期限作出一审判决对判决结果有何影响。因此,乙公司此节上诉理由不能成立,本院不予支持。
(二)一审法院关未106公司构成违约的认定是否正确
合同法第九十四条规定:“有下列情形之一的,当事人可以解除合同:(一)因不可抗力致使不能实现合同目的;(二)在履行期限届满之前,当事人一方明确表示或者以自己的行为表明不履行主要债务;(三)当事人一方迟延履行主要债务,经催告后在合理期限内仍未履行;(四)当事人一方迟延履行债务或者有其他违约行为致使不能实现合同目的;(五)法律规定的其他情形。”
根据本院查明的事实,涉案软件是一款定制软件,并非通用软件。为此,戊93公司明确约定了软件的开发工期(80个工作日)和工期起算日,还约定了需开发的功能清单、相应的功能模块、软件系统的开发原则、技术解决总体方案(并附有软件开发架构图)、业务对接关系(主要指电表、收集器、云服务器、云后台、微信公众号等软硬件的对接关系)以及每个开发阶段的应交付物和交付标准。由此可见,涉案软件的开发需求、设计架构、核心目标自合同签订伊始即为具体明确的,并不存在因为软件功能需求缺失或需求不具体、不明确而影响软件开发工作针对性和时效性的问题。乙公司在收到周某支付的预付款项后于2019年8月1日启动UI架构图设计,在8月30日得到周某对UI架构图的确认后于2019年9月2日开始项目开发,于2019年12月6日向周某发送软件平台访问链接及登录账号密码,周某由此可登录访问涉案软件并进行功能测试。丙91公司向周某发出验收通知及费用结算函时,涉案软件仍然存在收集器采集电表数据失败、采集器无法连接服务器、删除采集不到数据的电表需要反复重启前置机、消息推送失败、修改软件后充值电表不合闸、无法准确稳定展示电表采集失败用户清单等故障问题。由此可见,丙47公司向周某提交了可以登录访问和开展测试的软件平台访问链接及登录账号密码,但所交付的开发成果并不能满足戊93公司关于“用户端操作、后台功能、电表接口等全部功能均已实现、测试功能完整性、可靠性均可保证”的交付标准。本案没有证据表明,涉案软件开丁92公司提供开发所需的资料或未按照合同约定支付开发款项所导致。周某作为涉案软件委托方,戊93公司所开发的软件能够实现通过收集器兼容不同品牌电表以实现自动抄表、通过软件后端远程控制商户电闸开合以实现自动供断电等核心功能,鉴于软件核心功能未能获得实现,周某订立戊93公司的目的未能实现,辰59公司的开发行为构成根本违约。
乙公司上诉认为,一审法院错误认定其开发周期超过戊93公司约定期限,己94公司开发的系统架构不符合合同约定。对此本院认为,首先,一审法院并非基未106公司迟延履行而认定其构成违约,事实上一审法院考虑了双方确认UI设计时间延后的因素,并认为开发工期应予合理顺延。一审法院之所以认为乙公司构成违约,是因为即便合理顺延软件开发工期,但截至2020年3月软件开发工期也已届满,午39公司此时仍无法交付符合合同约定的软件,这才是一审法院认定乙公司构成违约的关键所在。更何况,本案没有证据表明因庚95公司无法开发涉案软件,更没有证据表明涉案软件开发工作后期出现的诸多影响软件核心功能实现的故障与电表和小票机的质量有关。其次,根据戊93公司附件关于技术解决方案附图以及业务对接方式描述的方式,涉案软件的开发架构应当是通过收集器收集电表数据、收集器将收集到的数据上传至云服务器、云后台通过与云服务器的通信将云服务器收集的数据在后台予以展示、公众号通过与云服务器的通信完成充值及查询电表信息、历史记录等事项。辛96公司工作人员与上海大华电表厂人员的微信交流内容,案外人上海大华电表厂人员明确建议如果采集的电表数量众多,乙公司要在待开发的软件系统上远程创建电表、创建数据采集器、设置电价,宜自行开发底层协议,辛公司工作人员对此明确表示底层开发时间太长,壬97公司不愿自行开发远程创建电表、创建数据采集器的底层开发协议。癸98公司工作人员与上海大华电表厂人员的微信交流内容,乙公司提出的折中方案是由其负责编写后台管理系统的页面,然后调用上海大华电表厂后台管理系统的接口,子99公司应当如何配置与大华电表厂用于存储电表数据的数据库服务器相匹配的数据服务器问题进行了深入交流,丑100公司的开发方案已经开始偏离戊93公司附件所约定的开发架构。进而寅101公司工作人员与上海大华电表厂人员的微信交流内容,卯102公司所购买的电表采集器在大华电表厂的网页上添加档案,以确定采集器能够正常采集数据,辰103公司已经开始按照偏离戊93公司附件所约定的开发架构进行软件开发。循着上述开发思路,乙公司所开发出来的涉案软件在后续测试过程中持续、反复出现收集器采集电表数据失败、采集器无法连接服务器、删除采集不到数据的电表需重启前置机、消息推送失败、修改软件后充值电表不合闸、无法准确稳定展示电表采集失败用户清单等异常现象。乙公司每次在排查处理前述异常现象时,都需要请求上海大华电表厂协助解决。之所以如此,巳104公司所开发的软件在处理数据传输、数据展示、数据处理等事项时高度依赖上海大华电表厂的软件后台,关于此,从以下事例即可得到印证:午105公司应周某方的要求排查“03号表又无法采集数据,而采集器本身是正常”这一故障现象,经询问上海大华电表厂,后者给出的解释是“电表不用了之后,系统没有删除,再去控制电表就会一直发送数据,导致一直占用此通道,影响正常的电表”,乙公司又追问“开始大量使用电表后如果电表采集不到数据会不会又出现这个问题”,上海大华电表厂给出的解决方案是“1.删除电表;2.在电表档案管理页面选择电表,在右上角有关闭按钮,重启前置机”。由此可见,乙公司开发的软件在测试过程中屡屡出现相关异常现象,与其放弃开发与涉案软件和相关硬件适配的底层协议,为节约开发时间改为采用让案外电表厂商提供与电表收集器连接的接口,直接调用厂商后台服务器存储的数据的开发思路密切相关,而涉案软件原先约定的开发架构恰恰是要确保软件后台系通过电表收集器直接与商户电表连接并完成对电表数据的采集、传输、提取,以实现软件与不同电表厂商配置的电表之间的弱相关性。未106公司改变了戊93公司确定的开发架构,改为直接调取案外人电表厂商的后台数据,导致陷入过度依赖案外人电表厂商系统后台运行情况,持续、反复出现数据采集失败、数据传输迟延、无法推送采集数据失败的电表信息、无法通过涉案软件实施远程开合电闸等故障,并需要电表厂商随时协助排查原因和解决问题的窘境。乙公司单方改变戊93公司所约定的软件开发架构,该做法从未得到周某的明确认可。庚51公司所开发的软件在数据采集方面屡屡出现状况,申107公司酉108公司自行采购的电表或电表收集器等硬件质量无关,也没有证据表明上述异常状况是案外人上海大华电表厂有意人为操控该厂与电表连接的系统后台运行,或者有意人为干扰数据采集、数据传输等原因所导致。
基于以上分析,一审法院关未106公司构成违约的认定正确,据此就合同解除后的责任承担作出判决,相对严格依法处理而言亦对其并无不利,本院予以维持。因此,乙公司此节上诉理由不能成立,本院不予支持。
综上所述,乙公司的上诉请求不能成立,应予驳回;一审判决认定事实清楚,适用法律正确,应予维持。本院依照《中华人民共和国民事诉讼法》第一百七十七条第一款第一项之规定,判决如下:
驳回上诉,维持原判。
二审案件受理费4846元(乙公司已预交1300元),乙公司负担。
本判决为终审判决。
审 判 长 余晓汉
审 判 员 欧宏伟
审 判 员 何 隽
二〇二三年九月四日
法官助理 姜琳浩
法官助理 李 锐
书 记 员 吴迪楠
书 记 员 艾小妍
本案法律依据
中华人民共和国合同法 第107条
中华人民共和国合同法 第8条1款
中华人民共和国合同法 第94条1款4项
中华人民共和国合同法 第96条1款
中华人民共和国合同法 第97条
中华人民共和国民事诉讼法(2017修正) 第148条1款
中华人民共和国民事诉讼法(2017修正) 第148条2款
中华人民共和国民事诉讼法(2017修正) 第148条3款
更多
在法小和里继续
把这条案例当成参考,用你自己的案情做一次相似检索,可以同时看到相关法条、司法解释和更多同类案例。
在知识库中打开