Aller au contenu principal

Décisions | Chambre civile

1 resultats
C/23445/2014

ACJC/615/2018 du 08.05.2018 sur JTPI/9713/2017 ( OO ) , CONFIRME

Descripteurs : EXPERTISE ; CONTRAT D'ENTREPRISE ; DÉFAUT DE LA CHOSE ; GARANTIE EN RAISON DES DÉFAUTS DE LA CHOSE ; DROIT À LA RÉSOLUTION DU CONTRAT ; DOMMAGE
En fait
En droit
Par ces motifs
RÉPUBLIQUE ET CANTON DE GENÈVE

POUVOIR JUDICIAIRE

C/23445/2014 ACJC/615/2018

ARRÊT

DE LA COUR DE JUSTICE

Chambre civile

du MARDI 8 MAI 2018

 

Entre

A______ SA, sise ______ (GE), appelante d'un jugement rendu par la 13ème Chambre du Tribunal de première instance de ce canton le 31 juillet 2017, comparant par Me Nicolas Jeandin et Me Alisa Telqiu, avocats, Grand-Rue 25, case postale 3200, 1211 Genève 3, en l'étude desquels elle fait élection de domicile,

et

B______ SA, sise ______ (VD), intimée, comparant par
Me Marc Mathey-Doret, avocat, rue De-Candolle 34, 1205 Genève, en l'étude duquel elle fait élection de domicile.

 


EN FAIT

A. a. B______ SA (ci-après : "B______ SA"), sise à ______ (Vaud), a notamment pour but social ______.

C______ en est administrateur président.

b. A______ SA, sise à Genève, a notamment pour but social la fourniture de prestations de services dans le domaine informatique, ainsi que le commerce de logiciels et de matériels informatiques.

D______, E______ et F______ en sont administrateurs.

c. Pendant de nombreuses années, B______ SA a utilisé trois logiciels distincts pour l'exercice de ses activités commerciales, à savoir :

-          "G______" (ou logiciel métier) pour la gestion de l'ensemble de ses activités courantes (factures, stock, fichiers clients, etc.);

-          "H______" (ci-après : "H______") pour la gestion des factures fournisseurs et

-          "I______" (ci-après : "I______") pour la tenue de la comptabilité.

G______, que B______ SA avait développé en collaboration avec un informaticien indépendant, utilisait une base de données gérée au moyen du logiciel "______" et comportait onze "tables" distinctes, certaines liées entre elles, dont une intitulée "factures". Les deux autres logiciels précités avaient été développés par J______ SA.

Faute de passerelles entre les différents logiciels, les données de G______ et H______ devaient être ressaisies manuellement pour être utilisées dans I______.

d. En 2008, B______ SA a décidé d'actualiser et de simplifier ses applications informatiques. D'une part, la nouvelle version de ______ allait connaître un important changement dans sa programmation, ce qui allait rendre les sous-tables de G______ obsolètes, de sorte qu'il était nécessaire de mettre à jour le logiciel précité. D'autre part, B______ SA souhaitait ajouter des modules à G______ pour utiliser deux logiciels au plus, soit G______ "amélioré" et I______.

e. B______ SA a chargé K______ de s'occuper de ce projet.

Employé de B______ SA de 1991 à 1994, K______ s'était mis à son compte en 1994 pour exploiter une entreprise de ______ à Genève. Depuis fin 1994, il avait exercé parallèlement une activité pour B______ SA en qualité de "consultant externe", à raison de deux jours pleins par semaine. Son travail consistait alors à effectuer de la mise en page pour tous les documents publiés par B______ SA, notamment la publication d'un journal mensuel. Bien qu'il n'ait pas de formation en informatique, il avait "appris sur le tas" et était notamment le répondant des collaborateurs de B______ SA pour les problèmes informatiques.

K______ a cherché, mais sans succès, un logiciel global permettant d'inclure les applications des logiciels G______, H______ et I______ dans un seul outil informatique. Il a également pris contact avec J______ SA pour savoir s'il était possible d'inclure H______ dans G______. Cette société lui a répondu qu'elle ne développait pas de logiciels personnalisés. Il a alors pris contact avec
A______ SA.

f. Au cours de plusieurs séances de travail, B______ SA a exposé à A______ SA ses attentes.

A______ SA a conseillé à B______ SA de conserver son logiciel G______, adapté à ses activités et déjà connu et utilisé par ses collaborateurs, d'intégrer la base de données fournisseurs - jusque-là traitée par H______ - dans G______ en créant un "module créancier" (également appelé "module gestion" ou "module comptable"), de supprimer H______ et de créer une passerelle entre G______ et I______.

B______ SA conservait par ailleurs la possibilité de commercialiser le logiciel G______ (une fois perfectionné) à d'autres marchands ______ qui utilisaient déjà la version d'alors. Cette hypothèse de commercialisation n'était cependant pas essentielle pour B______ SA.

g. B______ SA a suivi le conseil de A______ SA. En outre, il a été décidé de transférer les données utilisées par G______ sur la version 2______.

Le nouveau logiciel G______, modernisé et pourvu de nouvelles fonctionnalités, allait être intitulé L______.

h. A la suite de ces discussions, B______ SA a établi un cahier des charges daté du 30 novembre 2007 à l'attention de A______ SA, lequel précisait ne pas être exhaustif et qu'il pouvait y manquer certaines fonctionnalités.

i. Le 12 mars 2008, A______ SA a fait parvenir une offre à B______ SA.

Cette offre reprenait en partie le cahier des charges de B______ SA, soit
59 changements sur les 161 demandés. Elle mentionnait, pour chaque option, la charge de travail estimée (charge "mineure" : moins de 4 heures; charge "importante" : entre 4 heures et 3 jours; charge "majeure" : plus de 3 jours). Sur 59 options proposées, 34 étaient considérées comme nécessitant une charge de travail mineure, 24 comme nécessitant une charge de travail importante, dont le transfert en comptabilité des factures, et une comme nécessitant une charge de travail majeure.

A______ SA a proposé d'effectuer ces modifications en deux étapes :

-          La 1ère étape, qui devait durer 38 jours et se terminer au 30 juin 2008, comprenait le recettage avec établissement d'un rapport (11 jours) et la migration de la base de données vers 2______ avec étude complémentaire du "code" (21 jours). Le recettage devait permettre à A______ SA de se familiariser avec G______ et d'en comprendre le fonctionnement afin d'étendre ses fonctionnalités (témoin M_____, expert privé mandaté par les parties). Le prix forfaitaire était de 45'000 fr. (HT).

Cette étape comprenait également l'intégration au logiciel de certaines des nouvelles fonctionnalités prévues dans le cahier des charges et que B______ SA jugerait prioritaires (7 jours). L'offre indiquait "module créancier" sans autre précision sur ce point. Le prix était de 10'500 fr. (HT).

-          La seconde étape, qui devait durer 26 jours et se terminer à la fin de l'année 2008, comprenait l'intégration de nouvelles fonctionnalités prévues dans le cahier des charges, que B______ SA jugerait moins prioritaires. Les modifications dites mineures prendraient 8 jours de travail et les modifications dites importantes 18 jours. Le prix était de 39'000 fr. (HT).

Le montant total HT de l'offre était ramené à 90'000 fr., correspondant ainsi à un montant TTC de 96'840 fr.

Lors de la première étape, A______ SA prévoyait d'intégrer les fonctionnalités nécessitant une charge de travail mineure, soit 34, ainsi que sept fonctionnalités nécessitant une charge de travail importante. Lors de la seconde étape, elle prévoyait d'intégrer le reste des nouvelles fonctionnalités visées par l'offre. Les options nécessitant une charge de travail importante, à réaliser dans la première étape, respectivement dans la seconde étape, n'étaient pas différenciées dans l'offre soumise à B______ SA. Le "transfert en comptabilité", soit la passerelle entre G______ et I_____, était une charge importante.

L'offre indiquait également qu'une fois les deux étapes précitées terminées, la base de données gérée par 2______ pourrait être migrée vers 3______ et que d'autres fonctionnalités moins prioritaires pourraient être ajoutées.

j. Par courriel du 26 mars 2008, B______ SA a sollicité que 23 options supplémentaires, pour la plupart figurant dans le cahier des charges, mais non reprises dans l'offre de A______ SA, soient intégrées au projet.

k. Le 31 mars 2008, les deux parties ont signé l'offre du 12 mars 2008, ainsi que le courriel précité du 26 mars 2008, lequel faisait dès lors partie intégrante du contrat conclu entre les parties.

l. Pour la réalisation du projet, les personnes de contact au sein de A______ SA étaient E______ et D______.

Le recettage a été réalisé par N______. La création du "module créancier" a été dirigée par F______, qui était assisté par O______. Celle-ci a également réalisé la migration des données. Son rôle a consisté à maintenir le programme, développer certaines fonctionnalités et répondre aux questions des utilisateurs (principalement K______ et P______). Dans le courant de l'année 2009, elle est devenue cheffe de projet et s'est rendue dans les locaux de B______ SA une à deux fois par semestre (témoins K______ et O______ ; déclarations de D______).

Au sein de B______ SA, les personnes de référence étaient C______ et K______. P______, responsable comptable jusqu'en mars 2013, avait également des contacts avec A______ SA pour le "module créancier" et les questions comptables.

m. Dans un courriel adressé à A______ SA le 16 mai 2008, K______ a pris note du fait que le recettage s'était déroulé "sans trop de problèmes". Il a indiqué que B______ SA était surprise du peu de contact qu'elle avait eu avec A______ SA à propos de la mise en place des nouvelles fonctionnalités. Il souhaitait voir quelques projets de pages pour les parties les plus importantes (module créancier, nouvelle fiche client, etc.), ceci afin d'éviter de se retrouver avec une version définitive qui ne serait pas en adéquation avec l'utilisation recherchée. Il a en outre sollicité qu'un planning d'avancement des travaux lui soit communiqué.

n. Dans sa réponse du 19 mai 2008, A______ SA lui a communiqué un point de situation : le recettage était terminé; la migration des données vers 2______ était en cours et le logiciel G______ serait disponible en test à la fin du mois; le module créancier finalisé serait disponible à la mi-juin en vue d'une mise en production à la fin du mois de juin; les nouvelles fonctionnalités commenceraient l'été à venir.

o. En juin 2008, A______ SA a livré à B______ SA une version test de L______.

p. Le 19 novembre 2008, une réunion a eu lieu en présence de K______, P______ et Q______ (pour B______ SA), et de E______ et F______ (pour A______ SA).

A cette occasion, B______ SA a fait état de son inquiétude quant à l'avancement des travaux et du respect du planning. A______ SA lui a répondu que 40% des points étaient réglés et que le point qui empêchait de passer en "phase 2" était la "table facture", l'une des plus anciennes de G______. Cette table avait une partie "pourrie", mais A______ SA ne parvenait pas à déceler l'erreur. Les intervenants ont également discuté d'un certains nombres de bugs informatiques constatés par P______. Il a été prévu que la nouvelle version, qui devait tenir compte de toutes les nouvelles options installées, serait "basculée" dans la semaine.

Selon A______ SA, le 40% concernait les modifications mineures de la seconde phase du projet et correspondait à huit jours sur les 65 jours de travail budgété.

q. Au début de l'année 2009, A______ SA a livré une version de L______, que B______ SA a mise en production en mars 2009.

Selon les allégations implicites de A______ SA, cette version contenait toutes les fonctionnalités de l'offre du 12 mars 2008, soit celles de la première et de la seconde étape.

O______ a déclaré en audience du Tribunal qu'en mai 2009, le logiciel L______ était installé et fonctionnait correctement.

K______ a déclaré en audience du Tribunal que dans le courant de l'année 2008, plusieurs versions test de L______ lui avaient été remises afin que B______ SA les utilise et repère l'existence d'éventuels bugs. Pour chacune de ces versions tests, B______ SA avait relevé que de nombreux points ne fonctionnaient pas, ce qu'elle avait toujours communiqué à A______ SA. La migration sur 2______ n'était intervenue que lorsque A______ SA avait livré une version de L______ au début de l'année 2009. Toutefois, après six à huit mois de test, les employés de B______ SA s'étaient sentis obligés de mettre cette version en production et de l'utiliser même si elle n'était pas exempte de bugs ni fiable à 100%. Aucune des versions du logiciel livrées par la suite n'avait jamais été fonctionnelle et conforme aux desiderata de B______ SA. Cette dernière avait néanmoins pu continuer son activité car G______, dans sa version 1______, était intégré dans L______ et continuait de fonctionner. A______ SA, qui conteste ce dernier point, a allégué en procédure qu'une fois la version définitive de L______ mise en production, il n'était plus possible d'utiliser G______ dans sa version 1______.

