Presentation given as part of the Bordeaux ApérOps meetup on February 11, 2026.
The stakes of transparency in healthcare #
The Mediator scandal #
Mediator is a drug derived from amphetamine, marketed by the Servier laboratory as an antidiabetic from 1976. Beyond its official framework of use, it was however massively prescribed as an appetite suppressant for more than thirty years. During all these years, it is said to have caused the death of more than 1,500 people and created serious illnesses in thousands of others.
The scandal broke in 2009 when pulmonologist Irène Frachon published the book Mediator 150 mg: How many deaths?.

Transparence Santé #
Following this scandal which had highlighted conflicts of interest in oversight bodies, a law was passed to require pharmaceutical companies to declare all remuneration or benefit in kind provided to healthcare professionals or any other actor related to health (associations, companies). All these declarations were made available to the public through an open data platform Transparence Santé.

A murky transparency #
While transparency can be considered achieved through data availability, the objective has not been reached. Poor data quality, mainly lack of normalization and duplicates, make data exploitation very complicated for anyone without data skills.
A simple search for a treating physician can quickly turn into a headache. The example below shows that multiple beneficiaries each appear multiple times. The maximum we see here is 3 duplicates but it’s possible to have several dozen for hospitals or other associations with complex names.

The difficulties persist when interested in a particular beneficiary account. The interface only allows us to see a list of declarations without any way to aggregate amounts for example. When the account benefits from many declarations, it becomes unmanageable for a person without data management knowledge to have a comprehensive and reliable view of conflicts of interest risks.

Data quality as the basis for transparency #
The EurosForDocs association #
EurosForDocs was then created to resolve these issues and transform the Transparence Santé database into a real tool for combating conflicts of interest. The association is organized around 3 main objectives:
- data cleanup, particularly merging duplicates;
- making data available in an interactive and intuitive dashboard;
- supporting journalists, researchers and citizens in data exploitation.

The road to beneficiary unification #
The need for reliable identifiers #
When manipulating data where the same entity can appear multiple times, it’s always preferable to assign an identification number to each identity. This way, it’s easy to select only the data related to a specific entity using this identifier. On Transparence Santé, it would be practical to have a unique identifier for a beneficiary, regardless of declaration errors that companies might make.
Indeed, the administration long ago found a solution to this problem. Healthcare professionals with the right to practice in France must register and are assigned a national identifier: the RPPS. Similarly, any company or association must register and receive respectively a SIREN number or an RNA number (or both).
In theory, laboratories have all the information to create a clean and well-structured dataset. Unfortunately, declaring companies don’t use them systematically. On the contrary, nearly 50% of declarations concerning legal entities do not declare a SIREN or RNA number. This means that nearly 500 million euros of influence cannot be easily attributed to an institution.

The main challenge for EurosForDocs is therefore to try to reassign one of these national identifiers to each beneficiary in the database.
Indexing beneficiaries #
When companies don’t declare a national identifier, no other identifier (even an internal one) is created. So a company can declare additional remuneration to an entity but name it differently. The phenomenon is amplified if this entity also receives remuneration from other companies. In the end, you can have multiple mentions, potentially very different, of the same entity without an explicit link between them.
Our beneficiary deduplication strategy then organizes into two stages. First we create a unique identifier for each declared variant of beneficiaries. Through data exploration, we decided that a company declaring the same (name, first name, profession, postal_code) twice refers to the same entity. We then use a hash function that transforms this combination of characteristics into a random integer specific to this combination. This integer will serve to uniquely identify a beneficiary account. This article presents hash functions in more detail in another use case.

