""" Templates des différentes sections de contrats. Ce module contient tous les textes de base pour les différentes sections des contrats. """ from config import TELLERS_INFO, DEFAULT_DURATION, DEFAULT_RENEWAL, DEFAULT_TERRITORY class ContractTemplates: """Classe contenant tous les templates pour la génération des contrats.""" @staticmethod def get_title(contract_type): """ Retourne le titre du contrat en fonction du type. Args: contract_type (list): Liste des types de contrats sélectionnés Returns: str: Titre du contrat """ if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type: return "CONTRAT DE CESSION DE DROITS D'AUTEUR ET DE DROITS À L'IMAGE" elif "Auteur (droits d'auteur)" in contract_type: return "CONTRAT DE CESSION DE DROITS D'AUTEUR" else: return "CONTRAT DE CESSION DE DROITS À L'IMAGE" @staticmethod def get_preamble_text(contract_type, author_type, author_info): """ Retourne le texte du préambule du contrat. Args: contract_type (list): Liste des types de contrats sélectionnés author_type (str): Type d'auteur ("Personne physique" ou "Personne morale") author_info (dict): Informations sur l'auteur Returns: str: Texte du préambule """ # Partie commune à tous les contrats preamble = "ENTRE LES SOUSSIGNÉS :\n\n" # Informations sur l'auteur/modèle if author_type == "Personne physique": gentille = author_info.get("gentille", "M.") nom = author_info.get("nom", "") prenom = author_info.get("prenom", "") date_naissance = author_info.get("date_naissance", "") nationalite = author_info.get("nationalite", "") adresse = author_info.get("adresse", "") contact = author_info.get("contact", "") preamble += f"{gentille} {prenom} {nom}" if date_naissance: preamble += f", né(e) le {date_naissance}" if nationalite: preamble += f", de nationalité {nationalite}" preamble += f", domicilié(e) au {adresse}" if contact: preamble += f", joignable à {contact}" else: # Personne morale nom_societe = author_info.get("nom_societe", "") statut = author_info.get("statut", "") rcs = author_info.get("rcs", "") siege = author_info.get("siege", "") contact = author_info.get("contact", "") preamble += f"La société {nom_societe}, {statut}, immatriculée sous le numéro {rcs}, dont le siège social est situé {siege}" if contact: preamble += f", joignable à {contact}" # Dénomination en fonction du type de contrat if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type: preamble += ", ci-après dénommé(e) \"l'Auteur et le Modèle\"\n\n" elif "Auteur (droits d'auteur)" in contract_type: preamble += ", ci-après dénommé(e) \"l'Auteur\"\n\n" else: preamble += ", ci-après dénommé(e) \"le Modèle\"\n\n" # Informations sur Tellers (bénéficiaire) preamble += f"{TELLERS_INFO['nom']}, {TELLERS_INFO['forme_juridique']} au capital de {TELLERS_INFO['capital']}, " preamble += f"immatriculée sous le numéro {TELLERS_INFO['rcs']}, et dont le siège social est situé au : " preamble += f"{TELLERS_INFO['siege']}, ci-après dénommée \"le Cessionnaire\"\n\n" # Introduction commune preamble += "IL A ÉTÉ CONVENU CE QUI SUIT :\n\n" return preamble @staticmethod def get_object_clause(contract_type, work_description, image_description): """ Retourne la clause d'objet du contrat. Args: contract_type (list): Liste des types de contrats sélectionnés work_description (str): Description de l'œuvre image_description (str): Description de l'image Returns: str: Clause d'objet """ object_clause = "Article 1 – OBJET\n\n" if "Auteur (droits d'auteur)" in contract_type: object_clause += f"L'Auteur déclare être le créateur et titulaire exclusif des droits d'auteur sur l'œuvre suivante : {work_description}. " if "Image (droit à l'image)" in contract_type: object_clause += f"Le Modèle autorise l'utilisation et l'exploitation de son image telle qu'elle apparaît dans les photographies/vidéos suivantes : {image_description}. " object_clause += "\nPar le présent contrat, " if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type: object_clause += "l'Auteur cède au Cessionnaire certains droits sur son œuvre, et le Modèle autorise l'exploitation de son image, dans les conditions définies ci-après." elif "Auteur (droits d'auteur)" in contract_type: object_clause += "l'Auteur cède au Cessionnaire certains droits sur son œuvre dans les conditions définies ci-après." else: object_clause += "le Modèle autorise l'exploitation de son image dans les conditions définies ci-après." return object_clause @staticmethod def get_author_rights_clause(is_free, is_exclusive, additional_rights): """ Retourne la clause des droits cédés pour le droit d'auteur. Args: is_free (bool): True si la cession est gratuite, False sinon is_exclusive (bool): True si la cession est exclusive, False sinon additional_rights (list): Liste des droits supplémentaires sélectionnés Returns: str: Clause des droits cédés """ rights_clause = "Article 2 – ÉTENDUE DES DROITS CÉDÉS\n\n" # Texte de base pour tous les contrats de droits d'auteur rights_clause += "L'Auteur cède au Cessionnaire, " if is_exclusive: rights_clause += "à titre exclusif, " else: rights_clause += "à titre non exclusif, " if is_free: rights_clause += f"gratuitement et pour la durée précisée à l'article 3, les droits patrimoniaux suivants :\n\n" # Droits limités pour cession gratuite rights_clause += "- Le droit de reproduction : l'Auteur autorise le Cessionnaire à reproduire ou faire reproduire l'œuvre " rights_clause += "par tous procédés techniques connus ou inconnus à ce jour, sur tous supports et en tous formats.\n\n" rights_clause += "- Le droit de représentation : l'Auteur autorise le Cessionnaire à communiquer l'œuvre au public " rights_clause += "par tous procédés connus ou inconnus à ce jour, notamment par diffusion en ligne sur Internet, " rights_clause += "présentation publique, projection, ou tout autre moyen." else: rights_clause += f"pour la durée précisée à l'article 3 et moyennant la rémunération précisée à l'article approprié, les droits patrimoniaux suivants :\n\n" # Droits de base (toujours présents) rights_clause += "- Le droit de reproduction : l'Auteur autorise le Cessionnaire à reproduire ou faire reproduire l'œuvre " rights_clause += "par tous procédés techniques connus ou inconnus à ce jour, sur tous supports et en tous formats.\n\n" rights_clause += "- Le droit de représentation : l'Auteur autorise le Cessionnaire à communiquer l'œuvre au public " rights_clause += "par tous procédés connus ou inconnus à ce jour, notamment par diffusion en ligne sur Internet, " rights_clause += "présentation publique, projection, ou tout autre moyen.\n\n" # Droits supplémentaires pour les cessions onéreuses if "distribution" in additional_rights: rights_clause += "- Le droit de distribution : l'Auteur autorise le Cessionnaire à distribuer l'original de l'œuvre " rights_clause += "ou ses copies au public par la vente ou tout autre transfert de propriété.\n\n" if "usage" in additional_rights: rights_clause += "- Le droit d'usage : l'Auteur autorise le Cessionnaire à utiliser l'œuvre pour les besoins " rights_clause += "propres du Cessionnaire ou de ses clients, dans un cadre correspondant à l'objet du présent contrat.\n\n" if "adaptation" in additional_rights: rights_clause += "- Le droit d'adaptation : l'Auteur autorise le Cessionnaire à modifier, transformer, arranger, " rights_clause += "traduire l'œuvre ou à l'incorporer à d'autres œuvres, dans le respect du droit moral de l'Auteur.\n\n" if "pret" in additional_rights: rights_clause += "- Le droit de prêt : l'Auteur autorise le Cessionnaire à mettre l'œuvre à disposition pour un " rights_clause += "usage déterminé et pour une durée limitée, sans contrepartie financière directe.\n\n" if "location" in additional_rights: rights_clause += "- Le droit de location : l'Auteur autorise le Cessionnaire à mettre à disposition l'œuvre pour " rights_clause += "un usage temporaire et en échange d'une contrepartie économique.\n\n" if "suite" in additional_rights: rights_clause += "- Le droit de suite (pour œuvres graphiques et plastiques uniquement) : l'Auteur et le Cessionnaire " rights_clause += "reconnaissent l'existence du droit de suite permettant à l'auteur de percevoir un pourcentage sur le " rights_clause += "produit de toute revente de l'œuvre, conformément aux dispositions légales en vigueur.\n\n" # Clause d'exclusivité ou non-exclusivité if is_exclusive: rights_clause += "Pendant la durée de la présente cession, l'Auteur s'engage à ne pas céder les mêmes droits à des tiers " rights_clause += "et à ne pas exploiter lui-même l'œuvre selon les modalités cédées au Cessionnaire. Cette exclusivité " rights_clause += "constitue un élément substantiel du présent contrat, sans lequel le Cessionnaire n'aurait pas contracté." else: rights_clause += "La présente cession étant non exclusive, l'Auteur conserve le droit d'exploiter l'œuvre et de céder " rights_clause += "les mêmes droits à des tiers, sous réserve de ne pas nuire à l'exploitation des droits cédés au Cessionnaire." return rights_clause @staticmethod def get_image_rights_clause(is_free, is_exclusive): """ Retourne la clause des droits cédés pour le droit à l'image. Args: is_free (bool): True si la cession est gratuite, False sinon is_exclusive (bool): True si la cession est exclusive, False sinon Returns: str: Clause des droits à l'image """ image_clause = "Article 2 – AUTORISATION D'EXPLOITATION DE L'IMAGE\n\n" image_clause += "Le Modèle autorise expressément le Cessionnaire à fixer, reproduire et communiquer au public son image telle que décrite à l'article 1. " image_clause += "Cette autorisation comprend le droit de reproduire et de représenter l'image sur tous supports et par tous moyens, connus ou inconnus à ce jour. " image_clause += "Cette autorisation est consentie " if is_exclusive: image_clause += "à titre exclusif, " else: image_clause += "à titre non exclusif, " if is_free: image_clause += "gratuitement, " else: image_clause += "moyennant la rémunération précisée à l'article approprié, " image_clause += f"pour la durée et sur le territoire mentionnés ci-après.\n\n" # Restrictions d'utilisation pour le droit à l'image image_clause += "Le Cessionnaire s'engage expressément à ne pas porter atteinte à la dignité, à l'honneur ou à la réputation du Modèle. " image_clause += "Les images ne pourront pas être utilisées dans un contexte diffamatoire, pornographique, ou contraire aux bonnes mœurs. " image_clause += "Les parties s'engagent mutuellement à ne pas tenir de propos dénigrants l'une envers l'autre.\n\n" # Clause d'exclusivité pour le droit à l'image if is_exclusive: image_clause += "Le Modèle s'engage à ne pas autoriser l'exploitation de son image, telle que décrite à l'article 1, " image_clause += "à des tiers pendant la durée du présent contrat. Cette exclusivité constitue un élément substantiel du " image_clause += "présent contrat, sans lequel le Cessionnaire n'aurait pas contracté." else: image_clause += "La présente autorisation étant non exclusive, le Modèle conserve le droit d'autoriser l'exploitation " image_clause += "de son image à des tiers, sous réserve de ne pas nuire à l'exploitation des droits autorisés au Cessionnaire." return image_clause @staticmethod def get_duration_territory_clause(article_num): """ Retourne la clause de durée et territoire. Args: article_num (int): Numéro de l'article Returns: str: Clause de durée et territoire """ duration_clause = f"Article {article_num} – DURÉE ET TERRITOIRE\n\n" duration_clause += f"La présente cession est consentie pour une durée de {DEFAULT_DURATION} à compter de la date de signature du présent contrat. " duration_clause += f"Elle se renouvellera automatiquement par {DEFAULT_RENEWAL}, " duration_clause += "sauf dénonciation par l'une des parties par lettre recommandée avec accusé de réception au moins trois (3) mois avant l'expiration de la période en cours.\n\n" duration_clause += f"La cession est consentie pour le {DEFAULT_TERRITORY}, compte tenu de la nature numérique des services fournis par le Cessionnaire, " duration_clause += "susceptibles d'être accessibles à l'échelle mondiale." return duration_clause @staticmethod def get_supports_clause(article_num, supports): """ Retourne la clause des supports d'exploitation. Args: article_num (int): Numéro de l'article supports (list): Liste des supports sélectionnés Returns: str: Clause des supports """ supports_clause = f"Article {article_num} – SUPPORTS D'EXPLOITATION\n\n" # Formatage de la liste des supports supports_str = ", ".join(supports) supports_clause += f"Le Cessionnaire est autorisé à exploiter l'œuvre et/ou l'image sur les supports suivants : {supports_str}.\n\n" supports_clause += "Cette liste est limitative et le Cessionnaire s'engage à ne pas utiliser l'œuvre et/ou l'image sur d'autres supports " supports_clause += "sans l'autorisation préalable et écrite du Cédant." return supports_clause @staticmethod def get_remuneration_clause(article_num, is_free, remuneration): """ Retourne la clause de rémunération. Args: article_num (int): Numéro de l'article is_free (bool): True si la cession est gratuite, False sinon remuneration (str): Modalités de rémunération Returns: str: Clause de rémunération """ remuneration_clause = f"Article {article_num} – RÉMUNÉRATION\n\n" if is_free: remuneration_clause += "La présente cession est consentie à titre gratuit. " remuneration_clause += "Aucune rémunération n'est due par le Cessionnaire. " remuneration_clause += "Le Cédant déclare être pleinement informé de la portée de cette gratuité et y consentir expressément." else: remuneration_clause += f"En contrepartie de la présente cession, le Cessionnaire versera au Cédant la rémunération suivante : {remuneration}.\n\n" remuneration_clause += "Cette rémunération inclut tout montant dû au titre de l'ensemble des droits cédés, tels que définis dans le présent contrat. " remuneration_clause += "Le Cédant reconnaît que cette rémunération est conforme aux usages de la profession et proportionnée à l'exploitation prévue de l'œuvre." return remuneration_clause @staticmethod def get_warranties_clause(article_num, contract_type): """ Retourne la clause de garanties. Args: article_num (int): Numéro de l'article contract_type (list): Liste des types de contrats sélectionnés Returns: str: Clause de garanties """ warranties_clause = f"Article {article_num} – GARANTIES\n\n" if "Auteur (droits d'auteur)" in contract_type: warranties_clause += "L'Auteur garantit au Cessionnaire qu'il est bien titulaire des droits cédés et que l'œuvre n'enfreint pas les droits de tiers. " warranties_clause += "L'Auteur garantit notamment que l'œuvre est originale et qu'il détient l'intégralité des droits de propriété intellectuelle sur celle-ci. " warranties_clause += "Il garantit le Cessionnaire contre toute revendication, recours ou action que pourrait former toute personne physique ou morale " warranties_clause += "estimant avoir des droits sur l'œuvre ou sur tout élément de celle-ci.\n\n" if "Image (droit à l'image)" in contract_type: warranties_clause += "Le Modèle garantit qu'il est libre de consentir à la présente autorisation et que son image n'est pas liée " warranties_clause += "à d'autres engagements exclusifs incompatibles avec le présent contrat. " warranties_clause += "Le Modèle garantit le Cessionnaire contre tout recours ou action que pourraient former des tiers à cet égard.\n\n" warranties_clause += "Le Cessionnaire s'engage à mentionner le nom de l'Auteur lors de toute exploitation de l'œuvre, " warranties_clause += "sauf lorsque cela est techniquement impossible ou inapproprié compte tenu du support d'exploitation." return warranties_clause @staticmethod def get_termination_clause(article_num): """ Retourne la clause de résiliation. Args: article_num (int): Numéro de l'article Returns: str: Clause de résiliation """ termination_clause = f"Article {article_num} – RÉSILIATION\n\n" termination_clause += "Le présent contrat pourra être résilié de plein droit par l'une des parties en cas d'inexécution " termination_clause += "par l'autre partie de l'une de ses obligations. " termination_clause += "Cette résiliation ne deviendra effective que trois mois après l'envoi par la partie plaignante " termination_clause += "d'une lettre recommandée avec accusé de réception, exposant les motifs de la plainte, " termination_clause += "à moins que, dans ce délai, la partie défaillante n'ait satisfait à ses obligations ou " termination_clause += "n'ait apporté la preuve d'un empêchement consécutif à un cas de force majeure.\n\n" termination_clause += "L'exercice de cette faculté de résiliation ne dispense pas la partie défaillante de remplir " termination_clause += "les obligations contractées jusqu'à la date de prise d'effet de la résiliation et ce, " termination_clause += "sous réserve des dommages éventuellement subis par la partie plaignante du fait de la résiliation anticipée du contrat." return termination_clause @staticmethod def get_applicable_law_clause(article_num): """ Retourne la clause de loi applicable. Args: article_num (int): Numéro de l'article Returns: str: Clause de loi applicable """ law_clause = f"Article {article_num} – LOI APPLICABLE ET JURIDICTION COMPÉTENTE\n\n" law_clause += "Le présent contrat est soumis à la loi française.\n\n" law_clause += "En cas de litige sur l'interprétation ou l'exécution du présent contrat, les parties s'efforceront de résoudre leur différend à l'amiable. " law_clause += "À défaut d'accord amiable dans un délai de trente (30) jours à compter de la notification du différend par l'une des parties à l'autre, " law_clause += "tout litige sera soumis aux tribunaux compétents de Lyon, auxquels il est fait expressément attribution de compétence, " law_clause += "y compris en cas de référé, d'appel en garantie ou de pluralité de défendeurs." return law_clause @staticmethod def get_signatures_template(contract_type): """ Retourne le template des signatures. Args: contract_type (list): Liste des types de contrats sélectionnés Returns: str: Template des signatures """ signatures = "\n\nFait à ________________, le ________________\n\n" # Adapter la signature en fonction du type de contrat if "Auteur (droits d'auteur)" in contract_type and "Image (droit à l'image)" in contract_type: signatures += "L'Auteur et Modèle Le Cessionnaire" elif "Auteur (droits d'auteur)" in contract_type: signatures += "L'Auteur Le Cessionnaire" else: signatures += "Le Modèle Le Cessionnaire" signatures += "\n\n(Signature précédée de la mention « Lu et approuvé »)" return signatures