K______ a également déclaré que le logiciel livré au début de l'année 2009 n'était, selon lui, pas la version définitive, car elle s'était avérée assez catastrophique. De nombreux bugs étaient liés au "module créancier". Les paiements ne passaient pas auprès de la banque qui ne reconnaissait pas certains fichiers transmis par L______.

P______ a déclaré en audience du Tribunal que A______ SA avait livré un logiciel incluant G______ et H______, soit L______, de sorte qu'il était possible de basculer les paiements fournisseurs auprès de la banque directement par le biais du logiciel. Elle n'a toutefois pas précisé quand cette livraison était intervenue. Cependant, il y avait un gros bug dans le cadre du transfert des données en comptabilité, en particulier un problème d'arrondis (écart de centimes) par rapport au total de la facture. Elle était donc contrainte de corriger ces données manuellement en passant par un fichier EXCEL généré par L______. Le nouveau logiciel lui faisait cependant gagner du temps pour son travail comptable, en ce sens qu'avec l'ancien logiciel, elle devait ressortir les données point par point sans disposer d'un fichier tampon EXCEL.

r. Par la suite, B______ SA a informé A______ SA qu'elle rencontrait de nombreux problèmes lors de l'utilisation du logiciel, et a également demandé l'intégration de nouvelles fonctionnalités au logiciel.

Entre 2009 et 2013, A______ SA a ainsi livré à B______ SA de nombreuses versions de L______, afin d'intégrer les nouveaux développements souhaités par B______ SA et de corriger les bugs que cette dernière lui signalait.

Selon A______ SA, elle a toujours résolu les problèmes qui lui ont été signalés; B______ SA le conteste.

Les échanges des parties relatifs à ce qui précède seront détaillés ci-après (cf. infra let. B).

s. Le 29 juillet 2009, une réunion a eu lieu en présence de K______ et P______ (pour B______ SA), et de D______ et E______ (pour A______ SA), afin de discuter de la suite du développement de L______ et de faire le point sur les demandes en suspens.

Selon le procès-verbal tenu par B______ SA à cette occasion, A______ SA a indiqué que le gros œuvre était fini, mais que les finitions pêchaient. Elle a relevé que certains développements étaient beaucoup plus importants que prévu, voire correspondaient à de nouvelles fonctionnalités qui ne figuraient pas dans le cahier des charges initial (par exemple l'adressage multiple et les rabais). Ces points devaient être chiffrés par A______ SA, en termes de temps de travail nécessaire, avant que B______ SA puisse se déterminer sur la suite du projet.

Selon le procès-verbal précité, D______ a indiqué que le délai fixé "fin juin 2008" n'avait pas été tenu. En audience du Tribunal, celui-ci a déclaré que la date exacte devait être fin juin 2009 et que le procès-verbal contenait vraisemblablement une coquille sur ce point.

t. Par courriel du 2 décembre 2009, P______ a reproché à A______ SA de ne pas lui avoir transmis la liste des demandes en suspens, en reprenant les divers points du contrat avec l'indication "exécutés" ou "non exécutés". En outre, alors qu'il avait été décidé de traiter le développement de la "table clients" et de la "table ______" en priorité, A______ SA ne lui avait toujours pas envoyé la liste des développements concernés, laquelle devait préciser, pour chaque modification, si celle-ci était comprise ou non dans l'offre de base.

Elle a donc demandé à A______ SA de lui faire parvenir, d'ici le 15 décembre 2009, la liste des différents points figurant au contrat - en mentionnant lesquels avaient déjà été traités et en précisant la date de réalisation des points encore en suspens -, ainsi qu'une offre portant sur le développement des fonctionnalités non comprises dans le contrat.

Selon A______ SA, la liste des points réalisés ou en suspens avaient déjà été transmise à B______ SA à plusieurs reprises.

Cette liste n'a pas été versée à la procédure.

u. Par courriel du 9 décembre 2009, D______ a reproché à K______ d'avoir effectué des modifications dans la structure de L______, en soulignant qu'avec ce type d'intervention, l'intégrité des données et de la "base" ne pouvait plus être garantie.

K______ a déclaré en audience du Tribunal que A______ SA lui avait indiqué, dès le départ et de manière générale, qu'il ne fallait pas procéder à des modifications dans le code du logiciel L______. Il avait tout de même procédé à de telles modifications à deux ou trois reprises (témoins K______ et O______).

Les modifications effectuées par K______ ont finalement été validées par A______ SA.

v. Par courriel du 15 décembre 2009, E______ a fait parvenir à K______ une nouvelle offre à discuter, ainsi qu'un point de situation de la
2ème étape.

Cette offre n'a pas été versée à la procédure.

w. Dans sa réponse du lendemain, K______ s'est dit très surpris du courriel de E______. En effet, lors des discussions entre les parties d'août 2009 - vraisemblablement en référence à la réunion du 29 juillet 2009 -,
A______ SA avait expliqué qu'elle avait sous-estimé le temps de travail nécessaire pour le développement du module comptable, ce qui était de sa responsabilité. Dans son offre initiale, elle avait prévu de passer 30% de son temps sur ce point et 70% sur le reste, mais avait finalement passé 70% de son temps sur le développement du module comptable. Or, le montant de la nouvelle offre de A______ SA équivalait presque à l'investissement initial de B______ SA. K______ et P______ allaient reprendre en détail le cahier des charges initial et la nouvelle offre et faire part de leurs remarques à A______ SA, avant d'organiser une rencontre.

x. Le 16 décembre 2009, D______ et K______ ont eu un entretien téléphonique.

Selon les allégations de B______ SA en procédure, lors de cet entretien, D______ aurait assuré pouvoir mener le projet à terme.

y. Le 9 juin 2010, A______ SA a fait parvenir à B______ SA une nouvelle offre relative au "Développement supplémentaire pour le basculement des TVA des ______ sur les TVA modifiables", chiffrée à 10'491 fr. TTC pour 6.5 jours de travail.

Sur la pièce produite en procédure, une note manuscrite indique que le montant précité doit être déduit du "pack Achat de deux pack à 30'000 fr. pour 23 jours" (cf. infra let. A.bb).

z. A la fin de l'année 2011, B______ SA a demandé à A______ SA de procéder à la migration de L______ sur 4______, avec ajout de nouvelles fonctionnalités. Les parties se sont rencontrées le 22 novembre 2011.

aa. Le 16 décembre 2011, A______ SA a fait parvenir à B______ SA une nouvelle offre intitulée "Modifications dans la base G______ (phase II)" et chiffrée à 25'920 fr. TTC pour 16 jours de travail.

Sur la pièce produite en procédure, une note manuscrite indique que le montant précité doit être déduit de l'"Offre sur les 2 nouveaux pack de jours" (cf. infra let. A.bb).

La base de données migrée sur 4______ a été mise en production en 2012.

bb. Entre avril 2008 et mars 2013, B______ SA a versé à A______ SA la somme totale de 169'620 fr., laquelle se décompose comme suit : 96'840 fr. à la signature du contrat, 32'280 fr. pour deux "packs de maintenance de 10 jours" en juin 2010, 32'400 fr. pour deux "packs de 10 jours" en février 2012 et 8'100 fr. pour un "pack de 5 jours" en mars 2013.

B. a. Entre 2008 et 2013, A______ SA a livré à B______ SA une cinquantaine de mises à jour de L______, lesquelles intégraient au fur et à mesure les modifications et corrections requises, respectivement signalées par B______ SA.

Selon B______ SA, elle devait tester chaque nouvelle version du logiciel et se débrouiller avec les moyens du bord, car A______ SA n'avait donné aucune documentation ou directive à suivre pour tester correctement le logiciel. Il y avait systématiquement des bugs qui étaient ponctuellement corrigés par A______ SA. Toutefois, certains bugs réapparaissaient pour la nouvelle version du logiciel alors qu'ils auraient dû être résolus lors de la livraison antérieure.

Selon A______ SA, avec chaque mise à jour, un courriel était adressé à K______ pour détailler le contenu des corrections et des modifications apportées, ainsi que pour expliquer les nouvelles fonctionnalités (notamment avec une capture d'écran pour servir de guide aux collaborateurs de B______ SA).

K______ a déclaré en audience du Tribunal que les collaborateurs de B______ SA avaient testé les différentes versions du logiciel remises par
A______ SA, sans que cette dernière n'ait remis de protocole de test ou de directive pour tester correctement lesdites versions. Il avait rencontré des problèmes et des bugs pour chacune des versions de L______ remises par A______ SA. De plus, comme les tests prenaient beaucoup de temps aux collaborateurs de B______ SA, il avait été impossible de tester toutes les fonctionnalités pour chaque version.

O______ a déclaré en audience du Tribunal que A______ SA avait effectué des tests internes pour chaque version du logiciel. Une fois ceux-ci terminés, la mise à jour était remise à K______ pour qu'il la teste dans l'environnement informatique de B______ SA. Le précité devait ensuite décider soit de la mettre en production, si la version lui donnait satisfaction, soit de la retourner à A______ SA pour supprimer le(s) éventuel(s) problème(s) rencontré(s). Il était rare que des anomalies subsistent dans une version livrée au client après avoir été testée à l'interne. De telles anomalies pouvaient s'expliquer par le fait que l'environnement du client n'était pas le même que celui de A______ SA ou par le fait que les données du client étaient plus récentes.

b. De nombreux bugs sont apparus avec chaque version du logiciel (cf. infra B.e et B.m), ce dont B______ SA a régulièrement informé A______ SA. Les communications entre les parties ont eu lieu par courriel et par téléphone, ainsi que lors de séances entre les parties en 2008, 2009, 2011 et 2013, à l'occasion desquelles B______ SA a fait part de son mécontentement quant à l'avancement des travaux.

c. A______ SA a listé chaque bug annoncé, sa résolution, ainsi que les améliorations sollicitées par B______ SA, dans un tableau EXCEL. En 2013, ce tableau contenait plusieurs centaines d'entrées, soit environ 600 (témoins K______, O______ et M______ ). Celui-ci n'a pas été produit en procédure.

Selon A______ SA, l'apparition de bugs était inhérente au développement de tout logiciel informatique.

O______ a déclaré en audience du Tribunal que le recours à un tableau EXCEL était une méthodologie reconnue par les informaticiens. Les bugs annoncés avaient été corrigés immédiatement, sans que ce travail n'ait été facturé à B______ SA. Le mandat effectué pour B______ SA s'était déroulé normalement et la résolution des bugs n'avait pas nécessité un travail plus important que sur d'autres mandats du même type.

K______ a déclaré en audience du Tribunal que certains bugs avaient été récurrents et qu'ils étaient réapparus d'une version du logiciel à la suivante.

d. Selon A______ SA, la partie du contrat en lien avec le recettage et la migration correspondait à 50% à 60% du contrat et celle en lien avec la comptabilité à 10%. Elle avait toutefois dû passer plus de temps sur l'aspect comptable en raison du manque de disponibilité de K______ vu son temps partiel. De plus, la majeure partie des problèmes rencontrés par B______ SA en utilisant L______ avaient été causés par B______ SA elle-même. En effet, P______ avait modifié manuellement des données avant leur transfert en comptabilité, créant ainsi des incohérences entre la base de L______ et I______ , sans en avertir A______ SA. P______ avait également sollicité le développement de certains processus informatiques qui s'étaient finalement révélés inadaptés au fonctionnement de B______ SA. K______ avait manqué de diligence dans la surveillance du travail de P______.

P______ a déclaré en audience du Tribunal que c'est A______ SA qui lui avait conseillé d'apporter des corrections manuelles sur le fichier EXCEL généré par L______ avant de le transférer en comptabilité. En effet, A______ SA n'avait pas été tout de suite en mesure de résoudre le problème d'arrondi des factures. Les corrections manuelles n'avaient pas été retranscrites dans L______. Elle n'avait pas apporté de modifications dans L______, n'ayant pas les compétences pour le faire.

O______ a déclaré en audience du Tribunal qu'elle avait expliqué à P______ qu'elle ne devait pas modifier les données extraites de L______, mais qu'elle ne se souvenait plus pour quelle raison cette dernière avait souhaité agir ainsi.

K______ a déclaré en audience du Tribunal que A______ SA n'avait pas su évaluer le volume de travail nécessaire pour réaliser le module comptable. Il a contesté que le retard pris ait été dû à un manque de disponibilité de sa part, puisqu'il était toujours atteignable sur son portable pour répondre à d'éventuelles questions. P______ n'était pas non plus responsable du retard pris, dans la mesure où le point essentiel à réaliser par A______ SA était l'intégration du "module créancier" dans le logiciel métier et que la comptable n'avait rien à voir avec cette partie du mandat.

e. Entre mars 2009 et février 2013, B______ SA a notamment annoncé à
A______ SA les bugs suivants :

1.        la "table paiement" n'avait plus de lien avec la facture. Le montant du paiement apparaissait en erreur, mais était bien imputé sur la facture (courriel de P______ du 19 mars 2009);

2.        lorsque B______ SA devait rembourser une note de crédit à un client, il n'était pas possible de les acquitter manuellement ou de modifier le solde manuellement (courriel de P______ du 1er mai 2009). K______ a déclaré en audience du Tribunal que le module "notes de crédit" n'avait jamais été opérationnel;

3.        les paiements fournisseurs ne passaient pas correctement, car la banque ne reconnaissait pas certains fichiers transmis par L______. De plus, lors d'un paiement avec BVR, le message d'erreur "pas de banque définie pour le fournisseur" apparaissait constamment (courriels de P______ des 13 et 22 mai 2009);

4.        lors du transfert de paiements de L______ vers I______, les informations y relatives changeaient de champs (courriel de P______ du 22 mai 2009) et le transfert de factures du premier logiciel vers le second ne fonctionnait pas ou rencontrait de multiples problèmes (courriels de P______ des 22 mai et 12 août 2009), en raison notamment d'un problème d'arrondis par rapport au total de la facture. Ainsi, l'addition des différents articles de ______ commandés avec TVA ne correspondait pas au total débiteur ou fournisseur.

Les problèmes liés au transfert des factures et des paiements en comptabilité ont persisté et sont réapparus à plusieurs reprises dans les échanges subséquents entre B______ SA et A______ SA (courriels de P______ des 4 janvier, 15 novembre 2010, 10 mars et 21 juin 2011);

5.        la sécurité des factures n'était plus garantie, car il était possible de modifier le prix des articles d'une facture déjà éditée (courriel de P______ du 10 juillet 2009);

6.        l'imputation des escomptes sur les factures ne fonctionnait plus avec la nouvelle version du logiciel (courriel de P______ du 22 juin 2010);

7.        la confirmation des bulletins en factures ne fonctionnait pas (courriel de R______ [employé de B______ SA] du 8 octobre 2010);

8.        l'établissement de la TVA était erroné pour certaines factures et l'impression de la facture ne reprenait pas le mode de calcul de la TVA qui était affiché à l'écran (courriels de P______ des 15 et 18 novembre 2010 et
28 octobre 2011);

9.        le paiement groupé de plusieurs factures posait problème car les informations y relatives n'étaient pas cohérentes entre les différentes tables (courriel de P______ du 10 mars 2011);

10.    le paiement par acomptes posait problème, car les paiements ne se cumulaient pas, mais s'annulaient mutuellement (courriels de P______ des
25 janvier, 17 février et 19 mars 2012);