Once we have defined our beneficiary accounts, we will seek to clean them and then identify all accounts that refer to the same entity so that, ultimately, we can merge them.
Cleaning inconsistent RPPS #
When we defined the information that defined a beneficiary account, we observed that for the same combination of (name, first name, profession, postal_code), some companies could add different modes of identification. For example, one declaration would contain the RNA number and another the SIREN number. We therefore decided to keep this diversity within a beneficiary account.
However, it regularly happens that for healthcare professionals, two distinct RPPS numbers are present in the same beneficiary account. After detailed analysis of these cases, we observed that only one RPPS is consistent with the other declared information and that the other numbers correspond to very different professionals.
Our objective being to merge beneficiaries around an RPPS number, we must ensure that each beneficiary account is internally consistent. Through the healthcare professionals directory, we can obtain official information linked to an RPPS number. A scoring system (fuzzy matching) between declared information and official information for each RPPS allows us to estimate the consistency between official and declared information, and keep only the most relevant RPPS number.

RPPS assignment #
Many declarations don’t have the luxury of having even a single RPPS number. We then seek to link the information documented by the company with a healthcare professional from the directory. We first look for an exact match on name, first name, profession and postal code. We add to this logic mechanisms to handle the case of compound names for which only part might be entered, or the order inverted.
Many declarations have missing or incorrect information, which makes the first step ineffective for finding an RPPS. We then test unidentified beneficiary accounts with looser constraints, for example not considering the postal code. By relaxing constraints, the risk of hitting homonyms increases. We only assign an RPPS if there is only one healthcare professional corresponding to the constraints.

Assign direct links #
Once we have assigned as many RPPS identifiers as possible to beneficiaries, we will seek to directly identify links between accounts. We hope that accounts without RPPS can obtain one indirectly. Likewise, we hope that legal entity accounts, for which we have no mechanism to find the SIREN, can obtain one.
Similar to the creation of beneficiary accounts, we group accounts by (name, first name, postal code and profession).
If the group brings together multiple distinct SIREN (or RNA or RPPS) numbers, we consider this information to refer to multiple distinct entities (potentially due to declaration errors) and do nothing.
Otherwise, we create a link between all these accounts to consider them as belonging to the same entity.

Link associations through machine learning #
Unlike healthcare professionals for whom there are relatively few possible variations (apart from compound names), associations (or legal entities in general) can be named very differently while maintaining clarity of the targeted entity. This EurosForDocs case study explores a particular case.
We therefore seek to identify whether two potentially very different names (from the perspective of standard string similarity measures) refer to the same entity. To obtain elements to compare between the two names, we apply a method called shingles. The idea is to break down our association name into all combinations of 3 consecutive letters. The association name is then transformed into a sentence where elements are not words but our trigrams. From this new representation of each name, we can apply standard natural language techniques (NLP) to evaluate the similarity between the two names. Finally, a machine learning model will use the different notions of similarity and determine the best way to combine them to identify pairs of names from the same entity.

Merging accounts #
At this level of data processing, beneficiary accounts can be linked to one or multiple national identifiers but also to one or multiple other accounts. To recreate a beneficiary entity, we represent all accounts and relationships in graph form. This representation allows us to use an algorithm to group all beneficiary accounts linked to each other, even indirectly. Each of these blobs is then interpreted as an entity. Accounts belonging to the entity will be merged and the aggregated information from the entity will serve to normalize beneficiary information in declarations. For more details on account merging, see this dedicated article

Still for data quality reasons, it can happen that multiple SIRENs (or RPPS, RNA) are present in the same blob. A national identifier must identify an entity uniquely, so this situation informs us that one or more links in our database are false and group accounts corresponding to separate entities. We are able to easily identify these situations (if not fix them) and we prevent account merging belonging to these blobs. This is why in practice, beneficiary accounts for university hospitals are rarely merged because there is always a declaration to introduce a wrong SIREN or the RNA of an association.

Without data quality, transparency is a myth #
This EurosForDocs cleanup work significantly improves the quality of Transparence Santé data. The ability to uniquely and accurately identify a healthcare professional (and soon an association) greatly facilitates the work of journalists and citizens, as evidenced by numerous collaborations in article writing.
