Dans le cadre du développement d’une application de gestion de cession de droits pour un grand groupe d’édition, notre client nous a demandé d’ajouter un module de calcul de droits disponibles. Son objectif était de savoir rapidement quels droits de diffusion étaient disponibles à la vente et dans quelles conditions.
À première vue, cela ne paraissait pas très compliqué : les droits acquis (qu’un ou plusieurs producteurs ont cédés à notre client) et donc disponibles à la vente, sont enregistrés dans les mandats, et les droits cédés aux diffuseurs sont enregistrés dans les contrats.
Autrement dit les mandats représentent les entrées de stock et les contrats les sorties.
Droits des mandats – droits des contrats = droits disponibles ! Voilà, il n’y a plus qu’à écrire un script et on pourra aller boire une bière 🍺. Oui, mais… ce n’est pas aussi simple qu’il y paraît…
Les droits enregistrés dans les mandats peuvent inclure plusieurs modes de diffusion. Chaque mode peut être acquis en exclusivité (c’est-à-dire que notre client est le seul à disposer de ce droit de vente), en non-exclusivité (auquel cas notre client ne pourra pas le vendre en exclusivité), ou en « Holdback » (qui correspond à une interdiction de vente soit totale, soit partielle, par exemple une interdiction de vendre le droit de diffusion du programme à un diffuseur donné). Chaque mode de diffusion acquis l’est pendant une période donnée, sur un ou plusieurs territoire(s) donné(s), les territoires pouvant eux-mêmes être une combinaison de régions ou de pays, et dans une ou plusieurs langues.
Par exemple, les droits acquis de mandats peuvent être de la forme :
Programmes : La soupe aux choux et L’aile ou la cuisse
Modes : Pay TV (Option : Exclusivité) et VOD (Option : Non-exclusivité)
Territoires : Pays de l’UE, Pays du Commonwealth (sans l’Inde ni le Bangladesh) et avec le Canada
Langues : français, anglais, allemand, espagnol, italien
Dates : du 01/01/2020 au 31/12/2023
Le script devrait donc commencer par linéariser (créer des lignes ou enregistrements pour représenter toutes les combinaisons possibles) l’ensemble des droits acquis pour avoir une liste de disponibilités. Dans notre exemple la liste est la suivante :
On ne vous liste pas les 1660 lignes de cet exemple simple (2 programmes x 2 modes x 83 pays x 5 langues)
À ce stade, cela pourrait rester raisonnable, même si nous doutions déjà de la capacité de FileMaker à gérer efficacement ce calcul pour des dizaines de mandats pouvant contenir des dizaines de programmes acquis avec chacun différentes d’options de territoires et langues sur des périodes différentes. De plus, notre client nous indique alors qu’il est possible de forcer des options sur les pays ou les langues : il est donc possible d’acquérir la diffusion d’un programme en Pay TV en exclusivité dans les Pays de l’UE et en allemand, mais pas en Allemagne (si cela est déjà détenu par un concurrent en non-exclusivité), donc on va forcer la non-exclusivité sur l’Allemagne uniquement. Vous suivez toujours ?
Si on reprend l’exemple précédent :
Programmes : La soupe aux choux et L’aile ou la cuisse
Modes : Pay TV (Option : Exclusivité) et VOD (Option : Non-exclusivité)
Territoires : Pays de l’UE (Forcer la non-exclusivité sur l’Allemagne), Pays du Commonwealth (sans l’Inde ni le Bangladesh) et avec le Canada
Langues : français, anglais, allemand, espagnol, italien
Lorsqu’on linéarise les droits acquis pour l’Allemagne, dans tous les cas, il faut forcer la Non-exclusivité. Cela n’aura pas d’impact sur le mode VOD mais changera l’option pour le mode Pay TV et ceci dans toutes les langues.
Ce n’est pas terminé 🤯.
Les options forcées peuvent l’être sur les régions (Pays de l’UE par exemple), un pays ou une langue, il a donc fallu définir des règles de priorité d’application des options pour chaque cas possible et notamment lorsque des options contradictoires sont définies dans une combinaison.
Dans un catalogue d’environ 1000 programmes avec en moyenne 100 acquisitions et 500 cessions par an sur des périodes différentes couvrant plusieurs années, le nombre de lignes de droits acquis et cédés linéarisées possible dans une recherche est astronomique et notre perspective de boire une bière après la rédaction de ce script s’éloignait de plus en plus. 😕
De plus, une fois l’ensemble des règles de linéarisation des droits acquis et cédés, nous avons dû déterminer les règles de soustraction (ce qui fut finalement la partie la plus simple). Les droits cédés sont soustraits de la liste des droits acquis pour obtenir les droits disponibles, avec quelques subtilités tout de même : un droit cédé en exclusivité n’est plus disponible à la vente, un droit cédé en non-exclusivité reste disponible à la vente en non-exclusivité, un droit en holdback total n’est pas disponible à la vente et un droit en holdback partiel est indiqué à l’utilisateur.
Finalement, après des heures de réflexions collectives avec notre client pour comprendre le fonctionnement des droits acquis et cédés, et la manière dont il souhaitait que les droits soient linéarisés et la disponibilité calculée, il devenait évident que FileMaker, avec sa mémoire sur disque, ne pourrait pas gérer ce calcul dans un temps raisonnable pour les utilisateurs. Il nous fallait trouver un outil travaillant en mémoire vive. Nous avons décidé de tirer parti de l’intégration de FileMaker avec Javascript, ce dernier étant bien plus efficace pour ce type de traitements 💡.
Dans l’application de gestion des cessions de droits, FileMaker dispose des droits acquis et cédés, regroupés dans une table qui contient toutes les informations sur les options (type d’option, date de début de de fin d’application, lien vers les blocs de droits cédés ou acquis, lien vers le ou les programmes, pays, langues, modes…).
Lorsque que l’utilisateur saisit une recherche, il doit au minimum rechercher les disponibilités à une date donnée et peut ajouter des critères de recherche sur un programme, un pays, une langue… FileMaker va chercher les droits acquis et cédés répondant aux critères de recherche. La liste des droits acquis et cédés trouvée est extraite par FileMaker Data API, le résultat est injecté dans le code d’un web viewer sous forme de json. Le scripts JS réalise tout le travail de linéarisation en appliquant les règles de priorité de chaque option ainsi que la soustraction. Il renvoie à FileMaker via FileMaker.PerformScriptWithOption le résultat contenant la liste des droits disponibles. FileMaker transforme ensuite ce résultat en enregistrements dans la base de données et n’a plus qu’à présenter les disponibilités à l’utilisateur dans une table de droits disponibles.
Les cas courants demandent seulement quelques secondes d’exécution. Les cas les plus complexes quelques dizaines de secondes. 💪
Une fois les scripts FileMaker et JS rédigés, tous les nœuds au cerveau dénoués, une validation du fonctionnement de ce moteur de recherche de droits disponibles et la rédaction d’une documentation utilisateur, nous avons finalement bien mérité une bière 🍻 !
Leslie Audigane & Karl Vossen