11.    lorsque A______ SA a fusionné les fichiers fournisseurs (H______) avec les fichiers clients (G______), les données relatives aux fournisseurs ont été perdues, notamment les fiches de contact contenant les conditions de paiement desdits fournisseurs (courriels de P______ des
11 septembre et 21 novembre 2012; déclarations de C______, représentant de B______ SA).

Alors que le problème était censé avoir été corrigé, il est réapparu avec une nouvelle version du logiciel en février 2012 (courriel de P______ du 22 février 2013).

P______ a déclaré en audience du Tribunal que le problème précité avait persisté pendant plusieurs mois, ce qui l'avait contrainte, pour chaque paiement, à rechercher les données fournisseurs (p. ex. sur les factures fournisseurs) pour ensuite les ressaisir en vue de les basculer pour paiement auprès de la banque. Ces recherches avaient été très fastidieuses et chronophages, de telle sorte qu'elle avait pris du retard dans la tenue de la comptabilité de B______ SA.

O______ a déclaré en audience du Tribunal que lors de la fusion des fichiers fournisseurs et clients, les données avaient été interverties. Il n'y avait pas eu de perte de données et le problème avait tout de suite été corrigé.

f. Entre les 7 et 8 décembre 2010, P______ et O______ ont échangé des courriels concernant certains problèmes encore en suspens.

g. Par courriel du 14 décembre 2010, P______ a fait parvenir à O______ ses remarques sur les tests effectués, ainsi qu'une liste d'erreurs en lien avec la TVA, le transfert en comptabilité des frais de livraison, les rabais accordés, la répartition des factures "entre ______ (Vaud) et Genève", ainsi que les "ventes primeurs".

h. Par courriel du 6 février 2013, K______ a fait parvenir à O______ et D______ une liste des points qui posaient encore problème après la migration des données sur 4______ et la mise en place de nouvelles fonctionnalités à cette occasion.

i. A______ SA a répondu aux demandes de B______ SA par courriels des 4 juin,
11 août 2009, 7 janvier, 8 octobre, 7 décembre, 24 décembre 2010, 8 février,
11 septembre, 23 octobre 2012, 21 février et 22 février 2013. Toutefois, certains des problèmes rencontrés ont persisté.

j. Le 1er mars 2013, S______, titulaire d'un brevet de spécialiste en finances et en comptabilité, a pris ses fonctions de directrice financière de
B______ SA, en remplacement de P______.

Cette dernière a collaboré pendant un mois avec S______, afin de lui expliquer comment exporter les fichiers de L______ dans I______ et faire un état des lieux avec elle sur la façon d'utiliser les logiciels (témoin S______).

S______ a déclaré en audience du Tribunal que la passerelle entre L______ et I______ ne fonctionnait pas correctement à son arrivée. Les données exportées du premier logiciel, à raison d'une fois par semaine, n'étaient pas équilibrées une fois importées dans le second logiciel. Cela la contraignait à convertir les fichiers exportés de L______ sur un fichier EXCEL séparé, qu'elle pouvait corriger, notamment au niveau des arrondis, avant de l'importer en comptabilité.

Le logiciel n'était ni stable ni fiable, car elle n'était pas en mesure de se fier aux données exportées ni de présenter à l'administration fiscale des chiffres équilibrés d'un programme à l'autre. Par exemple, certains paiements, partiels ou complets, enregistrés dans les factures, ne l'étaient plus au niveau des rappels, de sorte que des clients se plaignaient de recevoir des rappels non justifiés; elle était alors obligée de repointer tous les paiements manuellement, de même que les éventuelles notes de crédit. De plus, les calculs de la TVA dans l'établissement des factures étaient erronés, étant précisé que deux taux de TVA étaient applicables pour l'activité de B______ SA (2.5% pour la nourriture à l'emporter et 8% pour le reste). En outre, certaines lignes se mettaient à zéro au lieu d'indiquer le bon chiffre et des factures fournisseurs libellées en euro n'apparaissaient pas dans les fichiers exportés de L______. Contrairement à P______, elle n'avait pas été confrontée à un problème d'inversion des données créanciers/débiteurs.

k. Le 8 mai 2013, une réunion a eu lieu en présence de K______, S______ et C______ (pour B______ SA), et de D______ et O______ (pour A______ SA).

Lors de cette réunion, qualifiée de "réunion de crise" par B______ SA, cette dernière a reproché à A______ SA la persistance de nombreux bugs, le manque de fiabilité du logiciel et la charge de travail supplémentaire que ces dysfonctionnements lui causaient. D______ a soumis trois propositions à B______ SA, à savoir (i) continuer à utiliser le logiciel L______, (ii) passer sur le logiciel T______, ou (iii) mettre fin au mandat de A______ SA. Cette dernière a en outre proposé que O______ passe plusieurs jours dans les locaux de B______ SA afin de l'aider à résoudre les bugs annoncés.

Selon A______ SA, c'est lors de cette réunion qu'elle s'est rendue compte du fait que P______ avait manuellement modifié les données sans l'en informer et qu'elle avait ainsi causé un manque de cohérence dans le transfert de données. En effet, vu que ces modifications n'avaient pas été directement intégrées dans la version correspondante de L______, cela avait généré les nombreux problèmes de cohérence soulevés par S______. Sur le plan informatique, le transfert des données fonctionnait parfaitement.

l. Par courriel du même jour, O______ a informé K______ qu'elle avait procédé à des vérifications et à des corrections dans la "base contacts", lesquelles devaient encore être vérifiées.

m. Il ressort de la correspondance échangée entre B______ SA et A______ SA entre mars et août 2013 qu'après avoir testé les nouvelles versions de L______ qui lui avaient été livrées, celle-là a notamment informé celle-ci des problèmes suivants :

1.        les notes de crédit n'étaient pas attribuées correctement aux factures et n'étaient pas exportables en comptabilité (courriels de S______ des 20 mars, 22 avril, 21 mai, 5 et 30 juillet 2013; courriels échangés entre S______ et O______ les 31 mai et 3 juin 2013);

2.        l'export des factures débiteur et créancier depuis L______ ne fonctionnait pas car le fait d'arrondir le montant de la facture empêchait l'import du fichier dans I______ et les montants soumis à TVA étaient soit faux soit n'apparaissaient pas (courriels de S______ des 22,
23 avril, 21 mai 2013). L'erreur se situait au niveau du module de l'établissement de la facture, ce qui posait problème lors de la réconciliation des comptes pour le décompte TVA (courriel de S______ du 24 juin 2013). A______ SA a tenté de résoudre ces problèmes, en faisant en sorte que le montant des factures soient arrondi au centime (courriel de O______ du 22 mai 2013). Cependant, le problème a persisté (courriels de S______ des 24 mai et 30 juillet 2013; courriel de K______ du 12 juin 2013; courriels échangés entre S______ et O______ le 25 juin 2013);

3.        il n'était pas possible de générer une liste des factures (débiteur ou créancier) non payées à une date donnée (courriels échangés entre S______ et O______ les 14 et 20 mars, ainsi que les 31 mai et 3 juin 2013; courriel de S______ du 21 mai 2013). Après avoir testé la dernière version du logiciel qui lui avait été livrée, S______ avait constaté que le solde des postes ouverts différait entre L______ et I______ de plus de 40'000 fr. au 31 mars, de plus de 5'000 fr. au 30 avril et de plus de 300'000 fr. au 31 mai (courriel de S______ du 13 juin 2013);

4.        lorsqu'un client s'acquittait d'une facture en plusieurs paiements, les informations ne se mettaient pas à jour dans le système. Le paiement d'un client était bien enregistré dans la facture, mais ne l'était plus au niveau des rappels. Des clients qui avaient déjà payé se plaignaient donc de recevoir un rappel injustifié (courriels de S______ des 21 mai et 5 juillet 2013; courriels échangés entre U______ et F______ les 6 et 8 août 2013).

n. S______ et O______ ont encore échangé des courriels, notamment entre les 5 et 20 août 2013, afin de faire une réconciliation des créanciers.

C. a. Par courrier du 19 août 2013, B______ SA a reproché à A______ SA de ne pas lui avoir livré le logiciel L______ dans un état achevé à la date initialement prévue, soit juin 2008. En effet, les très nombreux défauts qui affectaient le logiciel livré rendaient celui-ci inutilisable. Malgré de nombreuses sommations, A______ SA ne s'était toujours pas exécutée parfaitement. De plus, les versions intermédiaires du logiciel avaient conduit à la perte de données importantes et engendré un surcroît de travail important pour les récupérer et les transférer sur I______. A______ SA était mise en demeure de délivrer, d'ici le 15 septembre 2013, le logiciel correspondant exactement aux exigences contractuelles convenues entre les parties en novembre 2007 et en mars 2008, et purgé de ses multiples défauts.

B______ SA déclarait d'ores et déjà se départir du contrat et réclamer la restitution des prestations effectuées de part et d'autre, si A______ SA ne s'exécutait pas dans le délai imparti. Elle réclamait également la réparation de son dommage qu'elle estimait à un montant minimal de 50'000 fr.

b. Par courrier du 21 août 2013, A______ SA a répondu qu'elle considérait avoir rempli toutes ses obligations contractuelles, sous réserve de petits bugs liés à tout développement informatique et qui avaient reçu réponse. Elle a fixé à B______ SA un délai au 30 août 2013 pour lui communiquer la liste des fonctionnalités du cahier des charges qui n'auraient pas déjà été implantées, afin de pouvoir donner suite à ses doléances d'ici au 15 septembre 2013.

c. Par courrier du 3 octobre 2013, B______ SA a communiqué à A______ SA une liste de 24 défauts, précisant les avoir déjà signalés au fur et à mesure des échanges entre les parties. Considérant que A______ SA ne s'était pas exécutée dans le délai imparti au 15 septembre 2013, B______ SA a déclaré se départir du contrat et a réclamé le remboursement des 160'000 fr. déjà versés pour "l'achat du logiciel", ainsi que le versement de dommages-intérêts de 50'000 fr.

A titre transactionnel, B______ SA a proposé de soumettre le logiciel et les documents contractuels à un expert - choisi et rémunéré de manière conjointe par les parties - charge à celui-ci de vérifier la conformité du produit livré par A______ SA avec ce qui avait été commandé et, le cas échéant, de dresser la liste de défauts constatés et d'établir dans quelle mesure ces défauts affectaient le fonctionnement du logiciel.

d. Par courrier du 10 octobre 2013, A______ SA a répondu qu'elle prendrait position sur la liste des défauts allégués avant la fin du mois d'octobre, déplorant ne pas l'avoir reçue plus tôt. Elle s'est dite favorable à une solution amiable, acceptant de faire appel à un expert externe.

e.a Lors d'une réunion en mars 2014, B______ SA et A______ SA ont confié à M______ de la société V______ SARL, ingénieur en informatique, spécialisé dans le domaine du conseil en SAP (outil de gestion informatique utilisé dans les grandes entreprises), la mission de déterminer quelle était l'origine du litige entre les parties, ainsi que d'analyser et d'estimer les démarches à accomplir pour rendre l'application fonctionnelle.

e.b Le 25 juin 2014, l'expert privé a soumis une première version de son rapport aux parties afin que celles-ci se déterminent sur ses conclusions, ce qu'elles ont fait entre le 28 juillet et le 15 août 2014.

e.c Le 15 août 2014, l'expert privé a rendu son rapport final, celui-ci tenant compte ou répondant aux commentaires que les parties lui avaient transmis. Les conclusions de ce rapport sont exposées ci-après (cf. infra let. D.b).

f. En avril 2014, B______ SA a cessé d'utiliser le logiciel L______ (témoin S______).

g. Par courrier adressé à A______ SA le 9 juillet 2014, B______ SA a indiqué que le logiciel L______ était à ce point défectueux qu'elle ne pouvait pas en faire le moindre usage, ce que la première version du rapport d'expertise du
25 juin 2014 confirmait. Par conséquent, elle a répété refuser les travaux effectués par A______ SA, résoudre le contrat et réclamer la restitution du prix versé à hauteur de 160'000 fr., ainsi que le paiement de 50'000 fr. à titre de réparation du dommage subi. Sur ce dernier point, elle a allégué que son personnel avait dû effectuer des travaux supplémentaires en raison de l'impossibilité d'utiliser le logiciel.

h. Par courrier adressé à B______ SA le 2 septembre 2014, A______ SA a contesté les conclusions de l'expertise sur l'importance des défauts retenus, ainsi que les conséquences que B______ SA en tirait. Elle en voulait pour preuve que B______ SA avait utilisé L______ depuis sa création et continuait de l'utiliser, plusieurs de ses modules fonctionnant parfaitement selon elle. Elle reconnaissait cependant que certains points restaient encore à améliorer, quasiment exclusivement en lien avec le module de comptabilité. Elle précisait pouvoir supprimer tous les défauts cités par l'expert dans les plus brefs délais et estimait à cinq jours le temps de travail nécessaire pour y parvenir.

i. Par courrier du 5 septembre 2014, B______ SA a rappelé à A______ SA qu'elle s'était départie du contrat. Elle a précisé ne plus utiliser L______ et était prête à le restituer à A______ SA.

j. Par courrier du 18 septembre 2014, A______ SA a contesté la position de B______ SA et indiqué qu'elle tenait à disposition de cette dernière une version du logiciel expurgée des défauts listés dans le rapport d'expertise.

Selon les allégations de A______ SA en procédure, ces défauts avaient été résolus, comme annoncé, en cinq jours.

D. Les éléments pertinents suivants ressortent encore du dossier :

a. De l'analyse de W______

a.a En novembre 2012, lors de la révision des comptes 2011-2012, W______, expert-comptable auprès de X______ SA, l'organe de révision de B______ SA, a constaté, pour la première fois depuis 1995-1996, un retard de trois à quatre mois dans la tenue de la comptabilité de la société.

a.b B______ SA a alors demandé à W______ d'effectuer un audit comptable portant sur le transfert des données entre le logiciel métier et le logiciel comptable. En décembre 2012, P______ lui a transmis un document de trois pages listant les améliorations à effectuer dans le logiciel.

a.c En janvier 2013, W______ a effectué plusieurs tests et constaté des pertes de données sur les fichiers clients et fournisseurs. Il a également constaté que les taux TVA comportaient des erreurs. Celles-ci obligeaient la comptable à traiter manuellement les données qui n'avaient pas été importées correctement depuis le logiciel métier.

a.d En mars 2013, à l'arrivée de S______, la tenue de la comptabilité de B______ SA n'était pas à jour, ce qui a nécessité un important travail de rattrapage de sa part. Par la suite, S______ a signalé au réviseur aux comptes que des problèmes persistaient au niveau du transfert des données entre le logiciel métier et le logiciel de comptabilité.

b. Du rapport d'expertise privée

b.a Dans son rapport d'expertise privée du 15 août 2014, M______, qui a confirmé ses conclusions en audience du Tribunal, a conclu qu'au vu du nombre important de bugs signalés en production, du nombre de modules qui ne fonctionnaient pas correctement et des bugs critiques et bloquants encore ouverts au jour de l'expertise, il était très difficile de pouvoir estimer un volume de travail pour corriger les problèmes. De plus, ce dernier serait très important pour les deux parties, si elles continuaient à collaborer de la même manière. Au vu de cette situation, il doutait de la qualité de la structure des données ainsi que de la stabilité de l'application L______ pour des extensions ou des développements futurs. Selon lui, la solution consistait à modifier la méthodologie des tests et à protocoler les mises en production.

Selon ses déclarations au Tribunal, l'expert privé n'était pas en mesure de dire quel pourcentage de l'application était défectueux et quel pourcentage était fonctionnel. L'importance des bugs constatés ne permettait pas de retenir que L______ était fonctionnel dans son ensemble. En soi, le nombre de bugs n'était pas pertinent pour juger de la fonctionnalité de l'application. Ainsi, plusieurs bugs pouvaient ne pas empêcher le fonctionnement d'une application, alors qu'un seul pouvait la bloquer entièrement.

b.b Pour mener son expertise, l'expert privé a reçu la documentation contractuelle et s'est rendu dans les locaux des deux parties.

Il a constaté que le développement de L______ avait eu lieu en cinq étapes : (i) recettage : au début du mandat, A______ SA avait pris connaissance de G______ et créé un rapport listant les différentes fonctionnalités; (ii) migration vers 2______ : une analyse des tables et sous-tables avait été faite pour la migration de 1______ vers 2______ et l'application avait été mise à jour pour cette migration, cette dernière ayant eu lieu en 2009; (iii) le module créancier avait été développé selon le cahier des charges du 10 juin 2008 (ce cahier des charges n'a pas été produit en procédure); (iv) migration vers 4______ : l'application avait été mise à jour pour cette migration en décembre 2012 et mise en production; (v) fusion des clients et fournisseurs en une seule table pour en simplifier la gestion.

Trois phases du développement de L______ avaient comporté d'importantes lacunes, à savoir l'intégration et les tests de l'application (cf. infra let. D.b.c), le suivi des bugs (cf. infra let. D.b.d), ainsi que l'analyse et l'architecture de l'application (cf. infra let. D.b.e). Il a également établi une liste des bugs encore ouverts au jour de l'expertise (cf. infra let. D.b.f).

b.c De l'intégration et des tests de l'application

A______ SA n'avait pas mis en place de "tests unitaires" dans le développement de L______. Or, ces tests, qui étaient censés être effectués par et pour les développeurs, servaient un triple but : (i) identifier et corriger les erreurs rapidement; (ii) sécuriser la maintenance, en signalant les éventuelles régressions, soit les erreurs apparaissant après la modification d'une fonctionnalité; (iii) documenter le code source, car lorsque la documentation technique d'une application n'était pas à jour, cela permettait de comprendre comment certains modules ou certaines fonctions s'utilisaient.

De plus, A______ SA n'avait fourni aucune documentation concernant l'intégration et les tests de l'application, alors que B______ SA était en charge des "tests système". Ceux-ci consistaient à tester l'application de chaque version du logiciel selon le contexte des spécifications fonctionnelles ou techniques des besoins. Or, B______ SA n'avait pas les connaissances suffisantes pour mener ces tests sous sa seule responsabilité et aurait dû recevoir de A______ SA un cadre précis (structure ou méthode à utiliser pour les protocoles de test). Ce point était considéré comme critique, ce qui signifiait qu'il n'existait aucune garantie quant à la pérennité des données.

Faute d'instructions, B______ SA avait concentré ses tests sur les corrections de bugs existants ou sur les nouvelles fonctionnalités. Ces tests étaient insuffisants pour garantir un minimum d'erreurs lors de la mise en production d'une nouvelle version et ne couvraient pas les tests de régression. En 2009, lors de la mise en production de la version 2______, un grand nombre de bugs étaient apparus. A ce moment-là, A______ SA aurait dû remettre en question les méthodes de tests. Par ailleurs, une procédure de test portant sur la fusion des fournisseurs et des clients (intégration du "module créancier" au logiciel G______) aurait permis d'éviter les bugs critiques apparus, cela avant même qu'une version test soit livrée à B______ SA.

b.d Du suivi des bugs

Le suivi de bugs et des demandes de nouvelles fonctionnalités entre les deux parties s'était déroulé à distance, soit par téléphone ou par courriel, et avait été reporté dans une feuille de calcul EXCEL, numérotée de 1 à environ 600, sans que la numérotation ne soit forcément consécutive. Cette solution était inappropriée pour un travail à distance, compte tenu de l'ampleur et de la complexité du développement. En effet, elle ne permettait pas de travailler de manière collaborative ni d'offrir une vision globale et actualisée du statut de l'application sans une mise à jour fastidieuse des données.

Pourtant, des "solutions Web" adaptées au travail à distance existaient et auraient permis d'établir l'historique de chaque bug et de vérifier s'il y avait des régressions à traiter malgré les tests unitaires qui auraient dû être réalisés. Le nombre de bugs annoncés après la mise en production de L______ en 2009 illustrait l'importance des méthodes de test qui avaient fait défaut.

En se basant sur la documentation fournie, il était impossible de donner des statistiques précises sur les bugs tels que leur nombre, leur criticité ou leur délai de résolution.

b.e De l'analyse et de l'architecture de l'application

Les demandes de B______ SA (création d'un module créancier, de passerelles vers I______ et l'ajout de certaines fonctionnalités) étaient complexes et nécessitaient un certain savoir-faire quant à la modélisation des logiques métier et comptable dans la base de données. Lors de l'analyse, il était donc primordial que A______ SA récolte un maximum d'informations afin d'identifier précisément les processus et le modèle de données de B______ SA.

Or certains bugs encore ouverts au jour de l'expertise avaient généré de multiples corrections. Il en allait ainsi des problèmes récurrents d'arrondi des totaux des factures : selon la vue affichée (liste des factures, rappels, etc.), la valeur différait. Il en allait de même pour la passerelle d'export et la gestion des notes de crédit.

Ces problèmes témoignaient clairement d'une analyse insuffisante et d'un choix inapproprié lors de la phase de réalisation par A______ SA.

b.f De la liste des bugs

L'expert a écarté huit des problèmes relevés par B______ SA dans son courrier du
3 octobre 2013, mais a confirmé qu'au jour de l'expertise, 16 bugs demeuraient ouverts, exemples à l'appui. Cette liste constituait l'ensemble des problèmes qu'il avait pu constater. Ceux-ci avaient tous déjà été annoncés à A______ SA.

P______ avait fait des modifications manuelles sur certaines fonctionnalités posant problème (export des données, gestion des paiements) et ne les avait pas toutes signalées à A______ SA. Elle aurait dû réagir plus vite, comme l'avait fait S______ par la suite. Cela étant, les modifications effectuées par P______ n'avaient aucun rapport avec les bugs constatés au niveau des arrondis et de l'export des données (gestion des créanciers, paiements et exports). Il en allait de même pour les modifications apportées au logiciel par K______.

Parmi les bugs annoncés, certains avaient nécessité plusieurs semaines voire plusieurs mois avant d'être résolus. Certains des bugs encore ouverts au jour de l'expertise portaient notamment sur l'export des données, le module des paiements ou les notes de crédit. Ces bugs étaient considérés comme "bloquants", car la fonction ne marchait pas, ce qui contraignait les employés de B______ SA à exporter les données manuellement et faire un repointage en parallèle sur des fonctionnalités essentielles dans l'application. Le problème d'arrondi des factures était un bug "critique".

b.g En procédure, A______ SA, qui s'est référée aux courriers qu'elle a adressés à l'expert et à B______ SA à propos de la première version du rapport d'expertise, a contesté l'importance des défauts retenus par l'expert privé. Elle a notamment allégué que les 16 bugs relevés par l'expert ne représentaient que 4.2% de l'ensemble du projet, de sorte que 95% de la prestation fournie par A______ SA était conforme à la demande.

c. De l'analyse de Y______

c.a Parallèlement à l'expertise privée, B______ SA a demandé à Y______, comptable de formation et consultant informatique, d'effectuer une journée d'analyse portant sur L______.

c.b Par courrier du 14 février 2014, Y______ a informé B______ SA avoir constaté de nombreux dysfonctionnement qu'il qualifiait de majeurs, notamment au niveau du traitement des factures, des notes de crédits, des listes d'état et du transfert des données. L'ensemble des données comptables provenant de L______ n'était ni fiable ni conforme aux pratiques comptables. Cette application, loin d'être stabilisée, comportait trop d'erreurs de traitement, d'intégrité de données et de comportements aléatoires nécessitant des interventions manuelles correctives et chronophages.

d. Du nouveau logiciel utilisé par B______ SA

d.a En mai 2013, K______ a étudié des solutions alternatives pour le cas où la collaboration avec A______ SA ne serait plus possible. Il a notamment pris contact avec Z______ SA.

d.b Le 24 octobre 2013, B______ SA a conclu un contrat avec Z______SA, portant sur l'installation d'un logiciel général AA______. Ce logiciel englobait en une seule application, les logiciels métier, gestion et comptable, tous connectés à une seule base de données, et devait être adapté par la suite aux besoins spécifiques de B______ SA.

Les fonctionnalités supplémentaires, personnalisées à l'activité spécifique de B______ SA, ont été ajoutées sur une période d'environ six mois. La comptabilité de la société était opérationnelle sur le nouveau logiciel au début de l'année 2014.

La rémunération de Z______SA s'est élevée à 81'000 fr. TTC, que B______ SA a payée entre octobre 2013 et août 2014.

E. a. Par requête de conciliation du 18 novembre 2014, déclarée non conciliée le
2 février 2015 et introduite devant le Tribunal de première instance le 4 mai 2015, B______ SA a conclu au paiement par A______ SA de 172'041 fr. et de 124'300 fr. plus intérêts à 5% l'an dès le 1er janvier 2011, sous suite de frais et dépens.

Elle a reproché à A______ SA de lui avoir livré un logiciel inutilisable, lequel avait en outre généré un travail supplémentaire conséquent pour ses collaborateurs. A______ SA ne lui avait fourni ni directive à propos de l'intégration du logiciel et des procédures de test, ni documentation à propos du fonctionnement et des spécificités de L______. Celui-ci ne comprenait pas toutes les nouvelles fonctionnalités prévues par le contrat et A______ SA avait failli à son devoir de supprimer les nombreux bugs qui avaient sans cesse affecté l'application. Enfin, la passerelle entre L______ et I______ n'avait jamais été fiable, ce qui avait obligé le service de comptabilité de B______ SA à corriger et à repointer les données manuellement.

La somme de 172'041 fr. correspondait aux sommes versées par B______ SA en exécution du contrat entre 2008 et 2013. La somme de 124'300 fr. correspondait au travail supplémentaire effectué par les collaborateurs de B______ SA en lien avec les défauts du logiciel, ainsi qu'aux frais d'agence pour la recherche d'une nouvelle comptable. Sur ce dernier point, B______ SA a allégué que P______ avait quitté l'entreprise en 2013 en raison de la surcharge de travail et du chaos créés par l'utilisation de L______.

Elle a sollicité l'interrogatoire des parties, l'audition de plusieurs témoins, ainsi que, subsidiairement, l'établissement de deux expertises, l'une informatique et l'autre comptable.

b. Par réponse du 15 octobre 2015, A______ SA a conclu au rejet de la demande, sous suite de frais et dépens.

Elle a contesté l'existence d'un quelconque défaut affectant L______ et considéré que la version finale du logiciel n'avait pas pu être livrée par la faute de B______ SA. Subsidiairement, B______ SA n'était pas en droit de résoudre le contrat, car elle n'avait pas attendu la livraison finale du logiciel.

A l'appui de son argumentaire, elle a présenté 44 allégués de faits, ainsi qu'une réfutation des 238 allégués de la demande du 4 mai 2015.

c. Le Tribunal a tenu une audience de débats d'instruction, de débats principaux et de premières plaidoiries le 20 janvier 2016. A cette occasion, les parties ont eu l'occasion de compléter leur état de fait et de formuler des offres de preuves.

Le Tribunal a également interrogé les parties lors des audiences des 13 et 25 avril 2016 et entendu sept témoins lors des audiences des 6 juin, 12 septembre et
23 novembre 2016, ainsi que 27 février et 29 mars 2017. Les éléments découlant de l'administration des preuves ont été résumés dans la partie en fait ci-dessus
(cf. supra let. A, B, C et D) dans la mesure de leur pertinence.

d. Par courrier du 12 avril 2017, B______ SA a renoncé aux expertises initialement requises.

e. Lors de l'audience de plaidoiries finales du 12 juin 2017, les parties ont persisté dans leurs précédentes conclusions.

La cause a été gardée à juger à l'issue de l'audience.

F. Par jugement JTPI/9713/2017 du 31 juillet 2017, le Tribunal a condamné A______ SA à payer à B______ SA 169'620 fr., avec intérêts à 5% dès le 1er janvier 2011, et 26'880 fr., avec intérêt à 5% dès le 1er novembre 2013 (chiffre 1 du dispositif), mis les frais judiciaires - arrêtés à 20'550 fr. et compensés avec les avances fournies par les parties - à la charge de B______ SA à hauteur de 5'000 fr. et à celle de A______ SA à hauteur de 15'550 fr., condamné A______ SA à payer la somme de 14'950 fr. à B______ SA à titre de frais judiciaires, ordonné aux Services financiers du Pouvoir judiciaire de restituer à B______ SA 850 fr. (ch. 2), condamné A______ SA à payer 16'000 fr. TTC à B______ SA à titre de dépens (ch. 3) et débouté les parties de toutes autres conclusions (ch. 4).

Le Tribunal a qualifié l'accord conclu entre les parties de contrat d'entreprise, relevant que B______ SA ne pouvait exiger de A______ SA que la fourniture des prestations figurant dans l'offre formulée par cette dernière en mars 2008. Il a relevé l'existence d'importantes différences entre le cahier des charges établi par B______ SA, listant ce qu'elle considérait alors comme nécessaire à son activité, et l'offre formulée par A______ SA qui ne reprenait qu'une partie des fonctionnalités souhaitées. Cela étant, dans la mesure où l'offre formulée en mars 2008 avait été acceptée, après amendement, par B______ SA, celle-ci ne pouvait exiger de A______ SA que la fourniture des prestations figurant dans cette offre.

L'argument de A______ SA, selon lequel en 2013, l'ouvrage n'était pas encore livré, de sorte que B______ SA n'était pas en droit de rompre les liens contractuels au motif d'une exécution défectueuse n'était pas recevable. En effet, selon le contrat, le logiciel L______ dans sa version 2______ aurait dû être livré au plus tard à la fin de l'année 2008. Or, la livraison du logiciel et sa mise en production n'étaient intervenues qu'en 2009, au plus tard à la fin de l'année, soit plus de trois ans avant la résolution du contrat par B______ SA.

Dès lors, le litige devait s'analyser d'après les art. 367 et 368 CO. En l'occurrence, de nombreux défauts affectaient le logiciel et B______ SA les avait régulièrement signalés à A______ SA, de sorte que B______ SA avait respecté toutes les obligations qui lui incombaient.

B______ SA avait fait usage de son droit de demander la réfection de l'ouvrage. Sur une période d'environ cinq ans, A______ SA avait ainsi livré une cinquantaine de versions du logiciel afin d'intégrer notamment les réparations demandées par B______ SA. En août 2013, plusieurs des défauts mentionnés n'avaient toujours pas été corrigés. Au vu des preuves administrées, notamment de l'expertise privée mise en œuvre par les parties, le logiciel n'était ni stable ni fiable en dépit des continuelles corrections apportées par A______ SA. Il ne pouvait donc être attendu de B______ SA qu'elle conserve un tel logiciel même si certaines de ses parties étaient effectivement fonctionnelles. Dans la mesure où la réfection de l'ouvrage avait été exécutée de manière défectueuse, B______ SA était à nouveau en droit, à l'été 2013, de choisir entre la résolution du contrat et la diminution du prix de l'ouvrage. B______ SA avait donc valablement résolu le contrat.

B______ SA pouvait prétendre au remboursement de la totalité du prix versé, soit 169'620 fr., avec intérêts à 5% dès le 1er janvier 2011 (date moyenne).

Elle pouvait également prétendre au versement de dommages-intérêts, car A______ SA avait fait preuve de négligence dans la conception et la réalisation de L______. Statuant en équité, le Tribunal a retenu que le dommage subi par B______ SA pouvait être estimé à 35% du salaire de S______ sur une période de douze mois, soit 26'880 fr. (6'400 fr. x 12 mois x 35%), avec intérêt à 5% dès le 1er novembre 2013 (date moyenne). Pour le surplus, B______ SA n'avait pas prouvé les autres postes du dommage allégué.

G. a. Par acte déposé au greffe de la Cour de justice le 14 septembre 2017,
A______ SA fait appel de ce jugement, qu'elle a reçu le 2 août 2017. Elle conclut à son annulation et, cela fait, au déboutement de B______ SA des fins de sa demande, sous suite de frais et dépens. Subsidiairement, elle conclut au renvoi de la cause au Tribunal afin qu'il mette en œuvre une expertise judiciaire.

Elle présente 104 allégués de faits et produit une pièce nouvelle, soit un tableau présentant l'activité déployée par B______ SA entre 2009 et 2013 à l'aide de L______ (pièce n° 2 appelante). Dans la partie en droit de son mémoire, elle critique l'appréciation des preuves faite par le Tribunal sur douze points, lesquels se réfèrent sans renvoi explicite à certains des 104 allégués de l'appel.

b. Par réponse du 10 novembre 2017, B______ SA conclut au déboutement de A______ SA de toutes ses conclusions et à la confirmation du jugement entrepris, sous suite de frais et dépens.

Préalablement, elle conclut à l'irrecevabilité des 104 allégués de l'appel, ainsi que de la pièce n° 2 appelante.

c. Par réplique du 5 décembre 2017, A______ SA fait valoir que les faits présentés en appel avaient déjà été régulièrement allégués en première instance. De plus, la production de la pièce n° 2 appelante est devenue nécessaire au vu du jugement entrepris, car rien ne laissait présager la sévérité du résultat auquel le Tribunal est parvenu. Pour le surplus, elle persiste dans ses précédentes conclusions.

d. Par duplique du 11 janvier 2018, B______ SA persiste dans ses précédentes conclusions.

e. Les parties ont été informées de ce que la cause était gardée à juger par courrier du greffe de la Cour du 12 janvier 2018.

 

EN DROIT

1. 1.1 Le jugement querellé étant une décision finale de première instance (art. 308 al. 1 let. a CPC), rendue dans une affaire patrimoniale dont la valeur litigieuse au dernier état des conclusions était supérieure à 10'000 fr. (art. 308 al. 2 CPC), la voie de l'appel est ouverte.

1.2 Interjeté dans le délai et suivant la forme prescrits par la loi compte tenu de la notification du jugement aux parties pendant les féries estivales (art. 130, 131, 142 al. 1, 145 al. 1 let. a et 311 al. 1 CPC), l'appel est recevable.

1.3 L'autorité d'appel dispose d'un pouvoir d'examen complet de la cause
(art. 310 CPC).

2. L'appelante produit une pièce nouvelle et allègue des faits nouveaux.

2.1 Selon l'art. 317 al. 1 CPC, les faits et les moyens de preuve nouveaux ne sont pris en considération en appel que s'ils sont invoqués ou produits sans retard (let. a) et s'ils ne pouvaient pas être invoqués ou produits devant la première instance bien que la partie qui s'en prévaut ait fait preuve de diligence (let. b).

Si les moyens de preuve nouvellement offerts se rapportent à des faits survenus avant la clôture de la procédure probatoire de première instance, la question à résoudre pour déterminer si la condition de l'art. 317 al. 1 CPC est remplie consiste à savoir si le moyen de preuve n'aurait pas pu être obtenu avant la clôture des débats principaux de première instance. Il ne suffit pas que la partie intéressée l'ait obtenu ensuite, ni qu'elle affirme, sans le démontrer, qu'elle n'y a pas eu accès auparavant, ou qu'elle ne pouvait pas se rendre compte de la nécessité de le produire antérieurement (arrêt du Tribunal fédéral 5A_86/2016 du 5 septembre 2016 consid. 2.2; Jeandin, in CPC commenté, 2011, n. 8 ad art. 317 CPC).

En première instance, s'il n'y a pas eu de second échange d'écritures ni de débats d'instruction, les faits et moyens de preuves nouveaux sont admis à l'ouverture des débats principaux (art. 229 al. 2 CPC).

2.2 En l'espèce, l'appelante produit une pièce nouvelle et, sur cette base, allègue pour la première en fois en appel l'activité que l'intimée a déployée entre 2009 et mi-juin 2013 grâce au logiciel L______. Or, elle ne démontre ni ne prétend avoir été empêchée de produire ce moyen de preuve, respectivement d'alléguer les faits y relatifs en première instance. Le seul fait que le Tribunal ait fait preuve, selon elle, de sévérité dans le jugement entrepris est sans pertinence à cet égard. Partant, la pièce nouvelle et les faits y relatifs sont irrecevables.

De plus, l'état de fait de l'appel comporte 104 allégués, alors que celui présenté par l'appelante en première instance en comprenait 44. Ce nouvel état de fait reprend en grande partie les faits retenus par le Tribunal dans le jugement querellé, de sorte que les faits allégués par l'appelante en appel sont recevables dans cette mesure, que l'appelante les ait déjà allégués ou non en première instance. Cependant, l'appelante, qui se plaint d'une constatation inexacte des faits, critique l'appréciation des preuves faite par le Tribunal sur douze points qu'elle présente dans la partie en droit de son mémoire d'appel. Ces points constituent chacun un résumé de plusieurs allégués de fait de l'appel, auxquels ils renvoient implicitement. Or, dans lesdits allégués, l'appelante, qui offre une appréciation des preuves divergente de celle du Tribunal, apporte parfois des précisions factuelles qu'elle n'a offertes ni dans sa réponse du 15 octobre 2015 ni lors de l'audience de débats d'instruction du 20 janvier 2016. Ce faisant, elle présente des faits qui sont antérieurs à la clôture de la procédure probatoire de première instance et qu'elle aurait dû introduire en première instance déjà. Peu importe que ces faits ressortent ou non de l'administration des preuves. Dans la mesure où l'appelante ne précise pas quels faits sont nouveaux et ne démontre pas avoir été empêchée de les alléguer en première instance, ils seront globalement déclarés irrecevables.

Cela étant, les critiques de l'appelante à propos de l'appréciation des preuves par le Tribunal ont été directement intégrées, dans la mesure de leur bien-fondé, dans la partie en fait ci-dessus.

3. L'appelante fait grief au Tribunal de ne pas avoir mis en œuvre une expertise judiciaire. Subsidiairement, elle reproche au Tribunal de ne pas l'avoir interpelée sur la possibilité d'en solliciter une, car elle n'était plus représentée par un avocat lorsque l'intimée a renoncé aux expertises judiciaires que cette dernière avait initialement sollicitées.

3.1.1 Le tribunal peut, à la demande d'une partie ou d'office, demander une expertise à un ou plusieurs experts (art. 183 al. 1 CPC).

Même en l'absence d'une disposition légale spéciale, une expertise est imposée par l'art. 8 CC, lorsque le juge n'est pas à même de résoudre, à la lumière de ses propres connaissances, la question qui lui est soumise (ATF 117 II 231 consid. 2b; arrêt du Tribunal fédéral 4A_146/2015 du 19 août 2015 consid. 4.2).

En tant que règle sur la répartition du fardeau de la preuve, l'art. 8 CC détermine laquelle des parties doit assumer les conséquences de l'échec de la preuve d'un fait pertinent. Lorsque le juge ne parvient pas à constater un fait dont dépend le droit litigieux, il doit alors statuer au détriment de la partie qui aurait dû prouver ce fait. En revanche, lorsque tous les faits pertinents sont prouvés, il n'y a pas échec de la preuve, si bien que la question de la répartition du fardeau de la preuve (art. 8 CC) ne se pose pas. En effet, lorsque le juge constate qu'un fait s'est produit ou ne s'est pas produit, il a atteint un résultat. Le fardeau de la preuve, en tant que règle légale, n'intervient que lorsque le juge ne parvient pas à une conviction, n'est pas à même de déterminer si le fait s'est produit ou non (arrêt du Tribunal fédéral 4A_566/2015 du 8 février 2016 consid. 4.1.3 et les références citées).

En procédure civile, l'expertise privée se comprend comme l'expertise qui n'a pas été mise en œuvre par le Tribunal, mais par une ou plusieurs parties (Rüetschi, in Schweizerische Zivilprozessordnung, Band II, 2012, n. 34 ad art. 183 CPC). Elle n'est pas réglée par le CPC et ne constitue pas un moyen de preuve au sens de l'art. 168 al. 1 CPC, mais de simples allégations de parties (ATF 141 III 433 consid. 2.6 in SJ 2016 I 162; 132 III 83 consid. 3.5 in SJ 2006 I 233).

Lorsqu'un témoin possède des connaissances spéciales, le tribunal peut également l'interroger aux fins d'apprécier les faits de la cause (témoignage-expertise,
art. 175 CPC).

Le témoignage est un moyen de preuve (art. 168 al. 1 let. a CPC).

3.1.2 Le tribunal interpelle les parties lorsque leurs actes ou déclarations sont peu clairs, contradictoires, imprécis ou manifestement incomplets et leur donne l'occasion de les clarifier et de les compléter (art. 56 CPC).

Il n'y a pas de devoir d'interpellation du juge lorsqu'une partie n'offre simplement aucune preuve à l'appui d'un allégué important. L'appréciation de la force probante d'un moyen de preuve offert relève de l'appréciation des preuves et ne peut dès lors pas être l'objet du devoir d'interpellation du juge. Une partie ne peut pas non plus déduire du résultat défavorable pour elle de l'administration d'une preuve que sa présentation aurait été défectueuse au sens de l'art. 56 CPC et qu'en conséquence, le juge aurait dû exercer son devoir d'interpellation (arrêt du Tribunal fédéral 4A_444/2013 du 5 février 2014 consid. 6.3.3).

3.2 En l'espèce, l'expertise diligentée par M______ est une expertise privée, laquelle ne revêt la qualité que de simples allégations de parties.

Cela étant, elle n'a pas été requise unilatéralement, mais conjointement par les parties, lesquelles ont pu formuler leurs remarques sur le projet de rapport avant la reddition du rapport final. De plus, son auteur a confirmé le rapport d'expertise lors de son audition par le Tribunal et son témoignage constitue un moyen de preuve. Pour ces motifs, ainsi que ceux exposés ci-après (cf. infra consid. 4), la Cour estime que les moyens de preuve à disposition sont suffisants pour statuer sur les prétentions de l'intimée.

Au surplus, une expertise judiciaire n'apporterait aucun éclairage supplémentaire et utile à la résolution du litige.

En effet, l'appelante soutient qu'une telle expertise serait nécessaire pour déterminer si, selon ses termes, les quelques bugs décelés par l'expert privé empêchaient le fonctionnement du logiciel. Elle justifie sa thèse en arguant que les bugs précités ne représentent que 4.2% de l'ensemble du projet et que, par conséquent, 95% de la prestation qu'elle a fournie était conforme au contrat conclu avec l'intimée.

Or, l'expert privé a estimé qu'au vu des éléments à sa disposition, il n'était pas en mesure d'établir de statistiques précises à propos du nombre, de la criticité et du délai de résolution des bugs signalés à l'appelante, ni d'indiquer quel pourcentage de l'application était défectueux et quel pourcentage était fonctionnel. Il a fondé cette appréciation sur des éléments qui n'ont pas été produits en procédure, soit notamment le fichier EXCEL dans lequel l'appelante listait les bugs signalés par l'intimée, ainsi que les nouvelles fonctionnalités demandées par cette dernière.

Dès lors, on ne discerne pas comment un expert judiciaire pourrait donner une opinion fondée sur la question que l'appelante souhaite lui soumettre, sans avoir accès à un élément aussi essentiel que celui mentionné ci-avant. A cet égard, il est relevé que l'appelante ne saurait, par le biais d'une expertise judiciaire, faire verser à la procédure des moyens de preuve qu'elle n'aurait pas produits en temps utile.

Enfin, le devoir d'interpellation du juge n'est d'aucun secours pour l'appelante, puisque le résultat défavorable (pour elle) de l'administration des preuves en première instance ne constitue pas un cas d'application de l'art. 56 CPC.

Partant, le grief est infondé.

4. L'appelante reproche au Tribunal d'avoir retenu que l'intimée avait valablement résolu le contrat. Elle estime avoir effectué le recettage et la migration des données sur 2______ avec succès et que la rémunération y relative lui était, en toute hypothèse, acquise. De plus, les bugs signalés par l'intimée ne lui étaient pas imputables ou étaient mineurs et, partant, donnaient tout au plus le droit à cette dernière de demander une diminution du prix à hauteur de 7'500 fr., mais pas de résoudre le contrat.

4.1.1 Celui qui, sur commande et à titre onéreux, développe un logiciel individualisé en fonction des besoins spécifiques de l'utilisateur est soumis aux règles ordinaires du droit du contrat d'entreprise. Le résultat promis en vertu du contrat consiste alors en la livraison d'un résultat immatériel comme une application informatique pour autant que celle-ci jouisse d'un certain degré d'individualisation (arrêts du Tribunal fédéral 4A_265/2008 du 26 août 2008 consid. 2.2; 4C.393/2006 du 27 avril 2007 consid. 3.1; Jaccard/ Robert, Les contrat informatiques, in Pichonnaz/Werro (éd.), La pratique contractuelle : actualité et perspectives, 2009, p. 100).

Le contrat d'entreprise est un contrat par lequel une des parties (l'entrepreneur) s'oblige à exécuter un ouvrage moyennant un prix que l'autre partie (le maître) s'engage à lui payer (art. 363 CO).

4.1.2 Après la livraison de l'ouvrage, le maître doit vérifier l'état de l'ouvrage aussitôt qu'il le peut d'après la marche habituelle des affaires, et en signaler les défauts à l'entrepreneur, s'il y a lieu (art. 367 al. 1 CO).

La livraison de l'ouvrage suppose un ouvrage terminé. Il faut donc que tous les travaux prévus dans le contrat aient été exécutés. Il y a livraison même lorsque l'ouvrage ne correspond pas totalement aux exigences contractuelles. Sauf convention contraire, le moment de la livraison est déterminé par l'entrepreneur. La livraison a lieu par la remise de l'ouvrage au maître. Lorsque l'ouvrage est immatériel et dans la mesure où la nature de l'ouvrage le permet, la livraison peut avoir lieu en transférant le résultat du travail directement sur un support appartenant au maître (arrêt du Tribunal fédéral 4A_265/2008 du 26 août 2008 consid. 2.2; Chaix, in Commentaire romand, CO I, 2ème éd., 2012, n. 4 ss ad
art. 367 CO; Gauch/ Carron, Le contrat d'entreprise, 1999, n. 90).

La durée de vérification peut aller de quelques minutes pour un ouvrage simple, à plusieurs jours pour des ouvrages particulièrement importants ou complexes. Cela vaut d'autant plus si le maître n'est pas un spécialiste expérimenté du domaine concerné. Lors de la livraison d'un système informatique, il faut attendre que soient réglées toutes les questions importantes de mises au point, ce qui peut prendre plusieurs mois. La manière, l'étendue et la méthode de vérification sont déterminés d'après la nature de l'ouvrage et les circonstances du cas d'espèce (Chaix, op. cit., n. 10, 12 et 13 ad art. 367 CO).

L'avis des défauts doit indiquer clairement les défauts incriminés pour permettre à l'entrepreneur de saisir la nature et l'étendue du défaut. En tant que partie non expérimentée, le maître n'a pas à se prononcer sur l'origine des défauts. L'avis des défauts n'est soumis à aucune forme particulière. Les moyens de communication de l'avis ne sont pas définis par la loi. Ils sont tous admissibles (téléphone, courrier électronique, etc.) et dépendent essentiellement de la nature de l'ouvrage (Chaix, op. cit., n. 27, 28 et 29 ad art. 367 CO).

C'est au maître, qui entend déduire des droits en garantie, qu'il appartient d'établir qu'il a donné l'avis des défauts et qu'il l'a fait en temps utile (Chaix, op. cit., n. 33 ad art. 367 CO).

4.1.3 Conformément à l'art. 368 CO, lorsque l'ouvrage est si défectueux ou si peu conforme à la convention que le maître ne puisse en faire usage, ou être équitablement contraint de l'accepter, le maître a le droit de le refuser et si, l'entrepreneur est en faute, de demander des dommages-intérêts (al. 1). Lorsque les défauts de l'ouvrage ou les infractions au contrat sont de moindre importance, le maître peut réduire le prix en proportion de la moins-value ou obliger l'entrepreneur à réparer l'ouvrage à ses frais si la réfection est possible sans dépenses excessives; le maître a, de plus, le droit de demander des dommages et intérêts lorsque l'entrepreneur est en faute (al. 2).

En matière de garantie des défauts, le maître a dès lors le droit alternativement de demander la résolution du contrat, la diminution du prix ou encore la réfection de l'ouvrage. L'acte par lequel le maître choisit le droit qu'il entend exercer est un acte formateur, en principe irrévocable. Une fois communiqué à l'entrepreneur, ce choix est ainsi définitif et éteint les autres (arrêt du Tribunal fédéral 4C.130/2006 consid. 6.1; Chaix, op. cit., n. 4 ad art. 368 CO; Gauch/ Carron, op. cit., n. 1487 s. et 1835 s.).

Un droit formateur ne peut être exercé que par celui auquel il appartient; le juge ne peut en principe pas suppléer une volonté qui n'a pas été manifestée (ATF 135 III 441 consid. 3.3).

Si la réfection choisie par le maître est elle-même exécutée de manière défectueuse, le choix offert par l'art. 368 CO renaît, et comprend également l'action rédhibitoire (résolution du contrat), respectivement minutoire (diminution du prix; ATF 109 II 40; Gauch/ Carron, op. cit., n. 1846).

4.1.4 L'entrepreneur a l'obligation de livrer un ouvrage exempt de défauts. Toute différence entre ce que l'ouvrage est réellement, d'une part, et ce qu'il devrait être selon l'attente des parties, d'autre part, est un défaut. Ainsi, l'ouvrage est défectueux lorsqu'il diverge du contrat, ne possède pas les qualités promises ou les qualités auxquelles le maître pouvait s'attendre d'après les règles de la bonne foi (arrêts du Tribunal fédéral 4A_65/2012 du 21 mai 2012 consid. 12.3; 4C.347/2005 du 13 février 2006 consid. 2; Chaix, op. cit., n. 6 ad art. 368 CO; Gauch/Carron, op. cit., n. 1356 ss).

En matière informatique, il est admis qu'aucun logiciel ne peut être totalement exempt de pannes ou d'autres dysfonctionnements; le 0% d'erreurs est un objectif considéré comme inatteignable. La présence d'une erreur ou bug, au sens où l'informatique l'entend, ne signifie pas toujours que l'on se trouve en présence d'un défaut au sens du droit du contrat d'entreprise. Au contraire, il s'agit de savoir si le logiciel qui a été exécuté présente les qualités convenues ou attendues selon le contrat du cas d'espèce ou s'il diffère de l'état qu'il doit présenter en vertu du contrat. La question doit être examinée in concreto. Il se peut que du point de vue de l'utilité attendue, le maître doive considérer un certain pourcentage de dérangements comme conforme au contrat (Jaccard/ Robert, op. cit., p. 109; Gauch/ Carron, op. cit., n. 1475).

La résolution du contrat selon l'art. 368 al. 1 CO suppose que l'ouvrage est si défectueux ou si peu conforme à la convention que le maître ne peut en faire usage, ou être équitablement contraint de l'accepter. Les termes de la loi indiquent qu'il s'agit de situations extrêmes dues à la présence de défauts graves, ou rédhibitoires. Le critère essentiel réside dans le fait qu'on ne peut plus raisonnablement attendre du maître qu'il accepte l'ouvrage livré. L'impossibilité d'utiliser l'ouvrage n'en est qu'une illustration (Chaix, op. cit., n. 13 ad
art. 368 CO).

Déterminer si l'on peut raisonnablement attendre du maître une acceptation de l'ouvrage constitue une question d'appréciation que le juge tranchera selon les règles du droit et de l'équité (art. 4 CC; Chaix, op. cit., n. 14 ad art. 368 CO).

Les circonstances pouvant permettre au maître de refuser l'ouvrage sont notamment les suivantes : l'entrepreneur est responsable de manière grossièrement fautive du défaut, la suppression du défaut ne présente aucun intérêt pour le maître, notamment parce que celle-ci prendrait trop de temps, et l'entrepreneur exécute mal la réparation de l'ouvrage (Chaix, op. cit., n. 15 ad art. 368 CO).

Les circonstances pouvant empêcher le maître de refuser l'ouvrage sont les suivantes : le maître porte une part de responsabilité dans la survenance du défaut, le défaut peut être aisément supprimé et la résolution a des conséquences qui apparaissent trop sévères pour l'entrepreneur en regard des avantages que le maître en retire (Chaix, op. cit., n. 16 ad art. 368 CO).

4.1.5 En cas de résolution justifiée du contrat, les sommes versées à l'entrepreneur doivent être restituées au maître avec l'intérêt légal (art. 208 al. 2 CO in initio par analogie), compté dès la date d'encaissement, tandis que l'ouvrage est restitué à l'entrepreneur avec les profits que le maître en a retirés (art. 208 al. 1 CO par analogie; Chaix, op. cit., n. 25 ad art. 368 CO).

4.1.6 La survenance d'un dommage consécutif au défaut ne suffit pas, selon
l'art. 368 al. 1 CO, à fonder la responsabilité de l'entrepreneur; ainsi, selon cette disposition, l'entrepreneur n'est tenu d'indemniser le maître que si le caractère défectueux de l'ouvrage livré lui est imputable à faute. Le droit du maître à la réparation du dommage consécutif au défaut suppose que le caractère défectueux de l'ouvrage puisse être reproché à l'entrepreneur parce qu'il a agi soit intentionnellement soit par négligence, en ne faisant pas preuve de la diligence requise (art. 364 al. 1 CO) (Gauch/Carron, op. cit., n. 1897 ss).

4.1.7 Dans un procès soumis à la maxime des débats, il incombe aux parties d'alléguer et de prouver les faits justifiant leurs conclusions, afin d'emporter la pleine conviction du tribunal (arrêts du Tribunal fédéral 4A_504/2015 du
28 janvier 2016 consid. 2.4; 5A_561/2011 du 19 mars 2012 consid. 12.1 non publié in ATF 138 III 289).

Dans ce cadre, le défendeur porte la responsabilité de contester les faits allégués par le demandeur. Ses contestations doivent être formulées de manière suffisamment concrète pour que l'on puisse déterminer quels allégués particuliers du demandeur sont ainsi contestés. Des contestations en bloc ne suffisent pas (ATF 141 III 433 consid. 2.6 in SJ 2016 I 162).

Dans la mesure où des allégations motivées d'une partie, reposant sur une expertise privée, sont contestées par la partie adverse de manière motivée - et non seulement en bloc -, les expertises privées, qui sont de pures allégations, ne permettent pas à elles seules de les prouver. A titre d'allégués de partie, elles peuvent éventuellement être considérées comme prouvées, lorsqu'elles sont présentées en combinaison avec des indices démontrés par des moyens de preuve (ATF 141 III 433 précité; 132 III 83 consid. 3.5 in SJ 2006 I 233).

4.2.1 En l'espèce, l'appelante s'est obligée, à la demande de l'intimée et contre rémunération, (i) à effectuer un recettage du logiciel G______, (ii) à migrer la base de données du logiciel G______, laquelle était gérée au moyen du logiciel 1______, sur 2______, puis sur 4______, (iii) à créer dans le logiciel G______ un module dit "créancier", lequel devait à terme fusionner en une seule table les données fournisseurs et clients de l'intimée, (iv) à créer une passerelle entre G______ et I______ et (v) à ajouter de nouvelles fonctionnalités à G______, renommé L______.

Le Tribunal a qualifié cet accord de contrat d'entreprise, qualification sur laquelle les parties s'accordent.

Contrairement à ce que le Tribunal a retenu, les prestations que l'appelante s'est engagée à effectuer ne découlent pas uniquement de l'offre du 12 mars 2008, puisque les parties ont complété le contrat au cours du développement de L______. Les obligations de l'appelante ont ainsi été formalisées par trois offres, soit celles des 12 mars 2008, 9 juin 2010 et 16 décembre 2011, ainsi que par le courriel de B______ SA du 26 mars 2008, lequel a été joint à l'offre du
12 mars 2008 lors de sa signature par les parties le 31 mars 2008.

4.2.2 Il ressort du dossier que l'appelante a livré les différentes prestations prévues par le contrat par étapes successives sur une période de plus de cinq ans.

Selon son courriel du 19 mai 2008, l'appelante a terminé le recettage au plus tard le 19 mai 2008.

L'appelante a livré à l'intimée une première version test de L______ aux alentours de juin 2008, ce qui supposait que la migration des données sur 2______ avait été finalisée. Ceci est d'ailleurs cohérent avec l'annonce du courriel précité du 19 mai 2008, selon laquelle la migration des données serait finalisée d'ici la fin du mois de mai 2008.

Cette première version test de L______ intégrait le module "créancier". D'une part, il ne ressort pas de la correspondance échangée entre les parties à l'époque que l'appelante n'aurait pas respecté le délai prévu par l'offre du 12 mars 2008 sur ce point. D'autre part, alors que l'appelante allègue avoir rempli tous ses devoirs contractuels, il ressort de l'expertise privée, dont les conclusions ont été confirmées par l'expert lors de son audition par le Tribunal en qualité de témoin, que l'appelante avait développé le module "créancier" conformément à un cahier des charges daté du 10 juin 2008, lequel n'a toutefois pas été produit en procédure.

Pendant le reste de l'année 2008, l'appelante a développé certaines fonctionnalités souhaitées par l'intimée, les intégrant dans L______ afin que le logiciel soit testé dans l'environnement de l'intimée, comme en atteste la réunion des parties le 19 novembre 2008. À l'époque de ladite réunion, l'appelante était censée avoir entamé la seconde phase de l'offre du 12 mars 2008, ce que les difficultés rencontrées avec la table "facture" de L______ l'empêchaient de faire.

Alors que l'appelante devait livrer une version de L______ susceptible d'être mise en production d'ici la fin de l'année 2008, elle ne l'a livrée qu'au début de l'année 2009; l'intimée l'a mise en production en mars 2009. Les fonctionnalités que l'appelante avait intégrées dans ladite version du logiciel ne ressortent pas du dossier.

En réalité, les deux phases de l'offre du 12 mars 2008, qui, en mars 2009, étaient terminées, n'avaient été qu'une première étape dans le développement de L______. En effet, par la suite, l'appelante a ajouté, à la demande de l'intimée, de nouvelles fonctionnalités au logiciel litigieux. Il ne ressort toutefois pas précisément de la procédure quelles fonctionnalités ont été ajoutée ni à quelle date. En outre, au vu de la correspondance échangée entre les parties, l'appelante a fusionné les fichiers fournisseurs de H______ avec les fichiers clients de L______ à un moment indéterminé dans le courant de l'année 2012. Cette même année, elle a également migré les données de L______ sur la version 4______.

Entre 2008 et 2013, l'appelante a livré une cinquantaine de versions de L______. L'intimée les a testées et en a mis certaines en production. La date exacte de la livraison finale du logiciel ne ressort pas du dossier. Cependant, lors de la réunion du 29 juillet 2009, l'appelante avait indiqué que le gros œuvre était fini et qu'il ne restait plus qu'à terminer certaines finitions. Compte tenu de ce qui précède et au vu des propos échangés entre les parties lors de la réunion du 8 mai 2013, il peut être déduit que la version finale du logiciel avait été livrée peu avant la réunion précitée. En toute hypothèse, l'appelante n'a pas allégué ni a fortiori démontré quelles fonctionnalités elle aurait encore dû intégrer dans le logiciel.

4.2.3 Dès la livraison de la première version du logiciel en juin 2008, l'intimée a signalé à l'appelante l'existence de nombreux problèmes ou bugs qui affectaient ledit logiciel. Les versions successives du logiciel intégraient tant les corrections des bugs signalés que les nouvelles fonctionnalités demandées par l'intimée. La question de savoir si ces fonctionnalités figuraient toutes dans la documentation contractuelle signée par les parties le 31 mars 2008 peut demeurer ouverte. D'une part, les parties ont convenu d'adapter le contrat pendant le développement de L______. D'autre part, les défauts affectant le logiciel litigieux et qui seront retenus comme problématiques dans le cas d'espèce concernent des spécificités qui étaient comprises dans le contrat dès le début.

Il ressort notamment des témoignages de K______ et de P______, ainsi que des courriels échangés entre les parties entre 2009 et 2013 que le montant total des factures avait un problème d'arrondi, et que les données extraites de L______ ne pouvaient pas être transférées automatiquement dans I______. Or, l'expert privé, entendu comme témoin, confirmant en cela son rapport, a relevé l'existence des défauts précités, estimant que le premier ne permettait pas de garantir la pérennité des données (bug critique) et que le second obligeait l'intimée à exporter les données manuellement, tout en faisant un repointage en parallèle sur des fonctionnalités essentielles dans l'application (bug bloquant). Sur ces points, l'appelante s'est contentée de contester en bloc l'expertise privée, mais n'a pas démontré précisément en quoi les conclusions de l'expert privé auraient été infondées. L'existence des problèmes précités a également été corroborée par le témoignage de W______, employé de l'organe de révision de l'intimée, ainsi que par celui de Y______, expert mandaté par la seule intimée.

L'intimée a dûment informé l'appelante de l'existence de ces défauts, ainsi que cela ressort des nombreux courriels échangés entre les parties à partir de 2009. L'appelante conteste en vain que les courriels reçus de l'intimée puissent être des avis des défauts au sens de l'art. 367 CO, arguant que le nombre et la nature des échanges avec l'intimée étaient parfaitement normaux pour le développement d'un logiciel de ce type. Cependant, il ressort desdits échanges que l'intimée s'est plainte à plusieurs reprises de la persistance de certains bugs et du manque de fiabilité du logiciel, et qu'au contraire, l'appelante avait conscience que le mécontentement de l'intimée n'était pas usuel, puisque lors de la réunion du
8 mai 2013, elle avait été jusqu'à proposer à l'intimée d'abandonner L______ au profit d'un autre logiciel ou de mettre fin au contrat qui liait les parties.

Jusqu'en août 2013, l'intimée a demandé à l'appelante de réparer les défauts qu'elle lui avait communiqués. Cependant, malgré les réfections effectuées par l'appelante, certains défauts ont perduré. Il en allait notamment ainsi du problème d'arrondi des factures, ainsi que de l'export des données en comptabilité. Au vu de la réfection défectueuse de l'appelante, l'intimée avait ainsi à nouveau le droit de choisir parmi les possibilités que lui offrait l'art. 368 CO.

Dans son courrier du 19 août 2013, l'intimée a déclaré choisir l'action rédhibitoire si l'appelante ne fournissait pas le logiciel purgé de ses nombreux défauts d'ici au 15 septembre 2013. Elle a encore confirmé ce choix dans ses courriers des
3 octobre 2013 et 9 juillet 2014.

Les défauts litigieux sont graves, puisqu'ils rendent inopérante la passerelle entre L______ et I______, laquelle était l'une des qualités essentielles que l'intimée attendait du développement de L______. Dans ces circonstances, il ne pouvait être équitablement attendu de l'intimée qu'elle accepte le logiciel livré par l'appelante.

Cette dernière soutient qu'au contraire, la passerelle était parfaitement fonctionnelle. Elle ne démontre toutefois pas en quoi le témoin et expert privé M______ aurait erré, lorsqu'il a constaté que tel n'était pas le cas. L'appelante tente en vain de minimiser l'importance des défauts litigieux, en rappelant que le 0% de bugs est un objectif irréaliste lors du développement d'un logiciel et que 95% de L______ était fonctionnel. Ces arguments tombent à faux, car le témoin M______ a expliqué de manière convaincante et sans que l'appelante le contredise de manière fondée que le nombre de bugs n'était pas pertinent pour juger de la fonctionnalité d'une application.

L'appelante ne saurait être suivie lorsqu'elle soutient que l'intimée serait responsable, à tout le moins partiellement, des défauts affectant le logiciel. Premièrement, contrairement à ce que l'appelante a soutenu pour la première fois en procédure, aucun élément du dossier ne permet de retenir qu'à l'époque du développement de L______, K______ n'aurait pas été suffisamment disponible pour assurer le suivi de ce projet. En tous les cas, l'appelante ne s'en est pas plainte à l'époque. Deuxièmement, si K______ a modifié le code du logiciel de son propre chef, il ressort de l'expertise privée que l'appelante a ultérieurement validé les modifications en question et qu'en toute hypothèse, celles-ci ne sont pas susceptibles d'avoir causé les bugs relatifs au problème d'arrondis et à l'export des données; l'appelante n'a pas contesté l'expertise sur ces points. Troisièmement, les modifications manuelles que P______ a apportées sur certaines fonctionnalités étaient également sans rapport avec les défauts précités; à nouveau, l'appelante n'a pas contesté l'expertise sur ce point.

Contrairement à ce que l'appelante tente de soutenir, la suppression des défauts n'est pas aisée, preuve en est qu'elle a déjà tenté d'y remédier à plusieurs reprises mais sans succès. De plus, l'expert, entendu comme témoin, a confirmé les conclusions de son rapport selon lesquelles le travail nécessaire pour purger le logiciel de ses défauts serait très important pour les deux parties, si elles continuaient à collaborer de la même manière. Or, l'appelante n'apporte aucun élément qui contredirait cette conclusion et, en particulier, ne prouve pas son allégation selon laquelle elle aurait supprimé en cinq jours de travail à peine les défauts identifiés par l'expert privé.

L'appelante soutient pour la première fois en appel que la résolution du contrat aurait des conséquences trop sévères pour elle. Elle soutient également que l'intimée aurait choisi l'action rédhibitoire, car cette dernière aurait fini d'amortir le logiciel G______ et chercherait à lui faire supporter les frais d'acquisition du nouveau logiciel AA______. Ces arguments sont infondés, aucun élément du dossier ne permettant de corroborer les allégations de l'appelante.

Partant, c'est à juste titre que le Tribunal a considéré que l'intimée était en droit de résoudre le contrat en application de l'art. 368 CO.

4.2.4 L'indemnisation due à l'intimée correspond au prix de l'ouvrage versé à l'appelante, soit 169'620 fr., avec intérêts à 5% l'an dès le 1er janvier 2011 (date moyenne), pour un ouvrage inutilisable.

Il n'y a pas lieu d'ordonner à l'intimée de restituer les profits qu'elle aurait éventuellement pu retirer de l'ouvrage (art. 208 al. 1 CO par analogie). En effet, l'appelante n'a pas chiffré la valeur économique que représente l'utilisation que l'intimée a pu faire du logiciel pendant le développement de celui-ci. De plus, l'appelante, qui soutient avoir droit, à tout le moins, à la rémunération relative au recettage et à la migration des données sur 2______, n'a pas non plus allégué, ni a fortiori démontré, quels profits l'intimée aurait pu retirer desdites prestations. En particulier, l'appelante ne prétend pas que ces prestations auraient d'une manière ou d'une autre bénéficié à Z______SA lorsque celle-ci a installé le nouveau logiciel AA______ chez l'intimée entre octobre 2013 et août 2014.

En tout état, les différentes étapes de réalisation du développement du logiciel font partie d'un seul et même contrat, de sorte que la résolution du contrat se répercute également sur les étapes du recettage et de la migration des données, sans que ceux-ci ne puissent avoir une quelconque valeur indépendante du reste.

Pour le surplus, l'appelante ne critique ni le principe ni le montant du dommage supplémentaire subi par l'intimée et arrêté par le Tribunal à hauteur de 26'880 fr. avec intérêt à 5% l'an dès le 1er novembre 2013 (date moyenne).

Partant, le chiffre 1 du dispositif du jugement entrepris sera confirmé.

5. Les frais judiciaires d'appel, arrêtés à 7'860 fr. (art. 17 et 35 RTFMC), seront mis à la charge de l'appelante qui succombe (art. 106 al. 1 CPC) et compensés avec l'avance de frais de même montant fournie par l'appelante, qui reste acquise à l'Etat (art. 111 al. 1 CPC).

L'appelante sera condamnée à verser à l'intimée des dépens d'appel, arrêtés au montant arrondi de 8'000 fr., débours et TVA compris (art. 84, 85 et 90 RTFMC; art. 23 al. 1 LaCC).

* * * * *

PAR CES MOTIFS,
La Chambre civile :

A la forme :

Déclare recevable l'appel interjeté par A______ SA le 14 septembre 2017 contre le jugement JTPI/9713/2017 rendu le 31 juillet 2017 par le Tribunal de première instance dans la cause C/23445/2014-13.

Au fond :

Confirme ce jugement.

Déboute les parties de toutes autres conclusions.

Sur les frais :

Arrête les frais judiciaires d'appel à 7'860 fr., les met à la charge de A______ SA et les compense avec l'avance de frais, laquelle reste acquise à l'Etat.

Condamne A______ SA à verser 8'000 fr. à B______ SA à titre de dépens d'appel.

Siégeant :

Monsieur Cédric-Laurent MICHEL, président; Mesdames Pauline ERARD et Paola CAMPOMAGNANI, juges; Madame Camille LESTEVEN, greffière.

Le président :

Cédric-Laurent MICHEL

 

La greffière :

Camille LESTEVEN

 

 

 

 

 

 

 

Indication des voies de recours :

 

Conformément aux art. 72 ss de la loi fédérale sur le Tribunal fédéral du 17 juin 2005 (LTF; RS 173.110), le présent arrêt peut être porté dans les trente jours qui suivent sa notification avec expédition complète (art. 100 al. 1 LTF) par-devant le Tribunal fédéral par la voie du recours en matière civile.

Le recours doit être adressé au Tribunal fédéral, 1000 Lausanne 14.

Valeur litigieuse des conclusions pécuniaires au sens de la LTF supérieure ou égale à 30'000 fr.